广域网技术——SR-MPLS技术基础理论讲解

news2024/11/14 5:46:00

目录

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算法

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

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几种报文https://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/56972.html

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

相关文章

详解设计模式:模版方法模式

模板方法模式&#xff08;Template Method Pattern&#xff09;也被称为模板模式&#xff08;Template Pattern&#xff09;&#xff0c;是在 GoF 23 种设计模式中定义了的行为型模式。 模板方法模式 定义一个操作中的算法骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使…

若依框架RuoYi项目运行启动教程【傻瓜式教程】

启动若依项目 1.官网下载代码 若依官网 若依在线文档 首先去官网下载代码 链接到码云下载&#xff0c;要么用git下载要么压缩包下载。 然后再IDEA打开项目 想要运行就要搭建好环境 2.搭建若依环境 按照文档要求配置环境 JDK > 1.8 (推荐1.8版本) Mysql > 5.7.0 (推…

Stable Diffusion 2.0 来了

Stable Diffusion 一经发布&#xff0c;就立刻在业界掀起巨大的波浪。我个人后知后觉&#xff0c;直到 Stable Diffusion V1.4 版本发布&#xff0c;才接触 Stable Diffusion (之前使用的是 Disco Diffusion)。这段时间&#xff0c;SD 团队也没闲着&#xff0c;很快就发布了 V2…

【华为上机真题 2022】停车场车辆统计

&#x1f388; 作者&#xff1a;Linux猿 &#x1f388; 简介&#xff1a;CSDN博客专家&#x1f3c6;&#xff0c;华为云享专家&#x1f3c6;&#xff0c;Linux、C/C、云计算、物联网、面试、刷题、算法尽管咨询我&#xff0c;关注我&#xff0c;有问题私聊&#xff01; &…

【Python】推荐三个好玩的图像处理库

1. 引言 Python是一门高级语言&#xff0c;它可以实现很多功能。Python强大的原因是什么&#xff1f;某种程度上&#xff0c;在于它所拥有的现成的库&#xff0c;使其在编程的各个方向上都易于使用。在本文中&#xff0c;我将向大家展示一些Python库&#xff0c;这些库非常有用…

node.js的模块化

目录 一、模块化的概念 1.什么是模块化 2.编程领域中的模块化 二、node.js中模块的分类 三、require() 加载模块 四. 模块作用域 五、module对象 六、module.exports对象 七、exports对象 八、CommonJS规定: 九、关于包&#xff08;第三方模块&#xff09; 十、解决…

阿里P8高级专家,耗时多年整理SpringBoot指南文档

前言 相信程序员们已经看过甚至动手操作过很多的springboot项目&#xff0c;在项目操作中需要各种插件的支持&#xff0c;其实&#xff0c;可能还有很多大家不知道的但是很方便的操作&#xff0c;小编今天就给大家把这份PDF分享出来&#xff0c;绝对是你以前没有见到过的。 1、…

springboot读取yml文件中的list列表、数组、map集合和对象

前言 springboot配置文件yml类型简单的风格&#xff0c;十分受大家的欢迎&#xff0c;支持字符string类型&#xff0c;支持列表list类型&#xff0c;支持集合map类型&#xff0c;支持数组array类型&#xff0c;支持类对象类型&#xff0c;下面我们来实战下这些形式的配置如何取…

聚观早报 | 国美电器被申请破产清算;首款太阳能汽车投入生产

今日要闻&#xff1a;网传国美电器被申请破产清算&#xff1b;全球首款太阳能汽车投入生产&#xff1b;苹果头显配套系统已改名为xrOS&#xff1b;马斯克计划植入脑机接口设备&#xff1b;特斯拉即将推出自动驾驶出租车网传国美电器被申请破产清算 12 月 2 日消息&#xff0c;据…

网站都变成灰色,有哪些方法可以快速实现?

有些时候我们需要把网站页面变成黑白色或灰色&#xff0c;特别是对于一些需要悼念的日子&#xff0c;以及一些影响力很大的伟人逝世或纪念日的时候&#xff0c;都会让网站的全部网页变成灰色&#xff08;黑白色&#xff09;&#xff0c;以表示我们对逝者或者英雄的缅怀和悼念。…

在校大学生如何申请软著,手把手教会你(内有免费模板)

目录 一.前言 二.以学校为单位全流程申请&#xff08;以我的学校为例&#xff09; 1.问问导员谁负责管软著申请这块的&#xff0c;联系他&#xff0c;问需要什么。 2.为了防止学生买软著转头申请 3.按以下要求准备材料 4.没问题就发给老师&#xff0c;一般要破费一下 5.…

View基础知识-位置大小和滑动

前言 这篇文章可以作为基础看看&#xff0c;但是有时候基础就是细节&#xff0c;不一定所有人都记得&#xff0c;所以基础也要记录一下。都熟悉的话也可以看看其他系列文章&#xff1a; View事件分发机制&#xff08;源码分析篇&#xff09; Android一步一步追踪View的工作原…

【车辆动力】基于Matlab模拟停车动力学

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;修心和技术同步精进&#xff0c;matlab项目合作可私信。 &#x1f34e;个人主页&#xff1a;Matlab科研工作室 &#x1f34a;个人信条&#xff1a;格物致知。 更多Matlab仿真内容点击&#x1f447; 智能优化算法 …

Python 音频处理以及可视化 Amplitude,MFCC,Mel Spectrogram, librosa 库

利用python库 librosa库对于音频文件进行预处理&#xff0c;以及可视化操作。 1. Load Audio Data 导入音频 将音频文件&#xff08;这里使用苹果录音文件 .m4a 格式&#xff09;导入librosa&#xff0c;音频格式可以为其它&#xff08;甚至视频文件mp4也是可以的&#xff09…

【Docker】Dockerfile:常见保留字、使用案例

Dockerfile是用来构建Docker镜像的文本文件&#xff0c;是由一条条构建镜像所需的指令和参数构成的脚本。 官网&#xff1a;链接 构建三步骤 编写Dockerfile文件构建镜像&#xff1a;docker build用镜像运行容器实例&#xff1a;docker run 一、常用的保留字 二、使用案例 要…

Spring MVC统一异常处理的3种方式(附带实例)

在 Spring MVC 应用的开发中&#xff0c;不管是对底层数据库操作&#xff0c;还是业务层或控制层操作&#xff0c;都会不可避免地遇到各种可预知的、不可预知的异常需要处理。 如果每个过程都单独处理异常&#xff0c;那么系统的代码耦合度高&#xff0c;工作量大且不好统一&a…

html5期末大作业:基于html+css+javascript+jquery+bootstarp响应式图书电商HTML模板网上书店(25页)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

STC 51单片机51——直流电机PWM

//开发板按钮K3和K4用于调速&#xff0c;直流电机接部件电机模块Vcc和O1 #include"reg52.h" #define u8 unsigned char #define u16 unsigned int sbit O1P1^0;//ULN2003 sbit K3P3^2; //减速 sbit K4P3^3; //加速 u8 Flag; u16 T, PWM, Temp;//T为控制周期…

Java项目:ssm赛事打分系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 赛事评分系统&#xff0c;SSM框架。该项目分管理员、裁判、选手三个用户角色。 管理员主要功能&#xff1a; 首页、选手管理、裁判管理、赛事管…

【2022世界杯开源项目实战】使用docker部署world-cup-2022-cli-dashboard数据看板工具

【2022世界杯开源项目实战】使用docker部署world-cup-2022-cli-dashboard数据看板工具一、world-cup-2022-cli-dashboard介绍1.工具介绍2.数据看板的内容二、检查本地docker环境1.检查docker版本2.检查docker状态三、构建world-cup-2022-cli-dashboard的镜像1.下载world-cup-20…