02-SRv6配置
本章节下载: 02-SRv6配置 (766.60 KB)
目 录
1.15.3 配置BGP-EPE SRv6 Peer Set组
1.16 配置SRv6 Local SID的流量转发统计功能
1.21.5 显示和清除SRv6 Local SID的流量转发统计信息
SR(Segment Routing,段路由)采用源节点路径选择机制,预先在源节点封装好路径所要经过段的SID(Segment Identifier,段标识),当报文经过SR节点时,该节点根据报文的SID对报文进行转发。除源节点外,其它节点无需维护路径状态。SRv6是指在IPv6网络中使用SR、将IPv6地址作为SID对报文进行转发。
按照功能的不同,SRv6网络中的节点分为三种角色:
· 源节点:负责在IPv6报文的IPv6头中插入SRH扩展头,或者在报文外加上IPv6头并插入SRH扩展头。该节点将报文流引入SRH中Segment List定义的SRv6路径。
¡ 如果Segment List中只包含一个SID,并且不需要在SRH中携带信息或TLV,则只需要将IPv6头的目的地址设置为这个SID,不需要插入SRH。
¡ 如果Segment List中包含多个SID,则需要插入SRH。
源节点可以是产生SRv6报文的主机,也可以是SRv6域的边缘设备。
· 中转节点:在报文的SRv6路径上,不参与SRv6处理,只执行普通的IPv6报文转发。中转节点可以是支持SRv6的节点,也可以是不支持SRv6的节点。
· Endpoint节点:对接收到的SRv6报文进行SRv6相关处理。接收到的SRv6报文的IPv6目的地址必须是Endpoint节点上配置的SRv6 SID,该节点需要按SRv6 SID的指令进行处理,并更新SRH。
同一个节点在某个SRv6路径里可能是源节点,在其他SRv6路径里可能就是中转节点或者Endpoint节点。
在SRv6中,定义某种网络功能、代表网络指令的SID。这种SID采用IPv6地址形式,但不与任何设备上的接口地址对应。该SID被称为SRv6 SID。
如图1所示,SRv6 SID由Locator、Function、Arguments和MBZ四部分组成:
· Locator:标识SID所属的网段。SRv6节点通过IGP等路由协议将Locator标识的IPv6网段发布到网络中,帮助其他设备将报文转发到该SRv6节点,因此Locator通常用于SRv6节点的路由和寻址。Locator在SR域内唯一。
· Function:标识与SID绑定的本地操作指令。当某个SRv6节点接收到SRv6报文,同时该SRv6节点发现报文的IPv6目的地址与本地Local SID表中某个SRv6 SID值相同,则该SRv6节点分析SRv6 SID的Function字段,再找到Function对应的设备本地操作指令并执行相关操作。例如,SRv6节点上配置了opcode 101 end-x interface A表示SRv6 SID的Function部分的操作码取值为101,对应的是设备本地操作指令End.X,如果SRv6报文目的地址和本地这个SRv6 SID值相同,则执行End.X指令对应的转发行为,即从End.X标识的链路接口A转发报文。
· Arguments:定义报文的流和服务等信息,在SRv6 SID中为可选字段。
· MBZ(Must be zero):当Locator、Function和Arguments的位数之和小于128bits时,其他位使用0补齐。
根据不同配置方式,SRv6 SID各个字段的关系分为以下几种:
· 普通SRv6 SID
图2 普通SRv6 SID示意图
普通SRv6 SID分为静态SRv6 SID和动态SRv6 SID,其格式分别为:
¡ 静态SRv6 SID=ipv6-prefix+0+opcode+0。其中ipv6-prefix为locator命令中由ipv6-address和prefix-length指定的IPv6地址前缀,所占位数为prefix-length;0所占位数位为128减去prefix-length、static-length再减去args-length;opcode为Function字段中的静态段,所占位数为static-length;0所占位数为args-length。
¡ 动态SRv6 SID=ipv6-prefix+dynamic+static+0。其中ipv6-prefix为locator命令中由ipv6-address和prefix-length指定的IPv6地址前缀,所占位数为prefix-length;dynamic为Function字段中的动态段,取值不能为全0,所占位数位为128减去prefix-length、static-length再减去args-length;static为Function字段中的静态段,所占位数为static-length,可以取任意值;0所占位数为args-length。
例如,配置locator test1 ipv6-prefix 100:200:DB8:ABCD:: 64 static 24 args 32时,表示:
¡ Locator为100:200:DB8:ABCD::,长度为64
¡ 静态段占用24位
¡ Args占用32位
¡ 动态段占用8位
由此可以计算出静态SRv6 SID范围和动态SRv6 SID范围:
¡ 静态SRv6 SID起始值=100:200:DB8:ABCD:0:1::
¡ 静态SRv6 SID结束值=100:200:DB8:ABCD:FF:FFFF::
¡ 动态SRv6 SID起始值=100:200:DB8:ABCD:100::
¡ 动态SRv6 SID结束值=100:200:DB8:ABCD:FFFF:FFFF::
· 压缩的SRv6 SID
图3 压缩的SRv6 SID示意图
压缩的SRv6 SID可以在静态段内手工指定,也可以通过IGP协议在动态段内自动分配。例如,配置locator test1 ipv6-prefix 100:200:DB8:ABCD:: 64 common-prefix 48 coc32 static 8 args 16时,表示:
¡ Locator为100:200:DB8:ABCD::,长度为64
¡ 公共前缀长度为48
¡ 静态段占用8位
¡ Args占用16位
¡ 动态段占用8位
由此可以计算出静态SRv6 SID范围和动态SRv6 SID范围:
¡ 静态SRv6 SID起始值=100:200:DB8:ABCD:1::
¡ 静态SRv6 SID结束值=100:200:DB8:ABCD:FF::
¡ 动态SRv6 SID起始值=100:200:DB8:ABCD:100::
¡ 动态SRv6 SID结束值=100:200:DB8:ABCD:FFFF::
· 压缩与非压缩共存的SRv6 SID
图4 压缩与非压缩共存的SRv6 SID示意图
压缩与非压缩共存的SRv6 SID分为:
¡ 压缩段静态SRv6 SID
¡ 压缩段动态SRv6 SID
¡ 非压缩段静态SRv6 SID
¡ 非压缩段动态SRv6 SID
例如,配置locator test1 ipv6-prefix 100:200:DB8:ABCD:: 64 common-prefix 48 coc-both non-compress-static 16 static 8 args 16时,表示:
¡ Locator为100:200:DB8:ABCD::,长度为64
¡ 公共前缀长度为48
¡ 静态压缩段占用8位
¡ 动态压缩段占用8位:动态压缩段长度=32 – (prefix-length – common-prefix-length )– compress-static-length
¡ 静态非压缩段占用16位
¡ 动态非压缩段占用16位:动态压缩段长度=128 – common-prefix-length – args-length – 32 – non-compress-static-length
¡ Args占用16位
通过以上信息计算压缩段静态SRv6 SID范围和动态SRv6 SID范围为:
¡ 静态压缩SRv6 SID起始值=100:200:DB8:ABCD:1::
¡ 静态压缩SRv6 SID结束值=100:200:DB8:ABCD:FF::
¡ 动态压缩SRv6 SID起始值=100:200:DB8:ABCD:100::
¡ 动态压缩SRv6 SID结束值=100:200:DB8:ABCD:FFFF::
通过以上信息计算非压缩段静态SRv6 SID范围和动态SRv6 SID范围为:
¡ 非压缩静态SRv6 SID起始值=100:200:DB8:ABCD::1:0
¡ 非压缩静态SRv6 SID结束值=100:200:DB8:ABCD::FFFF:0
¡ 非压缩动态SRv6 SID起始值=100:200:DB8:ABCD:0:1::
¡ 非压缩动态SRv6 SID结束值=100:200:DB8:ABCD:0:FFFF:FFFF:0
SRv6 SID的Function字段所标识的本地操作指令本质上是一种指导报文转发和处理的节点行为,这种本地操作指令称为SRv6 Endpoint Behavior节点行为。RFC 8986中为大部分不同类型的节点行为定义了指令码的取值。从网络配置的角度看,不同的节点转发行为也可以理解为不同类型的SRv6 SID,SRv6 SID的类型包括但不限于:
· End SID:用于标识网络中的某个目的地址前缀。
· End.X SID:用于标识网络中的某条链路。
· End.DT4 SID:类似于MPLS L3VPN网络中的私网标签,用于标识特定的IPv4 VPN实例。End.DT4 SID的转发行为是解封装报文,并且查找该SID标识的IPv4 VPN实例,根据VPN实例路由表转发报文。End.DT4 SID用于IPv4私网用户接入场景。
· End.DT6 SID:类似于MPLS L3VPN网络中的私网标签,用于标识特定的IPv6 VPN实例。End.DT6 SID的转发行为是解封装报文,并且查找该SID标识的IPv6 VPN实例,根据VPN实例路由表转发报文。End.DT6 SID用于IPv6私网用户接入场景。
· End.DT46 SID:类似于MPLS L3VPN网络中的私网标签,用于标识特定的IPv4 VPN实例或IPv6 VPN实例。End.DT46 SID用于IPv4和IPv6私网用户同时接入场景。
· End.DX2 SID:End.DX2 SID表示EVPN VPWS over SRv6场景的二层交叉连接,用于标识一个端点。End.DX2 SID对应的转发动作是解封装SRv6报文,再将剩余二层报文转发到SID对应的出接口。
· End.DX2L SID:End.DX2L SID用来标识报文来自Bypass SRv6 PW,携带该SID的报文不会再转发到该Bypass SRv6 PW,从而避免产生环路。End.DX2L SID对应的转发动作是去掉IPv6报文头及其扩展头,然后将剩余报文转发到SID对应的出接口。End.DX2L SID主要用于EVPN VPWS over SRv6多归属站点组网。
· End.DT2M SID:End.DT2M SID表示EVPN VPLS over SRv6场景中BUM流量的二层交叉连接且进行广播泛洪的SID,用于标识一个端点。End.DT2M SID对应的转发动作是解封装SRv6报文,再将剩余二层报文在VSI内广播泛洪。
· End.DT2U SID:End.DT2U SID表示二层交叉连接且进行单播MAC表查找功能的SID,用于标识一个端点。End.DT2U SID对应的转发动作是去掉IPv6报文头及其扩展头,然后使用剩余报文的目的MAC地址查找MAC表,根据MAC表项将报文转发到对应的出接口。End.DT2U SID可以用于EVPN VPLS单播场景。
· End.DT2UL SID:End.DT2UL SID用来标识报文来自Bypass SRv6 PW,携带该SID的报文不会再转发到该Bypass SRv6 PW,从而避免产生环路。End.DT2UL SID对应的转发动作是去掉IPv6报文头及其扩展头,然后使用剩余报文的目的MAC地址查找MAC表,根据MAC表项将报文转发到对应的出接口。End.DT2UL SID主要用于EVPN VPLS over SRv6多归属站点组网。
· End.M SID:用于SRv6 TE Policy尾节点保护场景。有关End.M SID的详细介绍,请参见“Segment Routing配置指导”中的“SRv6 TE Policy”。
· End.OP SID:用于SRv6 OAM场景。有关End.OP SID的详细介绍,请参见“Segment Routing”中的“SRv6 OAM”。
· End.AS SID:用于SRv6 SFC服务链静态代理场景。有关End.AS SID的详细介绍,请参见“Segment Routing配置指导”中的“SRv6 SFC”。
· End.AM SID:用于SRv6 SFC服务链伪代理场景。有关End.AM SID的详细介绍,请参见“Segment Routing配置指导”中的“SRv6 SFC”。
· End.B6.Encaps:用于在SRv6源节点引流到SRv6 TE Policy或者使用BSID缝接SRv6 TE Policy的场景,执行的节点行为是为接收到的报文封装新的IPv6头和SRH头。
· End.B6.Encaps.Red:用于在SRv6源节点引流到SRv6 TE Policy或者使用BSID缝接SRv6 TE Policy的场景,执行的节点行为是为接收到的报文封装IPv6头和SRH时,SRv6 TE Policy的SID列表中的第一个SID不封装在SRH中,其他SID封装到SRH中,以便减少SRH的长度。
· End.B6.Insert:用于在SRv6源节点引流到SRv6 TE Policy或者使用BSID缝接SRv6 TE Policy的场景,执行的节点行为是在接收到的IPv6报文中插入SRH头。
· End.B6.Insert.Red:用于在SRv6源节点引流到SRv6 TE Policy或者使用BSID缝接SRv6 TE Policy的场景,执行的节点行为是在接收到的IPv6报文中插入SRH,且SRv6 TE Policy的SID列表中的第一个SID不封装在SRH中,其他SID封装到SRH中,以便减少SRH的长度。
通过IGP协议通告SR节点的SRv6 SID后,其他SR节点可以根据收到的路由协议报文生成到达该SRv6 SID的路由转发表项。
SID附加行为(Flavors)可以改变SRv6 SID的转发行为,以便适配多种业务需求。目前,支持的SRv6 SID附加行为包括:
· NO-FLAVOR:SRv6 SID不携带Flavors,即无附加行为。
· PSP(penultimate Segment POP of the SRH):倒数第二个SRv6节点执行SRH移除操作。为了减轻SRv6网络尾节点的负担,提高转发效率,可以在倒数第二个SRv6节点将SRH移除,尾节点不需要查看SRH信息,只需根据目的IPv6地址查找Local SID表进行处理。
· NO PSP:倒数第二个SRv6节点不执行SRH移除操作。在SRv6 OAM场景中,需要获取SRH中的SID来判断链路的连通性,不在倒数第二个SRv6节点将SRH移除,以避免误检测。
· USP(Ultimate Segment POP of the SRH):最后一个Endpoint节点执行SRH移除操作。SRv6 VPN网络中,PE节点根据SID查找到对应的转发动作后,执行SRH移除操作,将报文转发给CE设备。
· USD(Ultimate Segment Decapsulation):最后一个Endpoint节点执行外层IPv6头移除操作。TI-LFA场景中,Repair List的最后一个Endpoint节点需要将外层IPv6头移除,将内层报文转发到目的节点。
· COC(Continue of Compression):标识本SID之后是G-SID,用于SID压缩场景,以减少SRH大小。
通过IGP或BGP协议发布SRv6 SID时,支持发布具有以下附加行为的SRv6 SID:
· NO-FLAVOR
· PSP
· PSP&USP&USD
· COC
运行SRv6的节点维护一个Local SID表,记录本节点生成的SRv6 SID信息。Local SID表主要用于:
· 保存本地生成的SRv6 SID转发信息。
· 存储对SRv6 SID的操作方式。
Segment List是包含报文转发路径信息的SID列表。
SRv6通过在源节点对IPv6数据报文进行封装,使封装后的报文在开启SRv6功能的网络中进行传输。封装后的数据报文在网络中传输的路径,称为SRv6隧道。SRv6隧道是从源节点到尾节点的一个虚拟的点对点连接,其两端的设备分别对数据报文进行封装及解封装。
SRv6的报文封装格式为:在原始三层数据报文前面添加新的IPv6基本头和SRH(Segment Routing Header,SRv6报文头)。SRH是路由类型取值为4的一种路由扩展头。如图5所示,IPv6基本头中Next Header取值为43,表明下一个报文头为路由扩展头。路由扩展头的路由类型字段取值为4,表明该路由扩展头为SRH。SRH主要包含以下几个部分:
· Next Header:8bits,用来标识下一个报文头的类型。
· Hdr Ext Len:8bits,表示以8个字节为单位的SRH头的长度,不包括前8个字节。
· Routing Type:8bits,路由类型字段,取值为4,表示携带的是SRH。
· Segments Left:8bits,标识需要查看的下一个SID的编号,初始取值为n-1(n表示路由扩展头中SID的数目),每经过一个节点减1。
· Last Entry:8bits,SRH头中报文实际转发路径的第一个SID的编号。
· Flags:8bits,标志位信息。
· Tag:16bits,用来标记具有相同特性的一组报文。
· Segment List:SID列表。按照报文转发路径上节点从远到近的顺序进行排列,即Segment List [0]表示路径的最后一个SID,Segment List [1]表示路径的倒数第二个SID,以此类推。
图5 SRv6的报文封装示意图
如(6)图6所示,SRv6隧道报文转发过程如下:
源节点Device A收到IPv6报文后,需要通过SRv6路径转发该报文。SRv6路径中Device A为源节点,Device C和Device E为Endpoint节点,Device B和Device D为中转节点。报文通过SRv6路径转发的过程为:
(1) 源节点Device A收到IPv6报文后,执行如下操作对报文进行封装:
¡ 封装SRH头。由于从Ingress到Egress的跳数为3,因此,SRH中SL为跳数-1,即SL=2。封装的SID列表信息为Segment List [0]=D、Segment List [1]=C、Segment List [2]=B,即按照节点由远及近的顺序进行排列。
¡ 封装IPv6头。IPv6头中的源地址为隧道的源端地址,目的地址为SL指示的地址,即SL为2时表示SRH中Segment List [2]对应的地址(本例中为Device B的地址)。
(2) Device A根据封装的IPv6头中的目的地址查找路由表,将封装后的报文转发给Device B。
(3) Device B收到报文后,首先检查IPv6头中目的地址的SID类型:
¡ 对于End.X SID,根据End.X SID获取出接口和下一跳信息。
¡ 对于其他类型SID,无任何操作。
然后检查SRH头中的SL值,并将SL值减1,同时查找Segment List [1]对应的地址,即Device C的地址,并使用Device C的地址替换IPv6头中的目的地址。
(4) 对于End.X SID,Device B根据获取的出接口和下一跳信息,直接将封装后的报文转发给Device C。对于其他类型SID,Device B根据封装的IPv6头中的目的地址查找路由表,将封装后的报文转发给Device C。
(5) Device C收到报文后,执行(4)、(5)步的操作,将报文发给Device D。
(6) 尾节点Device D收到报文后,检查SRH头中的SL值,发现SL=0。对报文进行解封装,删除封装报文头,根据原始报文的目的地址进行报文转发。
图6 SRv6隧道报文转发示意图
在SRv6 TE Policy组网场景中,管理员需要将报文转发路径上的SRv6节点的128-bit SRv6 SID添加到SRv6 TE Policy的SID列表中。因此,路径越长,SRv6 TE Policy的SID列表中SRv6 SID数目越多,SRv6报文头开销也越大,导致设备转发效率低、芯片处理速度慢。在跨越多个AS域的场景中,端到端的SRv6 SID数目可能更多,报文开销问题更加严峻。
Generalized SRv6(G-SRv6)通过对128-bit SRv6 SID进行压缩,在SRH的Segment List中封装更短的SRv6 SID(G-SID),来减少SRv6报文头的开销,从而提高SRv6报文的转发效率。同时,G-SRv6支持将128-bit SRv6 SID和G-SID混合编排到Segment List中。
部署SRv6时,通常会规划出一个地址块,专门用于SID的分配,这个地址块称为SID Space。在一个SRv6域中,SID均从SID Space中分配,具有相同的前缀(即公共前缀Common Prefix)。因此,SRH中SID的公共前缀是冗余信息。
G-SRv6将Segment List中SRv6 SID的Common Prefix移除,仅携带SRv6 SID中的可变部分,即压缩SID(G-SID),可以有效减少SRv6报文头开销。报文转发过程中,在根据SRH头中的Segment List替换报文的目的地址时,将G-SID与Common Prefix拼接形成新的目的地址,继续查表转发。
G-SRv6对SRv6 SID进行压缩时,既要保证高效压缩,又要兼顾网络规模等需求。综合考虑,32比特是当前较为理想的压缩后SID长度。
如图7所示,SRv6 SID的Locator部分可以细分为Common Prefix和Node ID,其中Common Prefix表示公共前缀地址;Node ID表示节点标识。具有相同Common Prefix的SRv6 SID可以进行压缩,形成32-bit G-SID。32-bit G-SID由128-bit SRv6 SID中的Node ID和Function组成。128-bit SRv6 SID和32-bit G-SID的转换关系为:128-bit SRv6 SID = Common Prefix + 32-bit G-SID + 0 (Args&MBZ)。
如图8所示,G-SRv6可以将G-SID和128-bit SRv6 SID混合编排在SRH的Segment List中。为准确定位G-SID,需要在原本封装128-bit SRv6 SID的位置封装4个32-bit G-SID。如果封装的G-SID不足4个,即不足128比特,则需要用0补齐,对齐128比特。128比特中封装的G-SID称为一组G-SID。多个连续的G-SID组成一段压缩路径,称为G-SID List。G-SID List中可以包含一组或多组G-SID。
图8 G-SRv6报文格式示意图
如果下一个节点的SRv6 SID需要进行压缩,则路由协议在发布本节点的SRv6 SID时,会为该SRv6 SID添加COC标记,标识本SRv6 SID之后是G-SID。报文中不会携带COC标记,COC是SRv6 SID本身的转发行为,为了方便理解,在报文结构中标识出SRv6 SID是否具有COC标记。
G-SID在Segment List中的排列规则为:
(1) G-SID List的前一个SRv6 SID为携带COC标记的128-bit SRv6 SID,标识下一个SID为32-bit G-SID。
(2) 除G-SID List中的最后一个G-SID外,其余G-SID必须携带COC标记,标识下一个SID为32-bit G-SID。
(3) G-SID List的最后一个G-SID必须是未携带COC标记的32-bit G-SID,标识下一个SID为128-bit SRv6 SID。
(4) G-SID List结束的下一个SRv6 SID为128-bit SRv6 SID,其可以是未携带COC标记的SRv6 SID,也可以是携带COC标记的SRv6 SID。
如图9所示,使用G-SID计算目的地址的方法为将Segment List中的G-SID与Common Prefix拼接形成新的目的地址。其中:
· Common Prefix:公共前缀,由管理员手工配置。
· G-SID:按照32比特进行压缩的SID,从SRH中获取。
· SI(SID Index):用于在一组G-SID中定位G-SID。SI为目的地址的最低两位,取值为0~3。每经过一个对SID进行压缩的节点,SI值减1。如果SI值为0,则将SL值减1。在Segment List的一组G-SID中,G-SID按照SI从小到大的顺序从左到右依次排列,即最左侧的G-SID的SI为0,最右侧的G-SID的SI为3。
· 0:若Common Prefix、G-SID和SI的位数之和不足128比特,则中间位使用0补齐。
图9 G-SID组成示意图
如果SRv6节点上管理员部署的Common Prefix为A:0:0:0::/64、SRv6报文中的当前的G-SID为1:1,该G-SID对应的SI为3,则组合成的目的地址为A:0:0:0:1:1::3。
SRv6节点收到G-SRv6报文后,不同情况下,报文目的地址计算方法为:
· 如果当前报文的目的地址在Segment List中为携带COC标记的128-bit SRv6 SID,则表示下一个SID为G-SID,将SL-1,根据[SL-1]值定位所处的G-SID组,并按照上述方法根据[SI=3]对应的32-bit G-SID计算目的地址。
· 如果当前报文的目的地址在Segment List中为携带COC标记的32-bit G-SID,则表示下一个SID为G-SID:
¡ 如果SI>0,则将SI-1,根据报文当前的SL值定位所处的G-SID组,并按照上述方法根据[SI-1]对应的32-bit G-SID计算目的地址。
¡ 如果SI=0,则将SL-1、将SI值重置,即将SI设置为3,根据报文当前的SL值定位所处的G-SID组,并按照上述方法根据[SI=3]对应的32-bit G-SID计算目的地址。
· 如果当前报文的目的址在Segment List中是未携带COC标记的32-bit G-SID,则将SL-1,同时查找[SL-1]对应的128-bit SRv6 SID,并使用该SRv6 SID替换IPv6头中的目的地址。
· 如果当前报文的目的址在Segment List中是未携带COC标记的128-bit SRv6 SID,则将SL-1,同时查找[SL-1]对应的128-bit SRv6 SID,并使用该SRv6 SID替换IPv6头中的目的地址。
通过扩展的IGP协议通告SRv6 SID仅能实现在自治系统域内的SID编排,并基于SID列表规划出合理的转发路径。但是,在跨越多个AS的大规模网络中,仅基于IGP for SRv6不能编排跨域SID组成的转发路径。此时,需要通过扩展BGP协议支持SRv6来实现自治系统域间的SID分配和发布。
BGP-EPE(BGP Egress Peer Engineering,BGP出口对等体工程)就是一种BGP for SRv6的扩展,它用来为BGP对等体和对等体的域间路径分配BGP Peer SID。Peer SID通过扩展的BGP LS收集并传递给SDN控制器。SDN控制器通过对IGP SID和BGP Peer SID进行合理编排,生成跨域的报文转发路径。通常情况下,在多个自治系统组成的跨域网络中,每个自治系统内都需要至少一台转发设备与SDN控制器建立BGP-LS连接,但无需所有转发器均与SDN控制器建立BGP-LS连接。与SDN控制器建立了BGP-LS连接的转发设备收集自治系统内部的所有IGP SID和BGP Peer SID,并通过BGP-LS将SID传递给SDN控制器,从而完成全网信息的收集。
BGP-EPE为BGP对等体和对等体的域间路径分配SID时支持自动分配和手工指定两种方式。如图10所示,BGP-EPE能够针对对等体分配以下SID:
· PeerNode SID:用于标识节点的一个BGP-EPE对等体。BGP-EPE会为每个BGP对等体分配PeerNode SID。如果基于Loopback接口建立EBGP邻居,则BGP-EPE对等体之间可能存在多条物理链路,对于该邻居的PeerNode SID会存在多个出接口。基于PeerNode SID转发时,会在多个出接口间负载分担。
· PeerAdj SID:用于标识到达BGP-EPE对等体的一个邻接链路。如果基于Loopback接口建立EBGP邻居,则可能存在多条物理链路,BGP-EPE会为每条链路分配一个PeerAdj SID。基于PeerAdj SID转发时,只能通过指定出接口进行转发。
· PeerNode-Adj SID:既可用于标识一个对等体节点,也可以标识到达对等体的一条或多条邻接链路。
· PeerSet SID:用于标识一组对等体。BGP支持将一组对等体规划为一个Set,基于该组分配SID,这个SID称为PeerSet SID。基于PeerSet SID转发时,会在多个邻居间负载分担。一个PeerSet SID对应多个PeerNode SID和PeerAdj SID。
如图10所示,BGP-EPE的标签分配方式为:
· ASBR 1和ASBR 3间存在两条直连物理链路,二者通过LoopBack接口建立EBGP邻居,BGP-EPE针对对等体分配了PeerNode SID 100:AB::1,为物理链路分配了PeerAdj SID 100:AB:1::2和100:AB:1::3。当通过PeerNode SID转发流量时,会在两条链路间负载分担。
· ASBR 1和ASBR 5,ARBR 2和ASBR 4,以及ASBR 2和ASBR 5使用直连物理接口建立EBGP邻居,BGP-EPE为对等体只分配了PeerNode SID 100:AB::2,100:AB::4和100:AB::5。
· ASBR 4、ASBR 5均和ASBR 2建立EBGP邻居关系,BGP-EPE将对等体ASBR 4和ASBR 5加入同一Set组,为其分配PeerSet SID 100:AB::3。当通过PeerSet SID转发流量时,会在多个邻居间负载分担。
通过BGP-EPE功能为邻居分配的SID仅具有本地意义,不会向其他设备通告,因此不受BGP对等体间交换路由信息类型的影响。
TI-LFA FRR(Topology-Independent Loop-free Alternate Fast Reroute,拓扑无关无环备份快速重路由)能为Segment Routing隧道提供链路及节点的保护。当某处链路或节点故障时,流量会快速切换到备份路径继续转发,从而最大程度上避免流量的丢失。
为了最大程度减少路由重新收敛过程中的流量丢包,网络管理员选取被保护链路的直连节点或被保护节点的直连设备开启FRR(Fast Reroute,快速重路由)功能,这个开启了FRR功能的设备节点称为PLR(Point of Local Repair,本地修复节点)。PLR节点在计算到达目的路由的最短路径的同时,将自动计算一条FRR备份路径写入FIB转发表中,当保护的链路或节点故障时,通过PLR节点的FRR备份路径转发流量,而无需等待网络拓扑中路由重新收敛,因此可以最大程度避免流量丢包。按出现时间先后顺序,FRR的算法机制有以下几种:
· LFA FRR(Loop-Free Alternate Fast Reroute,无环备份快速重路由)。LFA FRR计算备份路径的关键是找到一个PLR的邻居保护节点(LFA节点),使得流量从PLR转发到该LFA节点之后可以不经过被保护链路或被保护节点,就可以到达目的节点。在某些场景中,特别是一些环形组网拓扑中,使用LFA FRR无法计算出备份保护路径,因此LFA FRR技术无法实现拓扑无关。根据RFC 6571的统计,LFA FRR可以实现备份保护的拓扑场景覆盖率为80%~90%。
· RLFA FRR(Remote Loop-Free Alternate Fast Reroute,远端无环路备份快速重路由)。为了提升LFA FRR算法的场景覆盖率,RFC7490定义了RLFA FRR算法,它的关键也是找到一个保护节点,即RLFA节点,流量从PLR转发到该RLFA节点之后可以不经过保护链路或保护节点到达目的节点。相对于LFA FRR算法,RLFA FRR算法找到的保护节点并未限定是PLR的邻居,提供了更多保护可能性,因此将备份保护的拓扑场景覆盖率提升到了95%~99%。
· 适用于SRv6组网和SR-MPLS组网的TI-LFA FRR(Topology-Independent Loop-Free Alternate Fast Reroute,拓扑无关无环备份快速重路由)。相对于传统LFA FRR技术和RLFA FRR技术,TI-LFA FRR的意义在于它实现了“拓扑无关”,即FRR备份路径计算不再受限于网络拓扑,只要存在可供绕行的转发路径,PLR节点就可以100%自动计算出TI-LFA FRR备份路径。
如图11所示,数据报文需要从节点A发往节点F。当节点B和节点E之间发生故障后,节点B将数据报文转发给节点C。由于节点C和节点D之间开销是100,且节点C上路由还未收敛,因此节点C认为到达节点F的最优路径的下一跳是节点B。节点C将数据报文重新转回到节点B,形成环路。
图11 TI-LFA应用场景示意图
在SRv6网络中部署TI-LFA,可以解决上述问题。如图12所示,当节点B和节点E之间发生故障后,节点B启用TI-LFA计算的备份路径,为报文指定显式路径B->C->D->E,保证报文可以沿着备份路径转发。
图12 TI-LFA转发示意图
TI-LFA FRR继承了RFC7490中RLFA FRR算法定义的一些关键概念:
· P空间:是指对于被保护链路/被保护节点,在故障拓扑收敛前,从PLR不经过该被保护链路/被保护节点(包括等价路径)的前提下可达的节点集合。P空间内的节点被称为P节点。P节点的计算一般是以PLR为根节点建立SPF树,在SPF树上查找满足无环校验公式的节点。
· 扩展P空间:是指对于被保护链路/被保护节点,在故障拓扑收敛前,从PLR的邻居节点(被保护节点除外)不经过该被保护链路/被保护节点(包括等价路径)的前提下可达的节点集合。扩展P空间包含了P空间,扩展P空间的节点也被称为P节点。扩展P空间内的节点定义为P节点,PLR的邻居节点定义为N节点。下图中扩展P空间节点包括Src、B、C和D。P节点满足如下无环路条件:Distance(N,P)<Distance(N,PLR)+Distance(PLR,P)。
· Q空间:是指对于被保护链路/被保护节点,在故障拓扑收敛前,从目的节点不经过该被保护链路/被保护节点(包括等价路径)的前提下可达的节点集合。Q空间内的节点被称为Q节点。
图13 TI-LFA FRR相关概念示意图
如(5)图14所示,PE 1为源节点,P 1节点为故障节点,PE 2为目的节点,链路中间的数字表示cost值。假设流量路径为:PE 1->P 1->PE 2,为避免P 1节点故障导致流量丢失,TI-LFA会计算出扩展P空间、Q空间、P 1故障收敛后的SPF树、Repair List和备份出接口,最终生成备份转发表项。
TI-LFA计算备份路径步骤如下:
(1) 计算扩展P空间:至少存在一个邻居节点到P节点的路径不经过故障链路的集合,即P 2。
(2) 计算Q空间:Q节点到目的节点不经过故障链路的集合,即PE 2和P 4。
(3) 计算收敛后的SPF树:计算P 1故障收敛后的SPF树,即P 1故障后的最优转发路径。SPF树为PE 1->P 2->P 4->PE 2。
(4) 计算Repair List:Repair List是一个约束路径,当P空间和Q空间没有交集时,用来指示如何到达Q节点,Repair List由“P节点的SRv6 SID+P节点到最近的Q节点路径上的SRv6 SID”组成。当P节点和源节点直连时,则Repair List中不需要添加P节点的SRv6 SID。如(5)图14所示,Repair List为P 2和P 3间链路的End.X SID C、P 3和P 4间链路的End.X SID D。
(5) 计算备份出接口:PE 1到P 1链路故障后的下一跳出接口。
图14 TI-LFA典型组网图
TI-LFA备份路径计算完成之后,如果主路径发生故障,就可以根据备份路径进行转发,避免流量丢失。
如(4)图15所示,P 2为P节点,P 4和PE 2为Q节点。主下一跳P 1故障时,触发FRR切换到备路径,详细过程如下:
(1) PE 1根据报文的目的IPv6地址查找IPv6路由表进行转发,下一跳为P 2,同时包含Repair List信息。PE 1根据Repair List构造报文并转发给P 2:
¡ 封装SRH头。封装的SID列表信息为Segment List [0]=D、Segment List [1]=C,即按照节点由远及近的顺序进行排列。
¡ 封装IPv6头。IPv6头中的源地址为源节点PE 1地址A,目的地址为SL指示的地址,即SL为1时表示SRH中Segment List [1]对应的地址C。
(2) P 2收到报文后,检查SRH头中的SL值,并将SL值减1,同时查找Segment List [0]对应的地址,即P 3和P 4间链路的End.X SID D,并使用该End.X SID D替换IPv6头中的目的地址。P 2根据End.X SID C获取出接口和下一跳信息,将封装后的报文转发给P 3。
(3) P 3收到报文后,检查SRH头中的SL值,发现SL=0,对报文进行解封装,并根据End.X SID D获取出接口和下一跳信息,将解封装后的报文转发给P 4。
(4) P 4收到报文后,根据报文的目的IP地址查找IP路由表进行转发,将报文转发给目的节点PE 2。
图15 TI-LFA FRR备份路径转发流程图
如图16所示,当Device B故障时,到Device C的流量将切换到TI-LFA计算的备份路径转发。Device A收敛后,到Device C的流量将沿着收敛后路径转发。此时,如果Device D和Device F还没有收敛,仍按照收敛前的路径转发流量,则Device A到Device F之间形成环路。
通过SR防微环功能可以解决上述问题。在Device A上开启该功能后,可以使Device A延迟一段时间收敛,在此期间使用SR防微环功能计算的路径转发流量。等待Device D和Device F收敛完成后,Device A再开始收敛。Device A收敛完成后,到Device C的流量沿将着收敛后路径转发,从而避免发生环路。
如图17所示,Device B和Device C之间的链路故障恢复前,数据流量沿着备份路径转发。当Device B和Device C之间的链路故障恢复后,如果Device A先于Device B收敛,则Device A会将流量转发给Device B,但是Device B没有收敛,仍旧沿着备份路径转发,这样Device A和Device B之间就会形成环路。
通过SR防微环功能可以解决上述问题。Device A在故障回切以后,会自动计算一条最优路径到达Device C,并按照该路径转发流量,即Device A在转发时为报文添加端到端路径信息(例如Device B到Device C的SRv6 SID),这样Device B收到报文后,根据报文中SRH里的路径信息将报文转发给Device C,避免环路的产生。
经过SR防微环延迟时间后,Device B节点完成收敛,Device A去除额外添加的路径信息,按正常方式将报文转发到Device C。
与IPv6 segment routing相关的协议规范有:
· draft-previdi-6man-segment-routing-header
· draft-ietf-6man-segment-routing-header
· draft-filsfils-spring-segment-routing
· draft-filsfils-spring-srv6-network-programming
在配置SRv6之前,需完成以下任务:
· 确定SRv6隧道的源节点、中间节点和尾节点。
· 规划节点的IP地址。
不同Locator的名称不能相同。
不能为不同Locator配置相同的IPv6地址前缀和前缀长度,且不同Locator的IPv6地址前缀不能有重叠部分。
SRv6视图下的Locator段内存在正在被使用的动态SRv6 SID时,不能关闭SRv6功能和删除该Locator段。
coc-both类型的Locator和普通类型的Locator支持互相修改,即无需删除已配置的Locator段,直接修改参数即可。修改原则如下:
· 支持将普通类型的Locator修改为coc-both类型的Locator,修改时仅支持指定common-prefix和non-compress-static参数,其他参数不允许修改。例如,配置普通类型的Locator为locator test ipv6-prefix 100:1:: 80 static 8 args 8,可以直接修改为locator test ipv6-prefix 100:1:: 80 common-prefix 64 coc-both non-compress-static 8 static 8 args 8。
· 支持将coc-both类型的Locator修改为普通类型的Locator,修改时仅支持删除common-prefix和non-compress-static参数,其他参数不允许修改。例如,配置coc-both类型的Locator为locator test ipv6-prefix 100:1:: 80 common-prefix 64 coc-both non-compress-static 8 static 8 args 8,可以直接修改为locator test ipv6-prefix 100:1:: 80 static 8 args 8。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 配置Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length [ args args-length | static static-length ] * ]
(4) (可选)配置当前Locator为Anycast Locator。
anycast enable
缺省情况下,当前Locator不是Anycast Locator。
路由协议报文携带的Locator TLV中Flags字段的A-bit置位,表示该Locator为Anycast Locator,即一组SRv6节点具有相同的Locator。
(5) 配置Opcode段。
¡ 配置End SID。
opcode { opcode | hex hex-opcode } end { no-flavor | psp | psp-usp-usd }
¡ 配置End.X SID。
opcode { opcode | hex hex-opcode } end-x interface interface-type interface-number nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd }
¡ 配置End.DT4 SID。
opcode { opcode | hex hex-opcode } end-dt4 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ]
指定的VPN实例必须已经存在。不同VPN实例不能配置相同End.DT4 SID。
¡ 配置End.DT6 SID。
opcode { opcode | hex hex-opcode } end-dt6 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ]
指定的VPN实例必须已经存在。不同VPN实例不能配置相同End.DT6 SID。
¡ 配置End.DT46 SID。
opcode { opcode | hex hex-opcode } end-dt46 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ]
指定的VPN实例必须已经存在。不同VPN实例不能配置相同End.DT46 SID。
¡ 配置End.DX4 SID。
opcode { opcode | hex hex-opcode } end-dx4 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ]
指定的VPN实例必须已经存在,不同下一跳和出接口不能配置相同End.DX4 SID。
¡ 配置End.DX6 SID。
opcode { opcode | hex hex-opcode } end-dx6 interface interface-type interface-number nexthop nexthop-ipv6-address [ vpn-instance vpn-instance-name [ evpn ] ]
指定的VPN实例必须已经存在,不同下一跳和出接口不能配置相同End.DX6 SID。
¡ 配置End.DX2 SID。
opcode { opcode | hex hex-opcode } end-dx2 xconnect-group group-name connection connection-name
指定的交叉连接组和交叉连接必须已经存在。
opcode { opcode | hex hex-opcode } end-dx2 vsi vsi-name interface interface-type interface-number
指定的VSI必须已经存在。
¡ 配置End.DX2L SID。
opcode { opcode | hex hex-opcode } end-dx2l xconnect-group group-name connection connection-name
指定的交叉连接组和交叉连接必须已经存在。
opcode { opcode | hex hex-opcode } end-dx2l vsi vsi-name interface interface-type interface-number
指定的VSI必须已经存在。
¡ 配置End.DT2M SID。
opcode { opcode | hex hex-opcode } end-dt2m vsi vsi-name
指定的VSI必须已经存在。不同VSI不能配置相同End.DT2M SID。
¡ 配置End.DT2U SID。
opcode { opcode | hex hex-opcode } end-dt2u vsi vsi-name
指定的VSI必须已经存在。不同VSI不能配置相同End.DT2U SID。
¡ 配置End.DT2UL SID。
opcode { opcode | hex hex-opcode } end-dt2ul vsi vsi-name
指定的VSI必须已经存在。不同VSI不能配置相同End.DT2UL SID。
¡ 配置End.M SID。
opcode { opcode | hex hex-opcode } end-m mirror-locator ipv6-address prefix-length
¡ 配置End.OP SID。
opcode { opcode | hex hex-opcode } end-op
在EVPN VPWS over SRv6场景中,如果PE之间无法通过BGP路由建立SRv6 PW,则需要在PE间建立静态SRv6 PW,以保证流量正常转发。由于PE间无法通过BGP路由传递SRv6 SID信息,因此需要在PE上配置本端为交叉连接分配的SRv6 SID和远端为交叉连接分配的SRv6 SID。本端为交叉连接分配的SRv6 SID需要在Locator段下通过opcode命令指定,远端为交叉连接分配的SRv6 SID需要创建Remote Locator段后,在交叉连接静态SRv6配置视图下通过peer命令引用Remote Locator段并指定。
本端PE配置的Remote Locator段需要与远端PE上的Locator段相同,本端PE和远端PE上的Locator段、Remote Locator段和SRv6 SID需要对称配置。例如:
· 本端PE(PE 1)配置如下:
locator pe1 ipv6-prefix 100:: 64 static 32
opcode 1 end.dx2 xconnect-group pe1 connection pe1
remote-locator pe2 ipv6-prefix 200:: 64 static 32
xconnect-group pe1
connection pe1
static-srv6 local-service-id 1 remote-service-id 2
peer 2::2 end-dx2-sid remote-locator pe2 opcode 1
· 远端PE(PE 2)配置如下:
locator pe2 ipv6-prefix 200:: 64 static 32
opcode 1 end.dx2 xconnect-group pe2 connection pe2
remote-locator pe1 ipv6-prefix 100:: 64 static 32
xconnect-group pe2
connection pe2
static-srv6 local-service-id 1 remote-service-id 2
peer 1::1 end-dx2-sid remote-locator pe1 opcode 1
由以上配置可知,本端PE上的Locator段为100::/64、远端Locator段200::/6;远端PE上的Locator段为200::/64、远端Locator段100::/6。本端PE为交叉连接分配的SRv6 SID为End.DX2 SID 100::1,远端PE为交叉连接分配的SRv6 SID为End.DX2 SID 200::1。
在EVPN VPWS over SRv6场景中,部署静态SRv6 PW进行报文转发时,报文的IPv6目的地址为Remote Locator段下的SRv6 SID。远端PE收到报文后,查找本地Locator SID转发表:
· 如果匹配本地Locator段下的SRv6 SID,则根据该SRv6 SID,执行对应的转发动作。
· 如果未匹配本地Locator段下的SRv6 SID,则丢弃该报文。
首次创建远端Locator段,进入远端Locator段视图时,必须指定IPv6地址前缀、前缀长度及静态段长度。再次进入该远端Locator段视图时仅指定远端Locator段名称即可。
不同远端Locator段的名称不能相同,IPv6前缀也不能相同、不能重叠。
远端Locator段和Locator段的IPv6前缀也不能相同、不能重叠。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 配置远端Locator段,并进入远端Locator视图。
remote-locator remote-locator-name [ ipv6-prefix ipv6-address prefix-length [ args args-length | static static-length ] * ]
IPv6地址前缀长度必须大于公共前缀长度。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6压缩功能。
srv6 compress enable
缺省情况下,SRv6压缩功能处于关闭状态。
(4) 配置Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length common-prefix common-prefix-length coc32 [ static static-length ] ]
(5) 配置Opcode段。
¡ 配置其他Opcode段。
具体配置请参见“1.7 配置普通SRv6 SID”。
¡ 配置End SID。
opcode { opcode | hex hex-opcode } end-coc32 [ no-psp ]
opcode { opcode | hex hex-opcode } end-coc32 { no-flavor | psp }
¡ 配置End.X SID。
opcode { opcode | hex hex-opcode } end-x-coc32 interface interface-type interface-number nexthop nexthop-ipv6-address { no-flavor | psp }
在支持压缩与非压缩共存的Locator段下,可以为压缩的静态SID和非压缩的静态SID指定相同opcode值。
coc-both类型的Locator和普通类型的Locator支持互相修改,即无需删除已配置的Locator段,直接修改参数即可。修改原则如下:
· 支持将普通类型的Locator修改为coc-both类型的Locator,修改时仅支持指定common-prefix和non-compress-static参数,其他参数不允许修改。例如,配置普通类型的Locator为locator test ipv6-prefix 100:1:: 80 static 8 args 8,可以直接修改为locator test ipv6-prefix 100:1:: 80 common-prefix 64 coc-both non-compress-static 8 static 8 args 8。
· 支持将coc-both类型的Locator修改为普通类型的Locator,修改时仅支持删除common-prefix和non-compress-static参数,其他参数不允许修改。例如,配置coc-both类型的Locator为locator test ipv6-prefix 100:1:: 80 common-prefix 64 coc-both non-compress-static 8 static 8 args 8,可以直接修改为locator test ipv6-prefix 100:1:: 80 static 8 args 8。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6压缩功能。
srv6 compress enable
缺省情况下,SRv6压缩功能处于关闭状态。
(4) 配置Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length common-prefix common-prefix-length coc-both [ non-compress-static non-compress-static-length ] [ args args-length | static static-length ] * ]
(5) (可选)配置预留的SRv6 SID起始值。
reserved-sid-start sid-value count reserved-sid-count
缺省情况下,未配置预留的SRv6 SID。
设备根据接收到的SRv6 TE Policy路由生成SRv6 TE Policy时,需要为该SRv6 TE Policy分配BSID。通过本命令限制可以被分配的BSID范围,以保证该范围内的SRv6 SID不会被其他协议所占用。
(6) 配置Opcode段。
¡ 配置其他Opcode段。
具体配置请参见“1.7 配置普通SRv6 SID”。
¡ 配置End(COCNONE) SID。
opcode { opcode | hex hex-opcode } end-coc-none [ no-psp ]
opcode { opcode | hex hex-opcode } end-coc-none { no-flavor | psp | psp-usp-usd }
End(COCNONE) SID从压缩段空间内分配,作用同End SID。
¡ 配置End.X(COCNONE) SID。
opcode { opcode | hex hex-opcode } end-x-coc-none interface interface-type interface-number nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd }
End.X(COCNONE) SID从压缩段空间内分配,作用同End.X SID。
OSPFv3或IS-IS邻居关系震荡,为设备间链路动态分配的End.X SID会频繁地删除和申请,从而导致邻居间丢包。为了解决上述问题,可以配置本功能,当设备间邻居关系断开时,暂不删除动态分配的End.X SID,保证流量正常转发。当达到延迟删除时间后,如果设备间邻居关系仍然处于断开状态,则删除动态分配的End.X SID。
执行以下操作后,不会等待延迟时间,将立即删除动态分配的End.X SID:
· 执行reset ospfv3 process命令。有关本命的详细介绍,请参见“三层技术-IP路由命令参考”中的“IS-IS”。
· 执行reset isis all命令。有关本命的详细介绍,请参见“三层技术-IP路由命令参考”中的“OSPFv3”。
· 接口删除,如接口板拔出、删除子接口和删除VLAN接口等。
(1) 进入系统视图。
system-view
(2) 进入IS-IS IPv6地址族视图或OSPFv3视图。
¡ 依次执行以下命令,进入IS-IS IPv6地址族视图。
isis [ process-id ] [ vpn-instance vpn-instance-name ]
address-family ipv6 [ unicast ]
¡ 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 开启动态End.X SID延迟删除功能并配置延迟删除时间。
segment-routing ipv6 end-x delete-delay [ time-value ]
缺省情况下,动态End.X SID延迟删除功能处于开启状态,延迟删除时间为1800秒。
邻居设备故障,本端与邻居相连的接口状态由Up变为Down时,该接口关联的End.X SID会失效。当邻居设备故障恢复后,接口恢复Up状态,与该接口关联的静态End.X SID生效。由于路由没有完成收敛,设备无法通过静态End.X SID对应的路由表项转发报文,导致报文转发失败或导致丢包(动态分配的End.X SID路由完成收敛后才下发FIB表,无此类问题)。为了避免该问题,可以配置本命令,延迟将接口关联的静态End.X SID下发到FIB表,以保证在延迟时间内设备不通过End.X SID对应的接口链路转发流量,避免丢包。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 配置静态End.X SID下发FIB表的延迟时间。
end-x update-delay delay-time
缺省情况下,静态End.X SID不延迟下发FIB表。
在SRv6组网环境中,必须指定封装的IPv6报文头的源地址。否则,无法通过SRv6转发数据流量。
配置源地址时,不能为环回地址、链路本地地址、组播地址和未指定地址。指定的源地址必须为本机地址,且已经由路由协议发布,建议指定本设备的Loopback接口地址。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置封装的IPv6报文头的源地址。
encapsulation source-address ipv6-address [ ip-ttl ttl-value ]
缺省情况下,未指定封装的IPv6报文头的源地址。
通过引用Locator段,IGP协议可以通告Locator段内的SRv6 SID。
如果需要通过IGP协议发布G-SID,则需要在IGP协议下开启SRv6压缩功能,以便向邻居通告G-SID。
配置通过IS-IS通告SRv6 SID前,需要确保IS-IS开销值的类型为wide、compatible或wide-compatible。关于IS-IS开销值类型的配置请参见“三层技术-IP路由配置指导”中的“IS-IS”。
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis [ process-id ] [ vpn-instance vpn-instance-name ]
(3) 进入IS-IS IPv6地址族视图。
address-family ipv6 [ unicast ]
(4) 引用Locator段。
segment-routing ipv6 locator locator-name [ level-1 | level-2 ] [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | auto-sid-disable ]
缺省情况下,未引用Locator段。
多次配置本功能,可以引用多个Locator段,从而通告多个SRv6 SID。
(5) (可选)配置IS-IS发布SRv6 L3 Service相关SID。
segment-routing ipv6 advertise l3-service-sid
缺省情况下,IS-IS不发布SRv6 L3 Service相关SID。
仅公网IS-IS进程支持配置本命令。
配置本命令后,IS-IS会在LSP中发布SRv6 L3 Service相关的SID,以便IS-IS将包含SRv6 L3 Service相关SID的链路状态信息上报给控制器,满足需要链路状态信息的各种应用需求。目前IS-IS仅支持发布End.DT4 SID、End.DT6 SID和End.DT46 SID。
(6) 开启IS-IS的SRv6压缩功能。
srv6 compress enable [ level-1 | level-2 ]
缺省情况下,IS-IS的SRv6压缩功能处于关闭状态。
仅在通过IS-IS发布G-SID时,配置本功能。
(1) 进入系统视图。
system-view
(2) 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 引用Locator段。
segment-routing ipv6 locator locator-name [ auto-sid-disable ]
缺省情况下,未引用Locator段。
多次配置本功能,可以引用多个Locator段,从而通告多个SRv6 SID。
(4) (可选)配置OSPFv3报文中为SRv6扩展的TLV和标记位遵循私有协议的定义。
segment-routing ipv6 private-srv6-extensions compatible
缺省情况下,OSPFv3协议报文符合最新的OSPFv3的草案标准,OSPFv3报文为SRv6扩展的TLV和标记位遵循草案draft-ietf-lsr-ospfv3-srv6-extensions-09中的定义。其中,SRv6 Capabilities TLV类型取值为20,End.X SID Sub-TLV类型取值为31,LAN End.X SID Sub-TLV类型取值为32,SRv6 Locator TLV中PrefixOptions字段的N标记位于第三位,AC标记位于第一位。此时,OSPFv3协议中SRv6扩展TLV信息与第三方厂商相同,可以互通。
(5) (可选)配置SRv6 Locator TLV中的Locator字段为固定的128bit长度,兼容旧版本草案。
segment-routing ipv6 compatible locator-fixed-length
缺省情况下,SRv6 Locator LSA中的Locator字段为可变长度。
SRv6 Locator TLV中的Locator字段的长度在draft-ietf-lsr-ospfv3-srv6-extensions-12及以后版本草案中修改为可变长度,最长不超过128bit,Locator字段的长度可以根据配置的Locator段长度变化,但在draft-ietf-lsr-ospfv3-srv6-extensions-11及以前版本的草案中为固定的128 bit。
在BGP跨域组网中,执行本配置后,BGP IPv6单播路由表中将生成指定Locator网段的路由,并通过BGP将该路由发布给BGP对等体。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 进入BGP IPv6单播地址族视图。
address-family ipv6 [ unicast ]
(4) 配置在BGP IPv6单播路由表中生成指定Locator网段的路由,并发布给BGP对等体。
advertise srv6 locator locator-name [ route-policy route-policy-name ]
缺省情况下,不会在BGP IPv6单播路由表中生成Locator网段的路由。
BGP-EPE用来为域间路径分配BGP Peer SID。Peer SID通过BGP LS扩展传递给网络控制器。控制器通过对IGP SID和BGP Peer SID进行合理编排,实现跨域最优路径转发。
在设备上配置BGP-EPE功能后,该设备为相连的BGP对等体/对等体组分配SID,用来标识与本设备相连的特定BGP邻居或链路。
如果未指定任何参数,则在BGP实例下通过segment-routing ipv6 egress-engineering locator命令配置的BGP-EPE引用Locator段内为对等体动态分配SRv6 SID。
对于同一对等体,配置本功能时:
· 指定参数locator时,多次执行本命令,最后一次执行的命令生效。
· 指定参数static-sid时,可以多次执行本命令,分别配置不同类型SRv6 SID;对于同一类型SRv6 SID,多次执行本命令,最后一次执行的命令生效。
为对等体配置静态SRv6 SID时,指定的静态SRv6 SID必须在BGP实例视图下通过segment-routing ipv6 egress-engineering locator命令引用的Locator段内。用户可通过display bgp egress-engineering ipv6命令查看静态SRv6 SID是否生效。如果未生效,则表示该静态SRv6 SID已经被其他协议占用。静态SRv6 SID被其他协议占用以后,BGP EPE 不会再申请动态的SRv6 SID,待解除占用后,需要先执行undo peer egress-engineering srv6命令删除该静态SRv6 SID的配置,再执行peer egress-engineering srv6命令重新配置,该静态SRv6 SID才能生效。
通过本命令为对等体指定静态SRv6 SID和通过egress-engineering srv6 peer-set命令为BGP-EPE SRv6 Peer Set组指定静态SRv6 SID时,配置的静态SRv6 SID不能相同。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启SRv6的BGP-EPE功能。
peer group-name egress-engineering srv6
peer ipv6-address [ prefix-length ] egress-engineering srv6 [ locator locator-name | static-sid { psp psp-sid | no-psp-usp no-psp-usp-sid } * ]
缺省情况下,SRv6的BGP-EPE功能处于关闭状态。
BGP-EPE引用Locator段用来限定BGP-EPE SRv6 Peer Set组和开启BGP-EPE功能的对等体所能分配的End.X SID范围。在BGP-EPE SRv6 Peer Set组和对等体下配置的静态SRv6 SID必须在本命令指定的Locator段范围内。
配置本功能后,以下情况将从本功能指定的Locator段中动态分配End.X SID:
· 创建BGP-EPE SRv6 Peer Set组后,未配置静态SRv6 SID。
· 对等体配置了peer egress-engineering srv6命令,但未指定locator参数,也未配置静态SRv6 SID。
配置本功能时,如果Locator段下已经配置了静态SRv6 SID,则优先使用静态SRv6 SID;如果未配置静态SRv6 SID,则动态分配SRv6 SID。如果Locator段下配置的静态SRv6 SID是同一opcode值不同的出接口和下一跳的End.X SID,则BGP-EPE不会使用该静态SRv6 SID,而是会动态分配SRv6 SID。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP-EPE引用的Locator。
segment-routing ipv6 egress-engineering locator locator-name
缺省情况下,BGP-EPE未引用Locator。
当一台设备和多台设备建立BGP邻居关系时,可以手工规划邻居组,即将一组BGP邻居规划为一个Set,基于该组分配PeerSet SID。通过PeerSet SID转发流量时,可以在多个邻居间负载分担。
配置本功能前,对等体必须开启SRv6 BGP-EPE功能。
配置BGP-EPE SRv6 Peer Set组前,必须在BGP实例视图下通过segment-routing ipv6 egress-engineering locator命令配置BGP-EPE引用的Locator段:
· 从引用的Locator段内为BGP-EPE SRv6 Peer Set组动态分配SRv6 SID。
· 为BGP-EPE SRv6 Peer Set组静态指定SRv6 SID时,指定的静态SRv6 SID必须在引用的Locator段内。
对于同一Peer Set组,多次执行egress-engineering srv6 peer-set命令时:
· 对于同一类型SRv6 SID,最后一次执行的命令生效。
· 可以分别配置不同类型SRv6 SID,但不同类型的SRv6 SID不能相同。
通过本命令为BGP-EPE SRv6 Peer Set组指定静态SRv6 SID和通过peer egress-engineering srv6命令为对等体指定静态SRv6 SID时,配置的静态SRv6 SID不能相同。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建BGP-EPE SRv6 Peer Set组。
egress-engineering srv6 peer-set peer-set-name [ static-sid { psp psp-sid | no-psp-usp no-psp-usp-sid } * ]
(4) 将对等体加入BGP-EPE SRv6 Peer Set组。
peer { ipv6-address [ prefix-length ] } peer-set srv6-peer-set-name
缺省情况下,对等体未加入BGP-EPE SRv6 Peer Set组。
不能通过重复执行peer peer-set命令修改对等体加入的BGP-EPE SRv6 Peer Set组。如需修改对等体加入的BGP-EPE SRv6 Peer Set组,请先通过undo peer peer-set命令将对等体从BGP-EPE SRv6 Peer Set组中删除,再执行peer peer-set命令将对等体加入新BGP-EPE SRv6 Peer Set组。
配置本功能后,设备将对通过SRv6 Local SID转发的流量进行统计。对SRv6 Local SID转发的流量进行统计,可以达到对经过当前节点的SRv6转发流量预测和优化的目的,便于网络规划。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6 Local SID的流量转发统计功能。
local-sid forwarding statistics enable
缺省情况下,SRv6 Local SID的流量转发统计功能处于关闭状态。
(4) (可选)配置SRv6 Local SID流量转发统计信息收集的时间间隔。
local-sid forwarding statistics interval interval
缺省情况下,SRv6 Local SID流量转发统计信息收集的时间间隔为30秒。
TI-LFA FRR配置任务如下:
(1) 开启TI-LFA FRR功能
(2) (可选)配置接口不参与TI-LFA计算
禁止源节点设备上路由的主下一跳出接口参与TI-LFA计算。
(3) (可选)开启FRR正切防微环功能
(4) (可选)配置SR防微环功能
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 开启 IPv6 IS-IS的LFA快速重路由功能。
fast-reroute lfa [ level-1 | level-2 ]
缺省情况下,IPv6 IS-IS支持快速重路由功能处于关闭状态。
(5) 开启IPv6 IS-IS的TI-LFA快速重路由功能。
fast-reroute ti-lfa [ per-prefix ] [ route-policy route-policy-name | host ] [ level-1 | level-2 ]
缺省情况下,IPv6 IS-IS的TI-LFA FRR功能处于关闭状态。
(6) (可选)配置快速重路由备份路径优选方案的优先级。
fast-reroute tiebreaker { lowest-cost | node-protecting | srlg-disjoint } preference preference [ level-1 | level-2 ]
缺省情况下,最小开销路径优选方案的优先级为20,节点保护优选方案的优先级为40,共享风险链路组优选方案的优先级为10。
(1) 进入系统视图。
system-view
(2) 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 开启OSPFv3的LFA快速重路由功能。
fast-reroute { lfa [ abr-only ] | route-policy route-policy-name }
缺省情况下,OSPFv3支持快速重路由功能处于关闭状态。
(4) 开启OSPFv3的TI-LFA快速重路由功能。
fast-reroute ti-lfa [ per-prefix ] [ route-policy route-policy-name | host ]
缺省情况下,OSPFv3的TI-LFA FRR功能处于关闭状态。
(5) (可选)配置快速重路由备份路径优选方案的优先级。
fast-reroute tiebreaker { lowest-cost | node-protecting } preference preference
缺省情况下,最小开销路径优选方案的优先级为20,节点保护优选方案的优先级为40。
(1) 进入系统视图。
system-view
(2) 进入接口视图。
interface interface-type interface-number
(3) 禁止IPv6 IS-IS的接口参与TI-LFA计算。
isis ipv6 fast-reroute ti-lfa disable [ level-1 | level-2 ]
缺省情况下,允许IPv6 IS-IS的接口参与TI-LFA计算。
(1) 进入系统视图。
system-view
(2) 进入接口视图。
interface interface-type interface-number
(3) 禁止OSPFv3的接口参与TI-LFA计算。
ospfv3 fast-reroute ti-lfa disable [ instance instance-id ]
缺省情况下,允许OSPFv3的接口参与TI-LFA计算。
FRR正切防微环功能仅能解决正切微环的问题。
应用了TI-LFA快速重路由功能的组网环境中,若某节点或者链路发生故障,流量会切换到TI-LFA计算的备份路径。但是,如果此时备份路径上的设备还没有完成收敛,则会在源节点(故障节点或者链路的前一节点)和备份路径上的设备之间形成环路,直到备份路径上的设备完成收敛。
为了解决上述问题,节点或者链路故障以后,首先流量切换到TI-LFA计算的备份路径,然后源节点延迟一段时间收敛,等待备份路径上的设备收敛完成以后,源节点开始收敛。开启了该功能的节点通过延迟一段时间再将计算出的收敛后路径下发到FIB表中,达到延迟收敛的效果。
如果同时配置FRR正切防微环功能和SR防微环功能,则FRR正切防微环功能和SR防微环功能同时启动延迟时间定时器,且FRR正切防微环功能优先生效,即先延迟下发FIB表项。此时存在两种情况:
· 如果FRR正切防微环的延迟时间大于等于SR防微环的延迟时间,则FRR正切防微环的延迟时间定时器超时后立即切换到收敛后的路径。
· 如果FRR正切防微环的延迟时间小于SR防微环的延迟时间,则FRR正切防微环的延迟时间定时器超时后继续等待SR防微环的延迟时间定时器超时,再切换到收敛后的路径。
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 开启IS-IS的FRR正切防微环功能。
fast-reroute microloop-avoidance enable [ level-1 | level-2 ]
缺省情况下,IS-IS的FRR正切防微环功能处于关闭状态。
(5) (可选)配置FRR正切防微环延迟时间。
fast-reroute microloop-avoidance rib-update-delay delay-time [ level-1 | level-2 ]
缺省情况下,FRR正切防微环延迟时间为5000毫秒。
SR防微环功能可以解决正切微环和回切微环的问题。
在网络故障或故障恢复期间,路由都会重新收敛,由于网络节点之间转发状态短暂不一致,各个设备收敛速度不同,可能存在转发微环现象。配置SR的防微环功能后,在IGP收敛期间,设备会按照指定路径转发流量,转发过程不依赖于各设备的路由收敛,从而避免产生环路。
具体处理流程为:
· 正切情况下,开启了该功能的节点收敛后,将计算出的转发路径下发到FIB表中,并延迟一段时间切换到该转发路径,延迟时间内仍使用TI-LFA FRR备份路径转发,从而避免微环。
· 回切情况下,开启了该功能的节点收敛后计算出正常主用路径的同时,还会计算一条带SID的严格显式备份路径,在延迟切换的时间内,使用备份路径转发,从而避免微环。
为了保证IGP收敛有足够的时间,可以配置SR防微环延迟时间,在此期间设备按照指定路径转发流量。在网络故障恢复IGP完成收敛后,流量再通过IGP计算的路径转发。
如果同时配置FRR正切防微环功能和SR防微环功能,则FRR正切防微环功能和SR防微环功能同时启动延迟时间定时器,且FRR正切防微环功能优先生效,即先延迟下发FIB表项。此时存在两种情况:
· 如果FRR正切防微环的延迟时间大于等于SR防微环的延迟时间,则FRR正切防微环的延迟时间定时器超时后立即切换到收敛后的路径。
· 如果FRR正切防微环的延迟时间小于SR防微环的延迟时间,则FRR正切防微环的延迟时间定时器超时后继续等待SR防微环的延迟时间定时器超时,再切换到收敛后的路径。
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 开启IPv6 IS-IS的SR防微环功能。
segment-routing microloop-avoidance enable [ level-1 | level-2 ]
缺省情况下,IPv6 IS-IS的SR防微环功能处于关闭状态。
(5) (可选)配置IPv6 IS-IS的SR防微环延迟时间。
segment-routing microloop-avoidance rib-update-delay delay-time [ level-1 | level-2 ]
缺省情况下,IPv6 IS-IS的SR防微环延迟时间为5000毫秒。
(1) 进入系统视图。
system-view
(2) 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 开启OSPFv3的SR防微环功能。
segment-routing microloop-avoidance enable
缺省情况下,OSPFv3的SR防微环功能处于关闭状态。
(4) (可选)配置OSPFv3的SR防微环延迟时间。
segment-routing microloop-avoidance rib-update-delay delay-time
缺省情况下,OSPFv3的SR防微环延迟时间为5000毫秒。
SRv6可以配置两种MTU值:
· Path MTU是报文在源节点到目的节点之间成功传送所允许的最大IPv6 MTU。
· Reserved MTU是在TI-LFA等场景中为源节点规划的预留MTU值。
由于IPv6报文在传输过程中不允许在中间节点分片转发,当IPv6报文长度大于出接口MTU时,设备会丢弃报文;如果利用较小的MTU对通过SRv6隧道转发的报文进行分片,会降低链路的带宽利用率。为了避免报文过大而丢弃,同时又能充分利用接口MTU提高链路的带宽利用率,可以合理规划SRv6 MTU。
在TI-LFA场景中主路径故障,流量切换到备份路径时,设备会重新构造IPv6和SRH头,增加了IPv6报文长度,可能会导致报文超过MTU限制而被丢弃。在源节点上引入Reserved MTU,可以在发送报文时为增加的SRH预留长度,以避免TI-LFA进行FRR备份路径切换时报文因超大而丢弃。SRv6 Path MTU减去Reserved MTU称作Active MTU,Active MTU必须大于等于1280字节。源节点发送的SRv6报文的大小同时受Active MTU和物理接口的IPv6 MTU控制,实际生效的MTU是二者的较小值。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置SRv6的Reserved MTU值。
path-mtu reserved [ reserved-value ]
不同型号的设备的缺省情况不同,具体请参见命令手册。
(4) 配置SRv6的Path MTU值。
path-mtu mtu-value
不同型号的设备的缺省情况不同,具体请参见命令手册。
在QoS的DiffServ服务模型中,报文在IP网络和SRv6网络之间相互传输时,IP优先级和DSCP优先级的处理模式分为:
· Pipe模式:当报文进入SRv6网络时,原始报文会封装新IPv6报文头。Ingress设备会忽略其自身携带的IP或DSCP优先级,使用配置值service-class作为新IPv6报文头的Traffic Class;离开SRv6网络时,Egress设备剥离外层IPv6报文头,不会修改原始报文的原有IP或DSCP优先级。在SRv6网络中,依据配置的service-class对报文进行QoS调度。
· Short-pipe模式:报文进入和离开SRv6网络时,处理方式与Pipe模式相同。与Pipe模式不同的是:
¡ 报文在SRv6网络的Ingress节点至倒数第二跳,依据配置的service-class进行QoS调度。
¡ 在Egress节点,先剥离外层IPv6报文头,再进行QoS调度。如果没有配置优先级信任模式,则依据原始报文携带的IP或DSCP优先级进行QoS调度;如果配置了优先级信任模式,则依据信任的优先级进行QoS调度。
· Uniform模式:当报文进入SRv6网络时,Ingress设备会将其携带的原始报文IP或DSCP优先级映射为外层封装IPv6头的Traffic Class;离开SRv6网络时,Egress设备再将外层IPv6头的Traffic Class映射为原始报文的IP或DSCP优先级。
在隧道的源节点和目的节点上配置diffserv-mode命令时,需要保证本端出方向的差分服务模式和对端入方向的差分服务模式一致,本端入方向的差分服务模式和对端出方向差分服务模式一致。
有关IP优先级、DSCP优先级的详细介绍,请参见“QoS配置指导”中的“优先级映射”。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置SRv6的差分服务模式。
diffserv-mode { ingress { pipe service-class | short-pipe service-class | uniform } egress { pipe | short-pipe | uniform } | { pipe service-class | short-pipe service-class | uniform } }
缺省情况下,入方向和出方向的SRv6差分服务模式均为Pipe模式,service-class取值为0。
开启SRv6模块的告警功能后,该模块会生成告警信息,用于报告该模块的重要事件。生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
(1) 进入系统视图。
system-view
(2) 开启SRv6模块的告警功能。
snmp-agent trap enable srv6
缺省情况下,SRv6模块的告警功能处于关闭状态。
可在任意视图下执行以下命令:
· 显示SRv6简要信息。
display segment-routing ipv6 brief
· 显示SRv6转发信息。
display segment-routing ipv6 forwarding [ entry-id [ relation ] | forwarding-type { srv6be | srv6pcpath | srv6pgroup | srv6policy | srv6sfc | srv6sidlist | srv6sids } ] [ slot slot-number ]
· 显示SRv6的Local SID转发表信息。
display segment-routing ipv6 local-sid [ locator locator-name ] [ end | end-am | end-as | end-b6encaps | end-b6encapsred | end-b6insert | end-b6insertred | end-coc-none | end-coc32 | end-dt2m | end-dt2u | end-dt2ul | end-dx2 | end-dx2l | end-m | end-op | end-t ] [ owner owner ] [ sid ]
display segment-routing ipv6 local-sid [ locator locator-name ] [ end-dt4 | end-dt46 | end-dt6 | end-dx4 | end-dx6 ] [ owner owner ] [ sid | vpn-instance vpn-instance-name ]
display segment-routing ipv6 local-sid [ locator locator-name ] [ end-x | end-x-coc-none | end-x-coc32 ] [ sid | interface interface-type interface-number [ nexthop nexthop-ipv6-address ] ][ owner owner ]
· 显示各协议分配的SRv6 SID的数目。
display segment-routing ipv6 local-sid statistics [ locator [ locator-name ] ]
· 显示SRv6的Locator信息。
display segment-routing ipv6 locator [ locator-name ]
· 显示指定Locator中可用的静态SRv6 SID。
display segment-routing ipv6 available-static-sid locator locator-name [ from begin-value ]
· 显示SRv6的Locator的配置信息和Locator已分配SRv6 SID的统计信息。
display segment-routing ipv6 locator-statistics [ locator-name ]
· 显示远端Locator段的信息。
display segment-routing ipv6 remote-locator [ remote-locator-name ]
· 显示Remote SRv6 SID信息。
display segment-routing ipv6 remote-sid { end-dx2 | end-dx2l } [ sid ]
· 显示IPv6对等体的BGP-EPE信息。
display bgp [ instance instance-name ] egress-engineering ipv6 [ ipv6-address ] [ verbose ]
· 显示BGP Peer SRv6 Set组的信息。
display bgp [ instance instance-name ] egress-engineering srv6 peer-set [ srv6-peer-set-name ]
· 显示IS-IS SRv6能力信息。
display isis segment-routing ipv6 capability [ level-1 | level-2 ] [ process-id ]
· 显示IS-IS SRv6的Locator路由信息。
display isis segment-routing ipv6 locator [ ipv6-address prefix-length ] [ flex-algo flex-algo-id | [ level-1 | level-2 ] | verbose ] * [ process-id ]
· 显示IS-IS发布的SRv6 SID信息。
display isis segment-routing ipv6 sid-info sid [ sid-value | [ end | end-dt4 | end-dt46 | end-dt6 | end-m | end-x ] ] [ level-1 | level-2 ] [ process-id ]
· 显示IS-IS发布的Locator段内的SRv6 SID信息。
display isis segment-routing ipv6 sid-info locator [ ipv6-prefix prefix-length ] [ end | end-dt4 | end-dt46 | end-dt6 | end-m | end-x ] [ level-1 | level-2 ] [ process-id ]
· 显示发布源发布的SRv6 SID信息。
display isis segment-routing ipv6 sid-info system-id [ system-id ] [ end | end-dt4 | end-dt46 | end-dt6 | end-m | end-x ] [ level-1 | level-2 ] [ process-id ] [ is-name isname ]
· 显示冲突的SRv6 SID信息。
display isis segment-routing ipv6 sid-info conflict [ sid-value ] [ level-1 | level-2 ] [ process-id ]
· 显示SRv6 SID统计信息。
display isis segment-routing ipv6 sid-info statistics [ system-id system-id ] [ level-1 | level-2 ] [ process-id ]
· 显示OSPFv3 SRv6能力信息。
display ospfv3 [ process-id ] segment-routing ipv6 capability
· 显示OSPFv3 SRv6的Locator信息。
display ospfv3 [ process-id ] segment-routing ipv6 locator [ ipv6-address prefix-length ]
可在任意视图下执行以下命令,显示SRv6 Local SID的流量转发统计信息。
display segment-routing ipv6 local-sid forwarding statistics { end | end-dt2m | end-dt2u | end-dt2ul } [ sid ]
display segment-routing ipv6 local-sid forwarding statistics { end-dt4 | end-dt46 | end-dt6 | end-dx4 | end-dx6 } [ sid | vpn-instance vpn-instance-name ]
display segment-routing ipv6 local-sid forwarding statistics end-x [ sid | interface interface-type interface-number [ nexthop nexthop-ipv6-address ] ]
请在用户视图下执行以下命令,清除SRv6 Local SID流量转发统计信息。
reset segment-routing ipv6 local-sid forwarding statistics
· 设备Device A、Device B、Device C和Device D运行IPv6 IS-IS实现互通。
· Device A、Device B、Device C和Device D配置IS-IS SRv6功能。
· 当设备Device A和Device C之间链路Link A故障,链路Link B上存在环路,流量无法通过Device D转发到目的节点Device C。通过部署TI-LFA FRR消除环路,同时使流量可以快速切换到链路Link B。
设备 |
接口 |
IP地址 |
设备 |
接口 |
IP地址 |
Device A |
Loop1 |
1::1/128 |
Device B |
Loop1 |
2::2/128 |
|
GE0/0/1 |
2000:1::1/64 |
|
GE0/0/1 |
2000:1::2/64 |
|
GE0/0/2 |
2000:4::1/64 |
|
GE0/0/2 |
2000:2::2/64 |
Device C |
Loop1 |
3::3/128 |
Device D |
Loop1 |
4::4/128 |
|
GE0/0/1 |
2000:3::3/64 |
|
GE0/0/1 |
2000:3::4/64 |
|
GE0/0/2 |
2000:2::3/64 |
|
GE0/0/2 |
2000:4::4/64 |
(1) 请按照2. 图18配置各接口的IP地址和子网掩码,具体配置过程略
(2) 配置Device A
# 配置IS-IS协议实现网络层互通,开销值类型为wide。
<DeviceA> system-view
[DeviceA] isis 1
[DeviceA-isis-1] network-entity 00.0000.0000.0001.00
[DeviceA-isis-1] cost-style wide
[DeviceA-isis-1] address-family ipv6
[DeviceA-isis-1-ipv6] quit
[DeviceA-isis-1] quit
[DeviceA] interface gigabitethernet 0/0/1
[DeviceA-GigabitEthernet0/0/1] isis ipv6 enable 1
[DeviceA-GigabitEthernet0/0/1] isis cost 10
[DeviceA-GigabitEthernet0/0/1] quit
[DeviceA] interface gigabitethernet 0/0/2
[DeviceA-GigabitEthernet0/0/2] isis ipv6 enable 1
[DeviceA-GigabitEthernet0/0/2] isis cost 10
[DeviceA-GigabitEthernet0/0/2] quit
[DeviceA] interface loopback 1
[DeviceA-LoopBack1] isis ipv6 enable 1
[DeviceA-LoopBack1] quit
# 开启SRv6功能,并配置Locator段。
[DeviceA] segment-routing ipv6
[DeviceA-segment-routing-ipv6] locator aaa ipv6-prefix 11:: 64 static 32
[DeviceA-segment-routing-ipv6-locator-aaa] quit
[DeviceA-segment-routing-ipv6] quit
# 配置IS-IS TI-LFA FRR。
[DeviceA] isis 1
[DeviceA-isis-1] address-family ipv6
[DeviceA-isis-1-ipv6] fast-reroute lfa
[DeviceA-isis-1-ipv6] fast-reroute ti-lfa
[DeviceA-isis-1-ipv6] fast-reroute microloop-avoidance enable
[DeviceA-isis-1-ipv6] segment-routing microloop-avoidance enable
[DeviceA-isis-1-ipv6] quit
[DeviceA-isis-1] quit
# 配置引用Locator段。
[DeviceA] isis 1
[DeviceA-isis-1] address-family ipv6
[DeviceA-isis-1-ipv6] segment-routing ipv6 locator aaa
[DeviceA-isis-1-ipv6] quit
[DeviceA-isis-1] quit
(3) 配置Device B
# 配置IS-IS协议实现网络层互通,开销值类型为wide。
<DeviceB> system-view
[DeviceB] isis 1
[DeviceB-isis-1] network-entity 00.0000.0000.0002.00
[DeviceB-isis-1] cost-style wide
[DeviceB-isis-1] address-family ipv6
[DeviceB-isis-1-ipv6] quit
[DeviceB-isis-1] quit
[DeviceB] interface gigabitethernet 0/0/1
[DeviceB-GigabitEthernet0/0/1] isis ipv6 enable 1
[DeviceB-GigabitEthernet0/0/1] isis cost 10
[DeviceB-GigabitEthernet0/0/1] quit
[DeviceB] interface gigabitethernet 0/0/2
[DeviceB-GigabitEthernet0/0/2] isis ipv6 enable 1
[DeviceB-GigabitEthernet0/0/2] isis cost 10
[DeviceB-GigabitEthernet0/0/2] quit
[DeviceB] interface loopback 1
[DeviceB-LoopBack1] isis ipv6 enable 1
[DeviceB-LoopBack1] quit
# 开启SRv6功能,并配置Locator段。
[DeviceB] segment-routing ipv6
[DeviceB-segment-routing-ipv6] locator bbb ipv6-prefix 22:: 64 static 32
[DeviceB-segment-routing-ipv6-locator-bbb] quit
[DeviceB-segment-routing-ipv6] quit
# 配置IS-IS TI-LFA FRR。
[DeviceB] isis 1
[DeviceB-isis-1] address-family ipv6
[DeviceB-isis-1-ipv6] fast-reroute lfa
[DeviceB-isis-1-ipv6] fast-reroute ti-lfa
# 配置引用Locator段。
[DeviceB-isis-1-ipv6] segment-routing ipv6 locator bbb
[DeviceB-isis-1-ipv6] quit
[DeviceB-isis-1] quit
(4) 配置Device C
# 配置IS-IS协议实现网络层互通,开销值类型为wide。
<DeviceC> system-view
[DeviceC] isis 1
[DeviceC-isis-1] network-entity 00.0000.0000.0003.00
[DeviceC-isis-1] cost-style wide
[DeviceC-isis-1] address-family ipv6
[DeviceC-isis-1-ipv6] quit
[DeviceC-isis-1] quit
[DeviceC] interface gigabitethernet 0/0/1
[DeviceC-GigabitEthernet0/0/1] isis ipv6 enable 1
[DeviceC-GigabitEthernet0/0/1] isis cost 100
[DeviceC-GigabitEthernet0/0/1] quit
[DeviceC] interface gigabitethernet 0/0/2
[DeviceC-GigabitEthernet0/0/2] isis ipv6 enable 1
[DeviceC-GigabitEthernet0/0/2] isis cost 10
[DeviceC-GigabitEthernet0/0/2] quit
[DeviceC] interface loopback 1
[DeviceC-LoopBack1] isis ipv6 enable 1
[DeviceC-LoopBack1] quit
# 开启SRv6功能,并配置Locator段。
[DeviceC] segment-routing ipv6
[DeviceC-segment-routing-ipv6] locator ccc ipv6-prefix 33:: 64 static 32
[DeviceC-segment-routing-ipv6-locator-ccc] quit
[DeviceC-segment-routing-ipv6] quit
# 配置IS-IS TI-LFA FRR。
[DeviceC] isis 1
[DeviceC-isis-1] address-family ipv6
[DeviceC-isis-1-ipv6] fast-reroute lfa
[DeviceC-isis-1-ipv6] fast-reroute ti-lfa
# 配置引用Locator段。
[DeviceC-isis-1-ipv6] segment-routing ipv6 locator ccc
[DeviceC-isis-1-ipv6] quit
[DeviceC-isis-1] quit
(5) 配置Device D
# 配置IS-IS协议实现网络层互通,开销值类型为wide。
<DeviceD> system-view
[DeviceD] isis 1
[DeviceD-isis-1] network-entity 00.0000.0000.0004.00
[DeviceD-isis-1] cost-style wide
[DeviceD-isis-1] address-family ipv6
[DeviceD-isis-1-ipv6] quit
[DeviceD-isis-1] quit
[DeviceD] interface gigabitethernet 0/0/1
[DeviceD-GigabitEthernet0/0/1] isis ipv6 enable 1
[DeviceD-GigabitEthernet0/0/1] isis cost 100
[DeviceD-GigabitEthernet0/0/1] quit
[DeviceD] interface gigabitethernet 0/0/2
[DeviceD-GigabitEthernet0/0/2] isis ipv6 enable 1
[DeviceD-GigabitEthernet0/0/2] isis cost 10
[DeviceD-GigabitEthernet0/0/2] quit
[DeviceD] interface loopback 1
[DeviceD-LoopBack1] isis ipv6 enable 1
[DeviceD-LoopBack1] quit
# 开启SRv6功能,并配置Locator段。
[DeviceD] segment-routing ipv6
[DeviceD-segment-routing-ipv6] locator ddd ipv6-prefix 44:: 64 static 32
[DeviceD-segment-routing-ipv6-locator-ddd] quit
[DeviceD-segment-routing-ipv6] quit
# 配置IS-IS TI-LFA FRR。
[DeviceD] isis 1
[DeviceD-isis-1] address-family ipv6
[DeviceD-isis-1-ipv6] fast-reroute lfa
[DeviceD-isis-1-ipv6] fast-reroute ti-lfa
# 配置引用Locator段。
[DeviceD-isis-1-ipv6] segment-routing ipv6 locator ddd
[DeviceD-isis-1-ipv6] quit
[DeviceD-isis-1] quit
# 在Device A上查看3::3/128路由,可以看到TI-LFA备份下一跳信息。
[DeviceA] display isis route ipv6 3::3 128 verbose
Route information for IS-IS(1)
------------------------------
Level-1 IPv6 forwarding table
-----------------------------
IPv6 dest : 3::3/128
Flag : R/L/- Cost : 20
Admin tag : - Src count : 2
Nexthop : FE80::4449:7CFF:FEE0:206
Interface : GE0/0/1
TI-LFA:
Interface : GE0/0/2
BkNextHop : FE80::4449:91FF:FE42:407
LsIndex : 0x80000001
Backup label stack(top->bottom): {44::1:0:1}
Nib ID : 0x24000006
Flags: D-Direct, R-Added to Rib, L-Advertised in LSPs, U-Up/Down Bit Set
不同款型规格的资料略有差异, 详细信息请向具体销售和400咨询。H3C保留在没有任何通知或提示的情况下对资料内容进行修改的权利!