SR-MPLS技术基础讲解

news2024/9/29 5:35:33

目录

SR-MPLS基础概念

使用Segment Routeing MPLS技术的优点

Segment Routeing MPLS的基本原理

SRGB

Segment ID

Bind SID 粘连标签

OSPF对于SR-MPLS的扩展

OSPF对邻接SID做了细分

10类LSA定义的TLV类型

10类LSA定义的TLV的报文格式            

ISIS对SR-MPLS的扩展

ISIS对邻接SID做了细分

ISIS定义的Sub-TLV的类型

ISIS定义的Sub-TLV的报文格式

数据转发隧道建立方式

SR-MPLS BE

SR-MPLS TE

SR-MPLS TE Policy

数据转发路径的类型

基于Perfix Segment的转发路径

基于Adjacency Segment的转发路径

基于Adjacency + Node Segment的转发路径

SR-MPLS与LDP共存

SR与LDP互通场景

SR与LDP共存场景


SR-MPLS基础概念

SR-MPLS的标签不是基于LDP下发的,是基于OSPF/ISIS/BGP下发的

使用Segment Routeing MPLS技术的优点

简化了MPLS网络的控制平面

SR可以使用控制器或者IGP进行集中算路和分发标签,不再需要RSVP-TE、LDP等隧道协议(SR可以直接应用于MPLS架构,转发平面没有变化)

通过SR可以实现TI-LFA(Topology-Independent) FRR保护(即拓扑无关的备份路径)

在SR的基础上结合RLFA FRR算法,形成高效的TL-LFA FRR算法

可以支持任意拓扑的节点和链路保护,能够弥补传统隧道保护技术的不足

RLFA FRR需要通过满足链路/节点保护公式才可进行路径备份(需要依赖于拓扑)

SR技术更具有网络扩展的能力

SR技术仅在头节点对报文进行标签操作既可以控制业务路径,中间节点不需要维护路径信息(SR技术的标签数量为  全网节点数+本地邻接数,只与网络规模有关,与隧道数量和业务规模无关)

SR技术同时支持传统网络和SDN网络

SR同时支持控制器的集中控制模式和转发器的分布控制模式


Segment Routeing MPLS的基本原理

SR域(SR Domain)

SR节点(运行了SR技术)的集合

SID(Segment ID)

用于标识唯一的段;在转发平面可以映射为MPLS标签

SRGB(SR Global Block)

用户指定的为SR MPLS预留的全局标签集合(即全局标签的范围)

全局可见,全局有效(LDP的标签是本地有效的,也只有本地才可以看到)

SRLB(SR Local Block)

用户指定的为SR MPLS预留的本地标签集合(即本地标签的范围)

全局可见,但是只在本地有效,主要用于配置Binding SID

SRGB

每台设备通过扩展的IGP路由协议通告自己的SRGB和前缀SID的索引(index)

然后设备自己分别根据SRGB和index计算出入站以及出站SID

在实际部署中,建议设备采用统一的SRGB

设备如何生成出、入站标签——索引需要保证全局唯一

入站标签是通过自己的SRGB+收到的索引生成的

出站是通过收到的别人的SRGB+收到额索引生成的

in和out是根据路由来看的(与路由相反)

实例

当设备配置的SRGB是16000 ~17000

配置的前缀SID为16003

会将前缀SID的索引3传递给路由(这个前缀是全局一样的,出入标签不一定全局一样)

所以入标签不一定是全部一样的,但是建议全部一样,即配置相同的SRGB

Segment ID

SID主要分为Prefix SID、Node SID、Adjacency SID三种ID方式

Prefix SID(前缀SID)——手工配置

Prefix SID用于标识网络中某个目的地址前缀(每个网段一个Prefix SID)

Prefix SID通过IGP协议扩散到其它网元,全局可见,全局有效

Node SID(节点SID)——手工配置

Node SID是一种特殊的Prefix SID,用于标识SR节点(即SR节点都有唯一的Node SID)

在节点的Loopback接口下配置IP地址作为前缀

这个LoopBack地址的前缀SID就是Node SID

Adjacency SID(邻接SID)——可以手工配置,可以动态生成

Adj SID也可以手工配置(通过手工配置SRLB生成)

Adj SID用于标识网络种的某个邻接(可以理解为接口SID,每个接口都有一个Adj SID)

Adj SID通过IGP协议扩散到其它网元,全局可见,本地有效(只在本地生成标签转发表)

注意事项

在实际配置过程中,默认情况下,我们一般将Prefix SID都理解为Node SID(因为只有节点SID才可以唯一标识一台设备,Prefix SID不行)

通过按序组合Prefix SID和邻接SID,可以构建出网络内的任何路径

Prefix SID全网唯一,邻接SID只需要本地唯一就可以

Bind SID 粘连标签

Bind SID的作用

Bind SID通过指定一个本地标签,使用此本地标签关联本地的一个SR-MPLS TE隧道或者一个SR-MPLS TE Policy(即Bind SID 6000可以代表标签栈<16001,16003>)

也可以减少设备封装的标签栈层数,可以将多个SR-MPLS TE隧道或者SR-MPLS TE Policy连接

注意事项

Bind SID一般压在标签栈的最底层

当设备收到与Bindingd SID后,查找本地此标签对应的隧道,然后将数据迭代到这条隧道,可以将两个隧道粘连起来


OSPF对于SR-MPLS的扩展

OSPF为了支持SR-MPLS(通过OSPF下发拓扑信息、前缀信息、SRGB和标签信息的通告)

新增了10类LSA(在10类LSA中又新增了TLV和Sub-TLV)

注意事项:

To-Way的邻居状态也可以分配标签

运行OSPF的接口不需要再开启MPLS,只需要全局开启MPLS就可以

OSPF对邻接SID做了细分

在OSPF中,将Adj SID细分为LAN Adj SID和Adj SID

什么情况下产生

当设备为DR时,产生的Adj SID类型就为LAN Adj SID

当设备为非DR或P2P网络类型时,产生的Adj SID类型就为Adj SID

两者的报文有什么区别(具体在TLV的报文格式有介绍)

Adj SID直接通过Link ID表明DR的router id地址,知道自己的直连设备

LAN Adj SID的Link ID是自己,无法知道自身和哪些设备相连,需要会多携带 Neighbor ID,表明此接口的邻居是谁

10类LSA定义的TLV类型

10类LSA (Opaque LSA,即不透明的LSA)通过定义TLV和Sub-TLV来完成对SR-MPLS技术的支持

SR Local Block TLV              用于通告自己SRLB范围

10类LSA的Type 8下定义了2个TLV和1个Sub TLV支持SR-MPLS

SR-Algorithm TLV(TLV 8)              用于对外通告自己使用的算法

SID/Label Range TLV(TLV 9)           用于通告自己的SRGB范围

SID/Label Sub-TLV(TLV9的Sub TLV1)  与TLV9一起确定SRGB的范围

10类LSA的Type 7下定义了1个TLV和1个Sub-TLV支持SR-MPLS

OSPFv2 Extended Prefix TLV(TLV 1)        用于通告自身的前缀信息

Prefix SID Sub-TLV(TLV1的Sub Tlv 2)     用于通告节点SID信息

10类LSA的Type 7下定义了1个TLV和2个Sub-TLV支持SR-MPLS

OSPFv2 Extended Link TLV(TLV1)        用于通告自身的链路状态信息

Adj-SID Sub-TLV(TLV1的Sub TLV2)     用于通告自身的Adj信息(非DR)

LAN Adj-SID Sub-TLV(TLV1的Sub-TLV3)用于通告自身的LAN Adj SID信息(DR)

10类LSA定义的TLV的报文格式            

10类LSA的头部信息

 

LS Type:标识LSA的类型(10类LSA可以细分为3大类型)

       Opq-Link  (分别代表链路上泛洪)

Opq-Area (OSPF区域内泛洪)

Opq-AS   (AS域内泛洪)

Link State ID:由Type和ID两部分组成(共8字节)

常见的1类等LSA此字段为4字节,只有Link State ID部分(无Type)

Advertising Router:产生此LSA的设备的Router-id

10类LSA的Type 4下的TLV

SR-Algorithm TLV

SR-Algorithm:算法类型

SID/Label Range TLV

Range Size:标识SRGB的范围,与SID.Label共同决定一个SRGB的空间范围

SID/Label Sub-TLV

TLV Length:3标识此字段最右边的20位用于标记MPLS标签值

                      4标识此字段代表32位的SID

10类LSA的Type 7下的TLV

OSPFv2 Extended Prefix RLV

Atttach:    只有在多区域的时候才会用得到(单区域为0)

Node Flag : 1表示是Node SID,0表示不是Node节点

(手动配置Prefix节点时,默认都是Node节点)

Prefix SID Sub-TLV

NP:No-PHP,倒数第二条弹出标志(默认0)

1表示不用倒数第二条弹出,0表示要倒数第二跳弹出

E:Explicit-Null,显式空标签标志(默认0)

1表示启用显式空标签特性,0表示启用隐藏空标签特性

V:Value/Label标志(默认0)

       1表示Prefix-SID携带完整标签值而不是索引值,0表示携带索引值

L:Local标志(默认0)

       1表示Prrfix SID携带的标签值/索引值只具有本地意义,0表示全局意义

SID/Lavel:

此处表示索引值为1,即针对前缀1.1.1.1分得的索引值为1

10类LSA的Type 8下的TLV

OSPFv2 Extended Link TLV

Link ID:DR的Router ID

Link Data:产生此TLV1的接口IP地址

Adj SID Sub-TLV

V:Value/Index字段(默认为1)

       1表示Adj-SID携带完整标签值而不是索引值,0表示携带索引值

L:Local/Global字段(默认为1)

       1表示Adj SID携带的标签值/索引值只具有本地意义,0表示全局意义

P:表示标签是否是永久的(即是动态生成的还是手工配置的)默认0

       0表示动态生成的,1表示手工配置的(永久的)

LAN Adj SID Sub-TLV同Adj SID Sub-TLV字段(多了个Neighbor ID字段)


ISIS对SR-MPLS的扩展

ISIS通过在原有的TLV的基础上添加子的TLV(Sub-TLV)来支持SR-MPLS

使用ISIS为SR-MPLS分配标签时,带宽模式必须改为Wide模式(因为窄带不支持Sub-TLV)

ISIS对邻接SID做了细分

在ISIS中,将Adj SID细分为LAN Adj SID和Adj SID

什么情况下产生

当链路为广播链路时,产生的Adj SID类型就为LAN Adj SID

当链路为P2P链路时,产生的Adj SID类型就为Adj SID

ISIS定义的Sub-TLV的类型

ISIS常用TLV的含义可参考下文

ISIS——图解9种报文与TLV讲解_静下心来敲木鱼的博客-CSDN博客_isis几种报文icon-default.png?t=M85Bhttps://blog.csdn.net/m0_49864110/article/details/126069383?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166988209516782390546976%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166988209516782390546976&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-5-126069383-null-null.nonecase&utm_term=LSP&spm=1018.2226.3001.4450

Prefix-SID Sub-TLV

通告Prefix SID;存在于TLV 135(Extended IPv4 Reachability)、TLV 235(Multitopology IPv4 Reachability)、TLV 236(IPv6 IP Reachability)、TLC 237(Multitopology IPv6 IP Reachability)

LAN Adj-SID Sub-TLV

在广播网络通告Adj SID;存在于TLV 22(Extended IS reachability)、TLV 23(IS Neighbor Attribute)、TLV 141(Inter-AS reachability information)、TLV 222(Multitopology IS)、TLV 223(Multitopology IS)

Adj-SID Sub-TLV

在P2P网络通告Adj SID;目前仅支持携带在TLV 22中

SR-Capabilities Sub-TLV

通告自己的SRGB范围;存在于TLV 242(Router Capability)

SR-Algorithm Sub-TLV

通告自己使用的算法;存在于TLV 242(Router Capability)

Local Block Sub-TLV

通告自己的SRLB算法;存在于TLV 242(Router Capability)

SID/Label Binding TLV

通告前缀和SID的映射信息;TLV 149(一般用于SR为LDP设备分配前置SID)

OSPF通告前缀和SID的映射信息通过Prefix SID Sub-TLV实现

ISIS定义的Sub-TLV的报文格式

Prefix-SID Sub-TLV

Flags字段

R:重发布标志位,有没有做泄露

       1表示此前缀是从其它协议引入或者从其它Level级别泄露而来的

       0表示就是本地产生的

N:Node-SID标志(默认为1)

       1表示是Node SID,0表示不是Node节点

(手动配置Prefix节点时,默认都是Node节点)

P:No-PHP,倒数第二条弹出标志(默认为0)

1表示不用倒数第二条弹出,0表示要倒数第二跳弹出

E:Explicit-Null,显式空标签标志(默认0)

1表示启用显式空标签特性,0表示启用隐藏空标签特性

V:Value/Label标志(默认0)

       1表示Prefix-SID携带完整标签值而不是索引值,0表示携带索引值

L:Local标志(默认0)

       1表示Prrfix SID携带的标签值/索引值只具有本地意义,0表示全局意义

LAN-Adj-SID Sub-TLV

F:地址簇标志

       1表示IPv6,未置位表示IPv4

V:Value/Index字段(默认为1)

       1表示Adj-SID携带完整标签值而不是索引值,0表示携带索引值

L:Local/Global字段(默认为1)

       1表示Adj SID携带的标签值/索引值只具有本地意义,0表示全局意义

S:序列标志

       1表示Adj-SID是一个Adjacency序列

P:表示标签是否是永久的(即是动态生成的还是手工配置的)默认0

       0表示动态生成的,1表示手工配置的(永久的)

Weight:代表Adj-SID的权重,可以用于负载分担

SR-Capabilities Sub-TLV

I:MPLS IPv4标志

1表示可以处理从所有接口接收到的SR-MPLS IPv4报文

V:MPLS IPv6标志

1表示可以处理从所有接口接收到的SR-MPLS IPv6报文

通过Range和Label字段共同确定SRGB的范围(范围为Label值~Label值+Range值)

SID/Label Binding TLV


数据转发隧道建立方式

SR-MPLS BE

不需要创建隧道口,只需要将路由迭代进SR建立的标签隧道就可以(同LDP的LSP)

SR-MPLS BE LSP的创建(两步)

1、进行标签分配/网络拓扑上报(基于控制器创建LSP)

2、进行路径计算

一般手工创建SR-MPLS BE隧道

在SR节点配置SRGB,然后再Loop口配置Prefix SID

之后通过IGP协议携带自己的SRGB+Index向全网扩散

通过接收到的SRGB+Index+自己的SRGB生成相应的出、入标签

SR-MPLS BE如何指导数据转发

通过SR技术建立标签转发路径, 然后基于Prefix SID转发(只使用一层Prefix SID实现转发),通过IGP使用最短路径算法计算得到的最优SR LSP

SR-MPLS BE LSP的数据转发(数据转发图在转发路径类型有讲解)

同MPLS,包括标签栈压入(Push)、标签栈交换(Swap)和标签弹出(Pop)

Push:当报文进入SR LSP时,入节点设备在二层首部和IP首部之间插入一个标签(或者根据需要在标签栈顶增加一个新的标签)

Swap:当报文在SR域内转发时,根据标签转发表,用下一跳分配的标签替换SR报文的栈顶标签

Pop:当报文在离开SR域时,根据栈顶的标签查找转发出接口之后,将SR报文的栈顶标签剥掉

具体SR-MPLS BE隧道数据转发的例子(以SRGB不同情况为例子)

A设备:A收到数据报文,添加26100并转转发

B设备:B节点收到26100标签,进行标签交换,将26100标签弹出,替换为标签36100

C设备:C节点收到36100标签,进行标签交换,将36100标签弹出,替换为标签16100

D设备:将标签16100弹出,然后继续查找路由转发

注意事项

SR-MPLS BE是一种替代“LDP+IGP方案“的一种新方案

只使用IGP协议就可以完成标签的分发与路径的计算

一般SR-MPLS BE也会作为逃生路径

SR-MPLS TE

SR-MPLS TE(段路由流量工程)是使用SR作为控制协议的一种新型的TE隧道技术(取代了传统的RSVP-TE技术)

SR-MPLS TE是通过Tunnel接口来建立和管理的,因此需要在隧道的入节点上配置SR-MPLS TE的隧道接口(将流量引导到隧道口)

SR-MPLS TE 隧道的创建

控制器算路创建SR-MPLS TE隧道

1、控制器收集网络拓扑信息(有两种方式)

IGP的方式(不推荐)

如果IGP有多个区域,控制器无法知道其它区域的拓扑(域间传递路由信息)

因此控制器还需要与其它区域再相连才可以获得到网络完整的拓扑信息(或者控制器只收集ABR的信息—ABR两边区域的拓扑都有)

BGP -LS的方式(控制器和转发器建立BGP-LS邻居)

2、转发器进行标签分配,并将分配的标签信息上报给控制器

转发器的IGP协议来分配标签,全网通告

转发器与控制器建立BGP-LS邻居信息,并通过BGP-LS将分配的标签上报给控制器

3、控制器计算路径并下发到转发器

控制器通过收集到的网络拓扑信息和标签信息计算出转发路径(标签栈)

然后将标签栈通过PCEP下发到转发器

4、转发器根据控制器下发的路径进行数据转发

转发器根据控制器下发的标签栈信息进行数据转发

手工配置显式路径实现SR-MPPS TE隧道的建立

转发器上通过IGP协议分配标签,然后手工配置显式路径(标签栈)来实现数据转发

SR-MPLS TE如何指导数据转发

SR-MPLS TE可以通过多个SID(多层标签)进行组合来指导数据的转发

  1. 使用多个Prefix SID实现转发(基于Prefix Segment的转发路径)
  2. 使用多个Adj SID实现转发(基于Adj Segment的转发路径)
  3. 使用多个Prefix SID + Adj SID实现转发(基于Prefix + Adj Segment的转发路径)

SR-MPLS TE的数据转发(数据转发图在转发路径类型有讲解)

可以基于Prefix SID转发、基于邻接SID转发、基于邻接SID+Prefix SID转发

SR-MPLS TE Policy

传统SR-MPLS TE的不足

  1. 沿用RSVP-TE的“隧道接口“概念,采用隧道接口实现SR,部分场景无法实现ECMP
  2. 隧道接口和流量导入独立实现,造成引流方式复杂,性能不高
  3. 隧道需要预先配置部署

SR Policy介绍

SR Policy是在SR技术基础上发展的一种新的隧道引流技术,抛弃了隧道接口的概念,是当前最主流的实现SR的方式

SR Policy是一段有序的段列表(Segment List),每个段列表是从源到目的地址的端到端路径,并指示网络中的设备遵循此指定路径

SR Policy的分类

SR Policy分为SR-MPLS TE Policy和SRv6 Policy,下文介绍的都是SP-MPLS TE Policy

SR-MPLS TE Policy创建

可以在转发器上静态配置(通过CLI或Netconf)

也可以由控制器动态生成然后传递给转发器(通过PCEP或BGP SR Policy传递)

当存在多个方式产生的相同SR-MPLS TE Policy时,转发器按照如下原则选择SR-MPLS TE Policy

比较Policy的来源:

值越大越优先(通过BGP接收到的默认值为20,静态配置的默认值为30)

比较Policy的<ASN,node-address>:

ASN为AS编号,ASN和Node-address都是值越小越优先(对于静态配置的Policy,ASN为0,Node-address为0.0.0.0)

比较Discriminator:

值越大越优先(对于静态配置的Policy,此值为Preference的值)

SR MPLS TE Policy所包含的三元组

头端:HeadEnd  生成SR-MPLS TE Policy的节点

颜色:Color       SR-MPLS TE Policy携带的扩展团体属性(通过BGP NLRI扩展实现)

尾端:EndPoint  SR-MPLS TE Policy的目的地址

SR-MPLS TE Policy模型

一个SR-MPLS TE  Policy可以包含多个候选路径(Candidant path),候选路径携带优先级,高优先级的为主路径,次高优先级的作为热备份路径

一个候选路径可以包含多个Segment List,List携带权重,不同的List形成负载分担

不同候选路径之间做主备,不同List之间做负载

 

SR-MPLS TE Policy如何控路

将节点SID、邻接SID加入到Segment List中进行选路(具体的转发路径同SR-MPLS TE(基于邻接、邻接+Prefix、Prefix转发)

只是数据进入隧道的方式有所改变(将匹配Color和目的地址的流量引导进相关SR-MPLS TE Policy隧道中)


数据转发路径的类型

基于Perfix Segment的转发路径

基于Prefix Segment的转发路径是由IGP通过最短路径算法计算得出的

如果网络中存在等价路径,则可以实现负载分担(ECMP)

如果网络中不存在等价路径,则可以形成链路备份

所以基于前缀的并不是一条固定路径,头节点无法精准控制报文的整条转发路径

 

 

基于Adjacency Segment的转发路径

给网络中每个邻接(接口)分配一个Adjacency SID

然后在头节点定义一个包含多个Adj SID的Segment list

通过这种方式可以严格指定一条显式路径,可以更好的配置实现SDN

基于Adjacency + Node Segment的转发路径

将Adj SID和Node SID结合起来,通过Adjacency Segment,可以强制整条路径包含某一个邻接。而对于Node Segment,节点可以使用 SPF算法计算最短路径,也可以负载分担。

这种方式的路径并不是严格固定,所以也称作松散路径(Loose Explicit)。


SR-MPLS与LDP共存

SR与LDP互通场景

SR与LDP互通,让Segment Routing和LDP协议在同一网络中共同工作

可以在NE3设备帮助NE4、NE5设备下发Prefix SID,使得全网互通

此时要注意,在NE3设备下发Prefix SID时不要进行次末跳弹出,否则会出现路由黑洞

相关配置

NE1、NE2、NE3配置Segment Routing协议(建立MPLS BE隧道)

NE3、NE4、NE5配置MPLS LDP协议

NE3上配置路由前缀和Prefix SID的映射关系(即SR为LDP设备分配Prefix SID)

Segment Routing

 Mapping-server prefix-sid 4.4.4.4 32 4

 分配的是索引信息,Prefix SID=NE3设备上的SRGB + 此索引信息

NE3上使能本地通告SID标签映射信息的能力

IGP协议下

 Segment-routing mapping-server send

NE3上配置触发建立LDP LSP的策略

Mpls

 Lsp-trigger segment-routing-interworking best-effort host

NE3上配置向倒数第二跳正常分配标签

Mpls

 Label advertise non-null

SR与LDP共存场景

LDP和SR同时存在的时候,默认先走LDP隧道(MPLS VPN的场景,可以使用SR代替LDP)

可以通过配置使流量优先走SR隧道

相关配置

NE1、NE2、NE3、NE4、NE5同时配置Segment Routing协议和MPLS LDP协议(前提配置好隧道迭代功能 route recursive-lookup tunnel)

在设备上配置使得流量优先迭代仅SR隧道

Segment-routing

 Tunnel-prefer segment-routing

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/55549.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyinstaller瘦身指南

目录说明无优化直接打包优化&#xff1a;创建专用虚拟环境原因分析和总结说明 之前写了一个自动化办公的python脚本&#xff0c;按需求打包exe。经过不断优化打包过程&#xff0c;把26.1MB的文件变成了9.5MB的文件。 打包工具pyinstaller。 安装&#xff1a; pip install pyi…

Ubuntu1804里进行KITTI数据集可视化操作

需要做的准备工作 1、需要提前安装kitti2bag(终端输入即可安装) pip install kitti2bag 如果没有pip,按照Ubuntu给的提示先安装pip 2、下载kitti数据集(下载圈出的两部分) kitti数据集的百度网盘链接 kitti数据集链接_FYY2LHH的博客-CSDN博客 文件存放位置如图 上图…

Android Material Design之Chip, ChipGroup(十二)

效果图 资源引入 implementation com.google.android.material:material:1.4.0属性 Chip 属性描述android:id控件idstyle样式属性系统默认4种 1.style/Widget.MaterialComponents.Chip.Entry 2.style/Widget.MaterialComponents.Chip.Choice3.style/Widget.MaterialCompon…

集团资金管理BI分析的三个关键节点

集团资金管理方面的商业智能BI分析怎么做&#xff1f;从财务角度来说&#xff0c;企业的管理是以财务管理为中心&#xff0c;财务管理以资金管理为中心&#xff0c;资金管理以现金流量为中心。围绕资金管理至少需要考虑三个方面的内容&#xff1a;安全、收益和效率。 在商业智…

【JavaEE】JavaScript(WebAPI)

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录前言一、前置知识二、【DOM】【获取元素】【事件】【操作元素】1.【获取/修改元素的内容】2.【获取/修改元素属性】3.【获取/修改 表单元素属性】4.【获取/修改样式属性】【操作节点】1.【新增节点】2.【删除节点】&…

【2-3个月左右录用】物联网、无线通信类、人工智能、传感器、人机交互等领域必投快刊,进展顺利,12月截稿

【期刊简介】3.0-4.0&#xff0c;JCR2/3区&#xff0c;中科院4区 【检索情况】SCI在检&#xff0c;正刊 【征稿领域】安全和隐私雾云辅助物联网网络 【参考周期】2-3个月左右 【截稿日期】2022年12月31日 【期刊简介】2.0-3.0&#xff0c;JCR3区&#xff0c;中科院4区 【检索情…

【白嫖】如何低价续费服务器

背景 现在各大云服务商的学生价服务器都已经关闭了&#xff0c;华为云、阿里云、百度云&#xff0c;以前都有学生价服务器&#xff0c;一年只要99。现在我找半天都没找到入口&#xff0c;而原价的一年得500起步。。。 但是&#xff01;&#xff01;&#xff01;腾讯虽然也取消了…

【系统性学习】Linux Shell易忘重点整理

本文主要基于《实用Linux Shell编程》总结&#xff0c;并加入一些网上查询资料和博主自己的推断。 其中命令相关的&#xff0c;已抽取出来在另一篇系统性学习】Linux Shell常用命令中&#xff0c;可以一起使用。 文章目录一、基础知识二、命令与环境三、变量和数组四、条件流程…

Linux多线程C++版(八) 线程同步方式-----条件变量

目录1.条件变量基本概念2.条件变量创建和销毁3.条件变量等待操作4.条件变量通知(唤醒)操作5.代码了解线程同步6.线程的状态转换7.代码改进--从一对一到一对多1.条件变量基本概念 互斥锁的缺点是它只有两种状态&#xff1a;锁定和非锁定条件变量通过允许线程阻塞和等待另一个线…

Kamiya丨Kamiya艾美捷抗FLAG多克隆说明书

Kamiya艾美捷抗FLAG多克隆化学性质&#xff1a; 程序&#xff1a;用FLAG肽免疫家兔与KLH偶联。多次免疫后在弗氏佐剂中收集血清使用固定在固相上的肽。 规范&#xff1a; 使用氨基末端分析抗体Met FLAG BAP、氨基末端FLAG-BAP和羧基末端FLAG-BAP融合蛋白和Invitrogen Posite…

跳槽,从这一个坑,跳进另外一个坑

软件测试员跳槽有一个奇怪的现象&#xff1a;那些跳槽的测试员们&#xff0c;总是从一个坑&#xff0c;跳进另一个坑中&#xff0c;无论怎么折腾&#xff0c;也没能拿到更好的offer&#xff0c;更别说&#xff0c;薪资实现爆炸式增长&#xff0c;自身价值得到升华~ 在如今经验…

【Web安全】注入攻击

目录 前言 1、注入攻击 1.1 SQL注入 1.2 数据库攻击技巧 1.2.1 常见的攻击技巧 1.2.2 命令执行 1.2.3 攻击存储过程 1.2.4 编码问题 1.2.5 SQL Column Truncation 1.3 正确防御SQL注入 1.4 其他注入攻击 1.4.1 XML注入 1.4.2 代码注入 1.4.3 CRLF注入 前言 年…

Kotlin高仿微信-第53篇-添加好友

Kotlin高仿微信-项目实践58篇详细讲解了各个功能点&#xff0c;包括&#xff1a;注册、登录、主页、单聊(文本、表情、语音、图片、小视频、视频通话、语音通话、红包、转账)、群聊、个人信息、朋友圈、支付服务、扫一扫、搜索好友、添加好友、开通VIP等众多功能。 Kotlin高仿…

数商云SRM系统询比价有何优势?供应商平台助力汽车零部件企业快速查找供应商

随着中国汽车行业的高速发展、汽车保有量的增加以及汽车零部件市场的扩大&#xff0c;我国汽车零部件行业得到了迅速发展&#xff0c;增长速度整体高于我国整车行业。数据显示&#xff0c;我国汽车零部件的销售收入从2016年3.46万亿元增长至2020年的4.57万亿元&#xff0c;年均…

世界杯——手动为梅西标名

梅西的铁粉来集赞啦。 今天带来了一个为图片添加字样的小功能&#xff0c;我们的测试目标图片是&#xff1a; 我们的测试目标是&#xff1a; 我们使用的是Python语言&#xff0c;使用了Image包用作图片处理&#xff0c;matplotlib包用作坐标查阅&#xff0c;这个坐标还是很好看…

微服务框架 SpringCloud微服务架构 8 Gateway 网关 8.5 全局过滤器

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 SpringCloud微服务架构 文章目录微服务框架SpringCloud微服务架构8 Gateway 网关8.5 全局过滤器8.5.1 全局过滤器 GlobalFilter8.5.2 案例8.…

segmentation

(用于医学图像分割的金字塔医学transformer) Pyramid Medical Transformer for Medical Image Segmentation 基于CNN的模型通过低效地堆叠卷积层来捕获长期依赖性&#xff0c;但基于注意力的模型明确地构建了所有范围的关系。然而&#xff0c;为全局关系分配可学习参数是昂贵…

WebAPI项目搭建及其发布测试

目录 1.创建项目 2.配置 3.发布 4.测试页面 1.创建项目 &#xff08;1&#xff09;创建ASP.NET Web应用程式&#xff0c;如下图&#xff1a; &#xff08;2&#xff09;选择Empty,勾选Web API&#xff0c;点击确定创建&#xff0c;如下图&#xff1a; &#xff08;3&#x…

解决Netty那些事儿之Reactor在Netty中的实现(创建篇)-上

本系列Netty源码解析文章基于 4.1.56.Final版本 在上篇文章深入讲解Netty那些事儿之从内核角度看IO模型中我们花了大量的篇幅来从内核角度详细讲述了五种IO模型的演进过程以及ReactorIO线程模型的底层基石IO多路复用技术在内核中的实现原理。 最后我们引出了netty中使用的主从…

代码随想录刷题day52 300.最长递增子序列;674. 最长连续递增序列;718. 最长重复子数组

代码随想录刷题day52 300.最长递增子序列&#xff1b;674. 最长连续递增序列&#xff1b;718. 最长重复子数组 二维dp的初次应用&#xff0c;关于子序列的一系列问题。 300.最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;Leetcode&#xff09; 子序列的一个入门题…