【SPOTO思博网络】【网工入门基础】MPLS《SRv6》 这两年,SRv6可谓是通信界的“超级网红”。不管是技术峰会,还是行业论坛,都少不了它的身影。很多大佬甚至声称:“SRv6是未来网络的灵魂”。
SRv6,简单来理解,其实就是SR+IPv6。
什么是SRv6?
SRv6技术就是采用现有的IPv6转发技术,通过扩展IPv6报文的头域,实现类似标签转发的处理。
SRv6将一些IPv6地址定义成实例化的SID(Segment ID),每个SID有着自己显式的作用和功能,通过不同的SID操作,实现简化的VPN,以及灵活的路径规划。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D5E.tmp.jpg
SRv6 Segment
与SR MPLS的Segment不同,SRv6的Segment有128bits,而且分成了三部分:
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D5F.tmp.jpg
Locator(位置标识)
网络中分配给一个网络节点的标识,可以用于路由和转发数据包。Locator有两个重要的属性,可路由和聚合。在SRv6 SID中Locator是一个可变长的部分,用于适配不同规模的网络。
Function(功能)
设备分配给本地转发指令的一个ID值,该值可用于表达需要设备执行的转发动作,相当于计算机指令的操作码。在SRv6网络编程中,不同的转发行为由不同的功能ID来表达。一定程度上功能ID和MPLS标签类似,用于标识VPN转发实例等。
Args(变量)
转发指令在执行的时候所需要的参数,这些参数可能包含流,服务或任何其他相关的可变信息。
从SRv6 SID的组成来看,SRv6同时具有路由和MPLS两种转发属性,可以融合两种转发技术的优点。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D60.tmp.jpg
SRv6扩展头
为了在IPv6报文中实现SRv6转发,引入了一个SRv6扩展头(Routing Type为4),叫Segment Routing Header(SRH),用于进行Segment的编程组合形成SRv6路径。
下图是SRv6的报文封装格式。绿色的是IPv6报文头,棕色部分是SRH,蓝色是报文负荷。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D61.tmp.jpg
IPv6 Next Header字段取值为43,表示后接的是IPv6路由扩展头。Routing Type = 4,表明这是SRH的路由扩展头,这个扩展头里字段解释如下:
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D62.tmp.jpg
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D63.tmp.jpg
SRv6三层编程空间
SRv6具有比SR-MPLS更强大的网络编程能力。SRv6的网络可编程性体现在SRH扩展头中。SRH中有三层编程空间:
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D64.tmp.jpg
第一部分是Segment序列。如前所述,它可以将多个Segment组合起来,形成SRv6路径。这跟MPLS标签栈比较类似。
第二部分是对SRv6 SID的128比特的运用。众所周知,MPLS标签封装主要是分成四个段,每个段都是固定长度(包括20比特的标签,8比特的TTL,3比特的Traffic Class和1比特的栈底标志)。而SRv6的每个Segment是128比特长,可以灵活分为多段,每段的长度也可以变化,由此具备灵活编程能力。
第三部分是是紧接着Segment序列之后的可选TLV(Type-Length-Value)。报文在网络中传送时,需要在转发面封装一些非规则的信息,它们可以通过SRH中TLV的灵活组合来完成。
SRv6通过三层编程空间,具备了更强大的网络编程能力,可以更好地满足不同的网络路径需求。
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D65.tmp.jpg
SRv6报文转发流程
file:///C:/Users/SPOTO/AppData/Local/Temp/ksohtml/wps5D66.tmp.jpg
上图展示了SRv6转发的一个范例。在这个范例中,结点R1要指定路径(需要通过R2-R3、R4-R5的链路转发)转发到R6,其中R1、R2、R4、R6为有SRv6能力的的设备,R3、R5为不支持SRv6的设备。
步骤一:Ingress结点处理
R1将SRv6路径信息封装在SRH扩展头,指定R2和R4的END.X SID,同时初始化SL = 2,并将SL指示的SID A2::11拷贝到外层IPv6头目的地址。R1根据外层IPv6目的地址查路由表转发到R2。
步骤二:End Point结点处理
R2收到报文以后,根据外层IPv6地址A2::11查找本地Local SID表,命中END.X SID,执行END.X SID的指令动作:SL—,并将SL指示的SID拷贝到外层IPv6头目的地址,同时根据END.X关联的下一跳转发。
步骤三:Transit结点处理
R3根据A4::13查IPv6路由表进行转发,不处理SRH扩展头。具备普通的IPv6转发能力即可。
步骤四:End Point结点处理
R4收到报文以后,根据外层IPv6地址A4::13查找本地Local SID表,命中END.X SID,执行END.X SID的指令动作:SL—,并将SL指示的SID拷贝到外层IPv6头目的地址,由于SL = 0, 弹出SRH扩展头,同时根据END.X关联的下一跳转发。
步骤五
弹出SRH扩展头以后,报文就变成普通的IPv6头,由于A6::1是1个正常的IPv6地址,遵循普通的IPv6转发到R6。
从上面的转发可以看出,对于支持SRv6转发的节点,可以通过SID指示经过特定的链路转发,对于不支持SRv6的节点,可以通过普通的IPv6路由转发穿越。这个特性使得SRv6可以很好地在IPv6网络中实现增量部署。
文章来源:综合CSDN技术平台多篇文章,因觉优质,特此分享,侵删。 进入全国网络工程师交流群 ,请扫描下方二维码↓↓↓
群里有行业大咖、实战分享、技术交流、技术咨询、企业内推等机会
若群满,请添加老杨微信(spotoa),邀你进群
|