03-SRv6配置
本章节下载: 03-SRv6配置 (1.18 MB)
目 录
1.2.3 节点行为(SRv6 Endpoint Behavior)
2.4.3 NEXT和COC附加行为组合的16bit压缩G-SRv6方案
2.4.4 仅支持NEXT附加行为的16bit压缩G-SRv6方案
2.4.5 仅支持COC附加行为的16bit压缩G-SRv6方案
6.5.1 在coc32类型Locator中配置SRv6 SID
6.5.2 在coc-both类型Locator中配置SRv6 SID
6.5.3 在coc16类型Locator中配置SRv6 SID
6.10.3 配置BGP-EPE SRv6 Peer Set组
6.10.7 配置BGP-EPE动态分配的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用来定义某种网络功能、代表某种网络指令。SRv6 SID采用IPv6地址形式,但不与任何设备上的接口地址对应。
如图1-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都是从locator命令配置SRv6 Locator段中分配,因此,SRv6 Locator段的类型和长度规划不同,SRv6 SID也各不相同,通常情况下,在SRv6报文中封装的是128bit SRv6 SID,这种SRv6 SID可以从普通类型的Locator中分配:
图1-2 普通类型的Locator示意图
从普通类型的Locator可以分配普通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的Function字段所标识的本地操作指令本质上是一种指导报文转发和处理的节点行为,这种本地操作指令称为SRv6 Endpoint Behavior节点行为。RFC 8986中为大部分不同类型的节点行为定义了指令码的取值。从网络配置的角度看,不同的节点转发行为也可以理解为不同类型的SRv6 SID,SRv6 SID的类型包括但不限于:
· End SID:用于标识网络中的某个节点,代表一个目的地址前缀,到达该节点时,如果SL大于0,执行的节点行为是将SL-1,并从SRH取出下一个SID更新到IPv6报文头的目的地址字段,再查表转发报文。还存在两类特殊的End SID,分别是End(COC32)类型和End(COCNONE)类型SID,关于这两类SID的详细介绍,请参见G-SRv6部分的介绍。
· End.X SID:用于标识网络中的某条链路,到达生成该SID的节点时,如果SL大于0,执行的节点行为是将SL-1,并从SRH取出下一个SID更新到IPv6报文头的目的地址字段,再从End.X SID标识的某条链路转发报文。还存在两类特殊的End.X SID,分别是End.X(COC32)类型和End.X(COCNONE)类型SID,关于这两类SID的详细介绍,请参见G-SRv6部分的介绍。
· 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.DX4 SID:用于标识网络中特定IPv4 VPN实例中PE-CE的某个IPv4下一跳。End.DX4 SID对应的转发动作是解封装报文,并且将解封后的IPv4报文通过该SID绑定的三层接口转发给特定下一跳。End.DX4 SID用于IPv4私网用户接入场景。
· End.DX6 SID:用于标识网络中特定IPv6 VPN实例中PE-CE的某个IPv6下一跳。End.DX6 SID对应的转发动作是解封装报文,并且将解封后的IPv6报文通过该SID绑定的三层接口转发给特定下一跳。End.DX6 SID用于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.OP SID:用于SRv6 OAM场景。有关End.OP SID的详细介绍,请参见“Segment Routing”中的“SRv6 OAM”。
· End.M SID:用于SRv6 TE Policy尾节点保护场景。有关End.M SID的详细介绍,请参见“Segment Routing配置指导”中的“SRv6 TE Policy”。
· End.T SID:用于Option B跨域VPN场景。有关End.T SID的详细介绍,请参见“Segment Routing配置指导”中的“IP L3VPN over SRv6”和“EVPN L3VPN over SRv6”。
· End.R SID:用于SRv6 VPN网络Option B跨域互通场景。End.R SID对应的转发动作为剥掉外层IPv6头,根据End.R SID查找IPv6 FIB表,并根据查找的结果为报文重新封装外层IPv6头进行转发。有关End.R SID的详细介绍,请参见“Segment Routing配置指导”中的“IP L3VPN over SRv6”。
· 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的长度。
· End.XSID:用于BFD echo检测SRv6 TE Policy指定回程路径的场景,节点行为是采用Encaps封装方式,在BFD echo报文头外封装新的IPv6头和SRH扩展头,并将Local End.XSID封装在SRH扩展头SID列表中SRH[0]的位置。关于BFD echo检测SRv6 TE Policy指定回程路径的场景的详细介绍,请参见“Segment Routing配置指导”中的“SRv6 TE Policy”。
· Src.DT4 SID:用于标识IPv4组播VPN中BIERv6隧道的源地址。Src.DT4 SID用于BIER模式的组播VPN场景,对应的转发动作是解封装报文及查找IPv4表项。有关BIERv6隧道源地址的详细介绍,请参见“IP组播配置指导”中的“组播VPN”。
· Src.DT6 SID:用于标识IPv6组播VPN中BIERv6隧道的源地址。Src.DT6 SID用于BIER模式组播VPN场景,对应的转发动作是解封装报文及查找IPv6表项。有关BIERv6隧道源地址的详细介绍,请参见“IP组播配置指导”中的“组播VPN”。
· End.BIER SID:用于BIERv6场景。有关End.BIER SID的详细介绍,请参见“BIER配置指导”中的“BIER”。
· End.RGB SID:用于MSR6场景。有关End.RGB SID的详细介绍,请参见“BIER配置指导”中的“BIER”。
· End.DX2.AUTO:是一种H3C私有类型的SID,目前仅用于PPPoE over IPv6等接入网业务快速开通场景。End.DX2.AUTO类型的SRv6 SID的转发行为是先记录报文的外层源IP地址和PPPoE报文头中源MAC的关联关系,生成<源IP地址,PPPoE MAC>表项,解封装外层IPv6报文头,然后将剩余报文转发到SID对应的出接口。在PPPoE拨号接入或专线接入等业务场景中,客户侧的CPE设备通常分布广泛且数量巨大。为了快速开通业务,避免现场配置,可以由集中式控制器通过TR-069纳管CPE设备,并向CPE设备下发SGW(Service Gateway,业务网关)的SRv6 SID,即End.DX2.AUTO类型的SRv6 SID。该SID用于标识CPE去往SGW的业务。SGW将作为CPE业务统一出口。以PPPoE上线认证和业务转发流程为例,客户侧的CPE和SGW交互流程如下:
a. CPE上线后通过PPPoE在SGW上进行认证,在PPPoE报文的外层封装IPv6报文头和Ethernet帧头实现PPPoE over IPv6的报文封装。其中,IPv6报文头的目的IP地址为SGW的End.DX2.AUTO类型的SRv6 SID,源地址为CPE自身的业务SID。
b. SGW通过AAA服务器对CPE进行业务认证,并为认证成功的CPE分配PPPoE业务WAN口的地址。此时,SGW记录了PPPoE 的Session ID和外层源IP的映射关系,并根据PPPoE报文的外层封装IPv6报文头中的End.DX2.AUTO类型的SRv6 SID,生成<源IP地址,PPPoE MAC>表项。
c. 认证完成后的SGW获取到AAA服务器分配的相关授权信息,例如速率限制等等。
d. 当CPE接收到内部网络发送的业务报文时,将为原始业务报文封装IPv6报文头和Ethernet帧头,其中,IPv6报文头的目的IP地址为SGW的End.DX2.AUTO类型的SRv6 SID,源地址为CPE自身的业务SID。SGW接收到业务报文后,根据End.DX2.AUTO类型的SRv6 SID的动作,解封装外层IPv6报文头,然后将剩余报文转发到SID对应的L2VE接口,终结L2VPN报文。在L2VE接口对应的L3VE接口绑定的VRF中查表转发。
通过IGP协议通告SR节点的SRv6 SID后,其他SR节点可以根据收到的路由协议报文生成到达该SRv6 SID的路由转发表项。
除节点行为以外,还存在一类SID附加行为(Flavors),这类附加行为可以和一些节点行为结合起来形成一些组合的节点行为,例如节点行为End.X和附加行为PSP组合后变成一种新的节点行为End.X with PSP,这类节点行为结合了两种转发动作,改变了原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):用于G-SID压缩场景,标识本SID之后是G-SID,携带COC附加行为的SID转发时支持“替换”操作,即SRv6报文转发到Endpoint节点上,当本Endpoint节点的Local SID携带COC附加行为,并且当前SID为IPv6目的地址中最后一个SID或G-SID时,则从封装SID的128bit地址空间中取出16bit或32bit的G-SID“替换”到IPv6报文的目的地址的公共前缀之后,根据“替换”后的公共前缀和G-SID组合而成的SID指导G-SRv6报文进行转发。关于“替换”操作的详细说明,请参见“2.4 16bit G-SRv6压缩方案”中报文转发的示意。
COC附加行为在封装报文和转发报文时存在不同含义:
¡ 在封装报文时,用于标识下一个SID是压缩的G-SID,根据压缩的长度又分为16bit的G-SID和32bit的G-SID。
¡ 在转发报文时,携带COC附加行为的SID转发时支持“替换”操作。
· NEXT:标识本SID是16bit压缩的G-SID。携带NEXT附加行为的SID转发时支持“位移”操作,即SRv6报文转发到Endpoint节点上,当本Endpoint节点的Local SID携带NEXT附加行为,并且当前G-SID不是IPv6目的地址中最后一个G-SID时,可以将下一个G-SID“位移”到当前G-SID所在的位置,按照下一个G-SID指导G-SRv6报文进行转发。关于“位移”操作的详细说明,请参见“2.4 16bit G-SRv6压缩方案”中报文转发的示意。
NEXT附加行为在封装报文和转发报文时存在不同含义:
¡ 在封装报文时,用于标识本SID是16bit压缩的G-SID,需要将G-SID封装到SRv6报文中。
¡ 在转发报文时,携带NEXT附加行为的SID转发时支持“位移”操作。
通过IGP或BGP协议发布SRv6 SID时,支持发布具有以下附加行为的SRv6 SID:
· NO-FLAVOR
· PSP
· PSP&USP&USD
· COC
· NEXT
运行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的一种路由扩展头。如图1-3所示,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,以此类推。
图1-3 SRv6的报文封装示意图
如图1-4所示,源节点Device A接收到符合指定特征的报文后,需要通过SRv6路径转发该报文。SRv6路径中Device A为源节点,Device C和Device E为Endpoint节点,Device B和Device D为中转节点。报文通过SRv6路径转发的过程为:
(1) 源节点Device A收到IPv6报文后,执行如下操作:
¡ 封装SRH头。由于从Device A到Device E的路径必须经过C、E两个节点,因此,SRH中SL为2-1,即SL=1,封装的SID列表信息为Segment List [0]=E、Segment List [1]=C。
¡ 封装IPv6基本头。IPv6基本头中的源地址为Device A上的一个地址,目的地址为SL指示的地址,即SL=1对应的Segment List [1](本例中为Device C的地址)。
¡ 根据封装的IPv6头中的目的地址查找路由表,将封装后的报文转发给Device B。
(2) Device B收到报文后,据IPv6头中的目的地址查找路由表,将报文转发给Device C。
(3) Device C收到报文后,执行如下操作:
¡ 检查SRH头中的SL值,如果SL>0,则将SL值减1,目的地址更新为SL指示的地址,即SL=0对应的Segment List [0](本例中为Device E的地址)。
¡ 根据IPv6头中的目的地址查找路由表,将报文转发给Device D。
(4) Device D收到报文后,据IPv6头中的目的地址查找路由表,将报文转发给Device E。
(5) 尾节点Device E收到报文,检查SRH头中的SL值,发现SL=0。对报文进行解封装,删除封装IPv6基本头和SRH,根据原始报文的目的地址进行报文转发。
图1-4 SRv6报文转发示意图
当SRv6隧道建立之后,流量不会自动通过SRv6隧道转发,需要通过如下方法配置流量沿SRv6隧道转发。
使用静态路由转发流量,是指在源节点定义一条通过Tunnel接口到达目的网络地址的静态路由,把流量引入到SRv6隧道上进行转发。
静态路由是将流量引入SRv6隧道的最简便、直观的方法。该方法的缺点是:如果多个目的网络的流量都需要引入到SRv6隧道上,则需要配置多条静态路由,配置和维护难度比较大。
有关静态路由的介绍请参见“三层技术-IP路由配置指导”中的“静态路由”。
自动路由发布是指将SRv6隧道发布到IGP中,让SRv6隧道参与IGP路由的计算,使得流量可以通过SRv6隧道转发。自动路由发布包括以下两种方式:
· IGP Shortcut:也称为自动路由宣告(AutoRoute Announce),该功能将SRv6隧道当作一条直接连接隧道Ingress节点(头节点)和Egress节点(尾节点)的链路,在隧道的Ingress节点上进行IGP路由计算时考虑该SRv6隧道。
· 转发邻接:该功能将SRv6隧道当作一条直接连接隧道Ingress节点和Egress节点的链路,通过IGP路由协议将该链路发布到网络中,以便网络中的节点在路由计算时使用SRv6隧道。
目前仅支持IGP Shortcut功能。
IGP Shortcut和转发邻接功能的区别在于:
· 在隧道的Ingress节点上开启IGP Shortcut功能后,只有Ingress节点计算IGP路由时会考虑SRv6隧道。IGP Shortcut功能不会通过IGP路由协议将SRv6隧道作为一条链路发布出去。因此,其他设备在路由计算时不会考虑SRv6隧道。
· 在隧道的Ingress节点上开启转发邻接功能后,Ingress节点会通过IGP路由协议将SRv6隧道作为一条链路发布出去。因此,IGP网络中的所有设备在路由计算时都会考虑SRv6隧道。
图1-5 IGP Shortcut与转发邻接示意图
在图1-5中,Device D到Device C之间存在一条SRv6隧道,IGP Shortcut只能使Ingress节点Device D在计算IGP路由时利用这条隧道,Device A并不能利用这条隧道到达Device C。如果配置了转发邻接功能,则Device A也能够知道这条SRv6隧道的存在,从而可以利用该隧道将到Device C的流量转发到Device D上。
在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-SID的SRH被称为G-SRH。
G-SRv6对SRv6 SID进行压缩时,H3C当前支持两种G-SRv6压缩方案:
· 16bit G-SRv6压缩方案:128-bit SRv6 SID在SRH中封装时被压缩为16bit G-SID。
· 32bit G-SRv6压缩方案:128-bit SRv6 SID在SRH中封装时被压缩为32bit G-SID。
如图2-1所示,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)。
32bit压缩方案中的G-SID可以从coc32类型的Locator和coc-both类型的Locator中分配。
图2-2 coc32类型的Locator中的G-SID示意图
coc32类型的Locator可以分配带COC标记的SRv6 SID(即End(COC32) SID、End.X(COC32) SID)和不带COC标记的普通SRv6 SID。这些SRv6 SID既可以在静态段内手工指定,也可以通过IGP协议在动态段内自动分配。例如,配置locator test1 ipv6-prefix 100:200:DB8:ABCD:: 64 common-prefix 48 coc32 static 8 args 16时,G-SID包括Node ID、动态段和静态段,其长度固定为32位。此时,SRv6 SID总长度不足128bit,最后32位为MBZ,全部为0。其中:
· Locator为100:200:DB8:ABCD::,长度为64
· 公共前缀长度为48
· 静态段占用8位
· Args占用16位
· 动态段占用8位
· MBZ占32位
由此可以计算出静态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::
图2-3 coc-both类型的Locator中的G-SID示意图
为了更加灵活地分配SRv6 SID,新增一种coc-both类型的Locator,这种Locator中分配的G-SID的Functon部分区分出Compress SID压缩段和Non-Compress SID非压缩段的范围,其中Compress SID压缩段完全继承了coc32类型的Locator的功能,Compress SID压缩段可以动态分配或静态指定带COC附加行为的SID,例如End(COC32)类型的SID和End.X(COC32)类型的SID,也可以动态分配或静态指定不带COC附加行为的SID,例如End(COCNONE)类型的SID和End.X(COCNONE)类型的SID。而Non-Compress SID非压缩段的范围内只能用于分配不带COC附加行为的普通类型SID,例如End类型的SID和End.X类型的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
如图2-4所示,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。
图2-4 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。
如图2-5所示,使用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补齐。
图2-5 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头中的目的地址。
如图2-6所示,在16bit压缩方案中,SRv6 SID同样由Locator、Function和Args三部分构成:
SRv6 SID的Locator部分细分为公共前缀和Node ID,其中:
· Block:表示公共前缀,又称为Locator Block,是G-SRv6报文的压缩冗余部分,长度为Locator部分总长度prefix-length减去16bit;
· Node ID:为节点标识,又称为Locator Node,其长度固定为16bit。Node ID会通过IGP随着Locator发布给域内所有节点,其他节点学习到Block和Node ID组成的Locator路由前缀后可以基于Block和Node ID进行路由寻址。
SRv6 SID的Function部分并不会通过路由发布。因此,Function部分仅在节点本地用于指导报文的转发行为,仅具有本地有意义。类似于coc-both类型的Locator,Function部分细分为压缩Function段(Compressed Function)和非压缩Function段(Non-Compressed Function):
· Compressed Function:压缩Function段,固定长度为16bit,从这段地址空间中可以分配携带COC和NEXT附加行为的G-SID。在固定的16bit压缩Function段中又根据SID的分配方式,分为动态压缩G-SID(Dynamic部分)和静态压缩G-SID(Static部分,Static部分长度可以通过命令指定)。
· Non-Compressed Function:非压缩Function段,这段地址空间中通常用于分配不携带COC附加行为的普通SRv6 SID。
图2-6 16bit压缩方案中的G-SID结构示意图
通常情况下,具有相同公共前缀的SRv6 SID可以进行压缩,只需将G-SID中的16bit Node ID或16bit的压缩Function段作为G-SID封装到G-SRv6报文中即可实现对SRv6报文的压缩。
对于某个SRv6 Endpoint节点,可以将该节点本地SRv6 SID的16bit Node ID部分作为G-SID封装到G-SRv6报文中,也可以将16bit压缩Function段这部分作为G-SID封装到G-SRv6报文中,还可以同时将Node ID部分和压缩Function段都封装到G-SRv6报文中。如图2-7所示,具体的封装方式取决于实际场景:
· 松散显式路径场景:根据上一跳的SID不足以将报文转发到本节点的场景(如图中的R2到R4、R5到R7)。例如,SRv6转发路径上两个Endpoint节点不相邻,上一个Endpoint节点即便使用End.X类型的G-SID也无法将报文转发到本节点,此时,G-SRv6报文封装本节点的G-SID时,必须封装本节点Local SID的Node ID用于路由寻址,再根据业务需求等情况决定是否封装Local SID的Function部分来控制转发行为。
· 严格显式路径场景:根据上一跳的SID能够将报文转发到本节点的场景(如图中的R4到R5)。例如,与本节点相邻的上一节点使用本地End.X类型的G-SID指示转发路径,报文可以根据End.X绑定的出接口和下一跳转发到本节点,此时,G-SRv6报文中仅需封装本节点Local SID的压缩Function部分,而无需封装Node ID,就可以使报文按照Local SID压缩Function部分绑定的转发行为转发报文。
在G-SRv6报文中用于存放G-SID的一个128bit空间称为G-SID的容器即Container,G-SRv6报文IPv6基本报文头中的128bit的目的地址可以作为Container来存放多个G-SID,SRH扩展头中每个128bit的SID也可以作为Container。
当源节点将转发路径上各Endpoint节点的Node ID或压缩Function部分作为16 bits G-SID封装到G-SRv6报文中,H3C通过16 bits G-SID高4bit的16种不同取值来区分该G-SID是Endpoint节点Local SID的Node ID部分还是压缩Function部分。
如图2-8所示,16 bits G-SID高4bit的16种不同取值范围来划分出了两个不重叠的子空间GIB(Global Identifiers Block,全局G-SID空间)和LIB(Local Identifiers Block,本地G-SID空间):
· GIB空间中的G-SID即Endpoint节点Local SID的Node ID部分,缺省情况下,GIB空间中G-SID的高4bit取值为0x0~0xD(即二进制的0000~1101,数量为14),即当G-SID高4bit取值为0x0~0xD时,该G-SID为某个Endpoint节点Local SID的Node ID部分,用来实现Endpoint节点的路由寻址功能。
· LIB空间中的G-SID即Endpoint节点Local SID的Function部分,缺省情况下,LIB空间中G-SID的高4bit取值为0xE~0xF(即二进制的1110~1111,数量为2),即当G-SID高4bit取值为0xE~0xF时,该G-SID为某个Endpoint节点Local SID的压缩Function部分,用来标识和区分Endpoint节点上不同转发指令。
缺省情况下,GIB空间G-SID数量和LIB空间的G-SID数量比例为14:2,,可以通过命令来自定义调整GIB空间和LIB空间的比例。
图2-8 GIB和LIB空间示意图
为了规划和分配16bit压缩的G-SID,H3C定义了一种coc16类型的Locator段。从coc16类型的Locator段地址空间中可以分配16bit压缩的G-SID。根据G-SID分配方式的差异、G-SID携带的附加行为差异,又定义了三种不同模式的coc16类型的Locator,这三种不同模式的Locator的结构均如图2-6所示。
· Default模式的coc16类型Locator:可以从Locator的压缩Function段中分配带COC、NEXT、COC和NEXT等附加行为的G-SID,也可以从压缩Function段中分配不带COC附加行为(即COCNONE)的SID,或者从非压缩Function段分配不携带COC和NEXT附加行为的普通SID。Default模式的coc16类型Locator中可以分配的SID类型和附加行为最全,使用范围最广。
· Next模式的coc16类型Locator:与Default模式的coc16类型Locator的唯一差异是从Locator的压缩Function段中无法分配携带COC附加行为的SID,只能分配携带NEXT附加行为的SID。Next模式的coc16类型Locator只用于分配支持“位移”这种操作的G-SID,仅用于和某些第三方厂商的16bit压缩G-SRv6方案互通。
· Wlib模式的coc16类型Locator:在16bit G-SRv6方案中,由于16bit的压缩Function段地址空间中分配的G-SID需要绑定各种转发指令(Endpoint Behavior)和附加行为可能存在不够用的情况。因此,H3C定义了一种Wlib模式的coc16类型Locator,在Locator段中借用非压缩的Function段中最高16bit来扩展压缩的Function段,使得可分配的地址空间大大扩展。如图2-9所示,扩展的16bit地址空间称为Wide LIB(W-LIB)空间。只有当G-SRv6报文中封装的压缩Function段取8个特定值(该取值可以由命令控制)时,才标识下一个G-SID是从Wlib模式的coc16类型Locator的W-LIB空间中分配,例如G-SRv6报文中封装了一个压缩Function段,其取值为0xFFF0~0xFFF7,表示需要继续读取下一个16bit G-SID,下一个G-SID是从W-LIB空间中分配的,转发报文时,需要将压缩Function段和W-LIB空间G-SID组合后查找Local SID表项来转发报文。从W-LIB空间可以分配携带NEXT附加行为的G-SID,也可以从压缩Function中分配携带NEXT附加行为的G-SID或者不带COC附加行为(即COCNONE)的SID。从压缩Function中分配G-SID时,该压缩Function取值是除了上述特定值以外的值,即图中0xFFF0~0xFFF7以外的其他值。通过locator命令行支持配置压缩Function段的特定值的起始值,同时可以配置指示静态W-LIB空间的起始值。例如,当wlib-start取值为0xFFF0,指定W-LIB空间为静态段的起始值wlib-static为0xFFF4,则压缩Function段取值为0xFFF0~0xFFF3标识的W-LIB空间为动态段,压缩Function段取值为0xFFF4~0xFFF7标识的W-LIB空间为静态段。当前,Wlib模式的coc16类型Locator用于分配用于L3VPN和L2VPN业务的VPN SID。
图2-9 Wlib模式的coc16类型Locator示意图
16bit压缩G-SRv6方案中报文的封装和转发有多种情况和组合,根据G-SRv6报文的封装和封装可以分为三类常用方案:
· NEXT和COC附加行为组合的16bit压缩G-SRv6方案:G-SRv6报文中封装的多个G-SID可以携带COC和NEXT两种附加行为,转发时根据G-SID所携带附加行为执行“位移”和“替换”转发动作。本方案中的报文封装压缩效率相对其他方案更高,但整个转发路径中Endpoint节点都需要统一规划一个公共前缀Block,如果Block变化,则报文封装时需要另外封装一个新的Container携带新的Block,导致压缩效率有所降低。
· 仅支持NEXT附加行为的16bit压缩G-SRv6方案:G-SRv6报文中封装的多个G-SID仅携带NEXT一种附加行为,转发时根据G-SID所携带附加行为执行“位移”转发动作。本方案牺牲了一些报文封装的压缩效率,但整个转发路径中Endpoint节点可以存在不同的公共前缀Block,公共前缀地址的规划灵活性更高。
· 仅支持COC附加行为的16bit压缩G-SRv6方案:G-SRv6报文中封装的多个G-SID仅携带COC一种附加行为,转发时根据G-SID所携带附加行为执行“替换”转发动作。本方案的报文封装和转发过程类似32bit G-SRv6压缩方案,G-SID只封装在SRH头的SID列表中,不再利用IPv6报文的目的地址作为封装G-SID的第一个Container,因此,这种报文封装相对于其他方案报文封装的压缩效率更低。
以上三类方案不需要严格区分,可以根据需求和实际组网情况来组合使用。下面对三种方案进行详细介绍。
16bit压缩G-SRv6报文的封装受到index命令配置控制,G-SID的规划、index命令配置的参数不正确,都会导致G-SRv6报文封装差异,甚至无法实现16bit压缩封装。因此,以下为结合index命令配置对报文封装进行说明。
如图2-10所示,当转发路径为R1到R6,路径上的节点较少,所有节点的16bit G-SID和相同的公共前缀Block长度之和不超过128bit,并且无需SRH扩展头中的flag字段和SRH的TLV时,源节点可以直接将公共前缀Block和G-SID列表封装在IPv6基本头的目的地址这个Container中,而无需封装SRH扩展头,Container中不足128bit的空间以0填充。按照G-SID所在节点距离源节点从近到远的顺序从左往右依次封装G-SID。在执行index命令时,G-SID 0到G-SID 5均需要指定coc-next或next参数,表示G-SID 0到G-SID 5均为16bit压缩的G-SID。
图2-10 NEXT和COC附加行为组合的16bit压缩G-SRv6报文封装示意图
如图2-11所示,当转发路径为R1到R11,路径上的节点较多,所有节点的16bit G-SID和相同的公共前缀Block长度之和超过了128bit,一个Container不足以存放所有G-SID,此时源节点可以将公共前缀Block和G-SID列表封装在IPv6基本头的目的地址中,超出128bit的其他G-SID需要封装在SRH扩展头的SID列表中。在SID列表的第一个Container中,无需封装公共前缀Block,仅按照距离源节点从近到远的顺序,从右往左依次封装G-SID。在执行index命令时,G-SID 0到G-SID 4均需要指定coc-next或next参数。对于Container中最后一个G-SID 5,其下一个SID仍为16bit压缩G-SID,因此该G-SID必须携带COC附加行为,即index命令中指定coc或coc-next参数。对于G-SID 6到G-SID 9,每个G-SID的下一个G-SID也是16bit压缩G-SID,因此,index命令中这些G-SID必须指定coc或coc-next参数。SID列表中最后一个G-SID 10根据下一个SID是否为压缩的G-SID决定是否携带COC附加行为。Container中不足128bit的空间以0填充,16bit连续为0的空间称为EOC(End of Container,容器结束标识),标识当前Container后续空间中不存在有效的G-SID。
图2-11 NEXT和COC附加行为组合的16bit压缩G-SRv6报文封装示意图
以图2-11报文封装的场景为例,介绍本方案的G-SRv6报文转发流程。需要注意的是,G-SRv6报文转发流程的关键取决于Local SID所携带的附加行为,只有本地Endpoint节点配置了携带合适的附加行为的SID才能实现G-SRv6报文正常转发。
G-SRv6报文转发流程中最关键的步骤执行是“位移”和“替换”两个转发动作。具体转发流程如下:
(1) 在源节点R1上,G-SRv6报文完成封装后,R1根据报文的IPv6报文的目的地址查找路由表项,按照最长掩码匹配发现Block+G-SID 0为R2节点的Locator地址网段,因此,根据路由表中对应的出接口和下一跳将报文转发到节点R2。
(2) 节点R2按照最长掩码匹配发现Block+G-SID 0+G-SID 1为本地End.X SID,并且该SID携带了NEXT附加行为,于是执行“位移”操作,如图2-12所示,将Container中G-SID 1之后的其他G-SID往前“位移”到公共前缀Block之后,Container最后若干位填充0生成EOC。R2按照End.X SID绑定的出接口将报文转发到节点R3。
(3) 对于所有16bit压缩转发路径上Endpoint节点都存在一种特殊的本地G-SID表项,与普通Local SID不同的是,本地G-SID表项中的G-SID可以由公共前缀Block+压缩Function段生成,也可以公共前缀Block+压缩Function段+Wlib空间生成,而无需Node ID部分。节点R3按照最长掩码匹配发现目的地址Block+G-SID 2是本地G-SID表项,绑定的转发行为也是End.X,并且G-SID携带了NEXT附加行为,因此,R3将Container中G-SID 2之后的其他G-SID往前“位移”到公共前缀Block之后,Container最后若干位填充0生成EOC。R3按照End.X SID绑定的出接口将报文转发到节点R4。
(4) 节点R4、R5重复执行上述步骤,直到G-SRv6报文转发到节点R6。R6按照最长掩码匹配规则发现IPv6目的地址Block+G-SID 5是本地G-SID表项,并且该G-SID携带了COC附加行为,表示下一个SID仍为16bit压缩G-SID。G-SID 5是当前Container中最后一个G-SID,G-SID 5之后为全0的EOC。如图2-13所示,R6将目的地址的最后3bit作为CI(Compressed-SID Index)标记位,设置值为7,CI用于标识Container中G-SID 6所在的位置,取值范围为0~7。再按照COC附加行为执行“替换”操作,按照CI指示,从SID[0]这个Container中取出16bit的G-SID 6“替换”到目的地址Block之后。最后R6根据Block+G-SID 5绑定的End.X转发行为,将报文从出接口转发到R7。
(5) 节点R7到R10重复执行R6的步骤,直到G-SRv6报文转发到R11,R11作为尾节点,G-SID 10是Container中最后一个SID,当前Container结束,由于SL当前已为0,因此,结束SRv6报文处理,按照G-SID 10对应的转发行为解封装SRv6报文,查询VPN路由表,将解封装后的报文转发到VPN中。如果G-SID 10的转发行为是End或End.X,且SL大于0,G-SID 10还携带了COC附加行为,此时R11会将CI置为2,由于CI指示的位置为全0的EOC,表示当前Container结束,先将SL值减1,并将CI重置为7,从下一个Container对应位置中取出G-SID。如果G-SID 10未携带了COC附加行为,则下一个SID是普通的128bitSID,按照正常SRH处理逻辑,转发报文。
图2-12 根据SID携带的NEXT附加行为执行“位移”操作示意图
图2-13 根据SID携带的COC附加行为执行“替换”操作示意图
类似NEXT和COC附加行为组合的16bit压缩G-SRv6方案,以下结合index命令配置对报文封装进行说明。
方案二报文封装类似方案一,如果转发节点较少且拥有相同的公共前缀Block的情况下,可以将G-SID和公共前缀Block封装在IPv6基本头的目的地址中,无需封装SRH。当转发路径上的节点较多或者转发路径上节点存在不同的公共前缀Block,则必须要封装SRH扩展头。
如图2-14所示,从节点R1到节点R11存在3个不同的公共前缀Block,R2~R5公共前缀为Block 1,R6~R8公共前缀为Block 2,R9~R11公共前缀为Block 3。封装G-SRv6报文时,需要将不同公共前缀Block分别封装在三个Container中。类似方案一的报文封装,在执行index命令时,G-SID 0到G-SID 3、G-SID 5到G-SID 6、G-SID 8到G-SID 9均需要指定coc-next或next参数使G-SID从左往右依次封装在带Block的Container中。但需要注意的是每个Container的最后一个G-SID均不允许指定coc或coc-next参数,否则,下一个G-SID无法正常封装。带Block的Container不足128bit的最低位将用0填充,生成EOC。
图2-14 方案二的16bit压缩G-SRv6报文封装示意图
以图2-14所示场景为例介绍报文转发的流程。请注意G-SRv6报文转发流程的关键取决于Local SID所携带的附加行为,只有本地Endpoint节点配置了携带合适的附加行为的SID才能实现G-SRv6报文正常转发。
本方案中,G-SRv6报文转发流程中只执行“位移”动作,而无需执行“替换”转发动作。具体转发流程如下:
(1) 在源节点R1上,G-SRv6报文完成封装后,R1根据报文的IPv6报文的目的地址查找路由表项,按照最长掩码匹配发现Block 1+G-SID 0为R2节点的Locator地址网段,因此,根据路由表中对应的出接口和下一跳将报文转发到节点R2。
(2) 节点R2按照最长掩码匹配发现Block 1+G-SID 0+G-SID 1为本地End.X SID,并且该SID携带了NEXT附加行为,于是执行“位移”操作,将Container中G-SID 1之后的其他G-SID往前“位移”到公共前缀Block 1之后,Container最后若干位填充0生成EOC。R2按照End.X SID绑定的出接口将报文转发到节点R3。
(3) 对于所有16bit压缩转发路径上Endpoint节点都存在一种特殊的本地G-SID表项,与普通Local SID不同的是,本地G-SID表项中的G-SID可以由公共前缀Block+压缩Function段生成,也可以公共前缀Block+压缩Function段+Wlib空间生成,而无需Node ID部分。节点R3按照最长掩码匹配发现目的地址Block 1+G-SID 2是本地G-SID表项,绑定的转发行为也是End.X,并且G-SID携带了NEXT附加行为,因此,R3将Container中G-SID 2之后的其他G-SID往前“位移”到公共前缀Block之后,Container最后若干位填充0生成EOC。R3按照End.X SID绑定的出接口将报文转发到节点R4。
(4) 节点R4重复执行上述步骤,直到G-SRv6报文转发到节点R5。R5按照最长掩码匹配规则发现IPv6目的地址Block+G-SID 4是本地G-SID表项,并且该G-SID未携带COC附加行为,表示下一个SID为128bit普通的SID。G-SID 4是当前Container中最后一个G-SID,G-SID 4之后为全0的EOC。此时,SL等于1,R5将SID[1]更新到目的地址中,再将SL减1。最后R5根据Block+G-SID 4绑定的End.X转发行为,将报文从出接口转发到R6。
(5) 节点R6到R10重复上述的转发,直到G-SRv6报文转发到R11,R11作为尾节点,G-SID 10是Container中最后一个SID,当前Container结束,由于SL当前已为0,因此,结束SRv6报文处理,按照G-SID 10对应的转发行为解封装SRv6报文,查询VPN路由表,将解封装后的报文转发到VPN中。
类似NEXT和COC附加行为组合的16bit压缩G-SRv6方案,以下结合index命令配置对报文封装进行说明。
如图2-15所示,在源节点R1执行index命令进行G-SRv6报文封装时,SID列表中的首个SID 0必须指定coc参数携带COC附加行为,但不进行压缩,COC标识了下一个SID为16bit G-SID 1,需要压缩放置在下一Container中。对于G-SID 1到G-SID 7,每个G-SID的下一个SID也是16bit压缩G-SID,因此,这些G-SID必须指定coc或coc-next参数,这些G-SID按照距离源节点从近到远的顺序,从右往左依次封装在下一个Container中。如果Container中未被G-SID占满,不足128bit的空间以0填充,16bit连续为0的空间称为EOC(End of Container,容器结束标识),标识当前Container后续空间中不存在有效的G-SID。SID列表中最后一个G-SID 8根据下一个SID是否为16bit压缩的G-SID确定是否携带COC附加行为。图中,G-SID 8未指定coc参数,表示下一个SID 9为128bit的普通End.DT4 SID。
图2-15 方案三的16bit压缩G-SRv6报文封装示意图
按图2-15所示场景为例,介绍报文转发的流程。请注意G-SRv6报文转发流程的关键取决于Local SID所携带的附加行为,只有本地Endpoint节点配置了携带合适的附加行为的SID才能实现G-SRv6报文正常转发。
本方案中,G-SRv6报文转发流程中只执行“替换”转发动作,而不执行“位移”转发动作。具体转发流程如下:
(1) 在源节点R1上,G-SRv6报文完成封装后,SL=2,R1将SID[2]替换到IPv6报文的目的地址上,按照最长掩码匹配发现End.X SID 0为本地Local SID,且携带了COC附加行为,表示下一个SID为16bit压缩G-SID,SID 0为当前Container中最后一个SID。因此,R1将目的地址的最后3bit作为CI(Compressed-SID Index)标记位,设置值为7,CI用于标识Container中G-SID 1所在的位置,取值范围为0~7。再按照COC附加行为执行“替换”操作,按照CI指示,从SID[1]这个Container中取出16bit的G-SID 1“替换”到目的地址Block之后。最后根据End.X SID 0对应的出接口和下一跳将报文转发到节点R2。
(2) 节点R2按照最长掩码匹配发现Block+G-SID 1为本地End.X SID,并且该SID携带了COC附加行为,表示下一个SID为16bit压缩G-SID,此时CI=7,于是将CI值减1,再执行“替换”操作,从当前CI指示的位置取出G-SID 2“替换”到目的地址Block之后。R2按照End.X SID绑定的出接口将报文转发到节点R3。
(3) 从节点R3到节点R8都重复执行上述节点R2的转发动作,直到报文转发到节点R9时CI=0,表示G-SID 8是Container中的最后一个G-SID。G-SID 8未携带COC附加行为,表示下一个SID 9为128bit普通SID。此时SL-1=0,R9将SID[0]复制到IPv6报文的目的地址上,并根据G-SID 8绑定的出接口将报文转发到节点R10。
(4) R10作为尾节点,并且当前SL=0,因此,结束SRv6报文处理,按照SID 9对应的转发行为End.DT4解封装SRv6报文,查询VPN路由表,将解封装后的报文转发到VPN中。
三种16bit压缩G-SRv6报文封装和转发方案、32bit压缩G-RSv6方案以及非压缩的普通的SRv6报文封装方式可以组合使用,具体报文如何封装和转发,取决于实际业务需求、index命令以及本地SID配置。本章节仅列举三种差异较大且主流的16bit压缩G-SRv6报文封装和转发方案,无法尽述其他报文封装和转发方案。
通过扩展的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时支持自动分配和手工指定两种方式。如图3-1所示,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。
图3-1 BGP-EPE示意图
如图3-1所示,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对等体间交换路由信息类型的影响。
如图3-2所示,控制器通过BGP-LS上报的链路信息可以合理编排IGP SID和BGP-EPE为域间路径分配的BGP Peer SID,生成跨域转发路径。通常情况下,跨域的两台设备Device A与Device B是直连的,两者通过直连接口建立EBGP邻居,此时,Device A上报给控制器的BGP-LS Link NLRI中本地地址为100::1,对端地址为下一跳100::2,相应地Device B上报给控制器的BGP-LS Link NLRI中本地地址为100::2,对端地址为下一跳100::1,控制器发现Device A和Device B通告的远端地址属于同网段,且Device A的本端地址和Device B的对端地址一致,因此拼接出一条直连的跨域链路,并基于这条跨域链路来编排SID,形成完整的跨域转发路径。
当跨域的两台设备为非直连的Device A与Device D时,Device A和Device D通过Loopback口正常建立EBGP邻居。Device A上报给控制器的BGP-LS Link NLRI中本地地址为Loopback口地址1::1,对端地址为去往对端Loopback口的下一跳100::2,相应地Device D上报给控制器的BGP-LS Link NLRI中本地地址为4::4,对端地址为200::1。此时,Device A和Device D的远端地址既不属于同网段,Device A的本地地址和Device D的远端地址也不相同,控制器无法通过BGP-LS Link NLRI中的地址信息拼接出一条完整的跨域链路。
图3-2 BGP虚链路组网示意图
为了使控制器可以为非直连的Device A与Device D跨域链路编排SID,生成完整的跨域转发路径,可以在Device A与Device D上开启BGP虚链路功能,此时,Device A上报给控制器的BGP-LS Link NLRI中本地地址为Loopback口地址1::1,对端地址为Device D的Loopback口地址4::4,相应地Device D上报给控制器的BGP-LS Link NLRI中本地地址为4::4,对端地址为1::1。本地地址与对端匹配。控制器拼接出一条无实际拓扑,但路由可达的虚链路。
在AS域内扩展的IGP协议可以携带链路的属性信息,利用这些链路属性信息运行IGP协议的设备可以通过CSPF(Constraint-based Shortest Path First,基于约束的最短路径优先)算法实现TE(Traffic Engineering,流量工程)能力。
在由控制器计算最优跨域路径的场景中,用户也需要基于域内和域间链路的链路属性来实现TE能力。因此,BGP-LS协议使用Link Attribute TLV来携带各类链路属性信息。Link Attribute TLV中部分链路属性信息如图3-3所示。
表3-1 Link Attribute TLV的链路属性信息说明
字段 |
说明 |
Link NLRI |
该BGP-LS的链路网络可达信息,该信息下可以携带Link Attribute TLV |
Link Attribute TLV |
Link Attribute TLV的种类包括,但不限于以下类型: · Administrative group (color):亲和属性值,TLV Type值为1088,可以看作是链路颜色 · TE Metric:TE度量值,TLV Type值为1092 · Shared Risk Link Group:共享风险链路组,具有相同故障风险的一组链路的集合,TLV Type值为1096 · Unidirectional Link Delay:平均链路时延,TLV Type值为1114 · Min/Max Unidirectional Link Delay:最小/最大链路时延,TLV Type值为1115 · Unidirectional Delay Variation:链路时延容差,TLV Type值为1116 |
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备份路径。
如图4-1所示,数据报文需要从节点A发往节点F。当节点B和节点E之间发生故障后,节点B将数据报文转发给节点C。由于节点C和节点D之间开销是100,且节点C上路由还未收敛,因此节点C认为到达节点F的最优路径的下一跳是节点B。节点C将数据报文重新转回到节点B,形成环路。
图4-1 TI-LFA应用场景示意图
在SRv6网络中部署TI-LFA,可以解决上述问题。如图4-2所示,当节点B和节点E之间发生故障后,节点B启用TI-LFA计算的备份路径,为报文指定显式路径B->C->D->E,保证报文可以沿着备份路径转发。
图4-2 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节点。
图4-3 TI-LFA FRR相关概念示意图
如图4-4所示,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。如图4-4所示,Repair List为P 2和P 3间链路的End.X SID C、P 3和P 4间链路的End.X SID D。
(5) 计算备份出接口:PE 1到P 1链路故障后的下一跳出接口。
图4-4 TI-LFA典型组网图
TI-LFA备份路径计算完成之后,如果主路径发生故障,就可以根据备份路径进行转发,避免流量丢失。
如图4-5所示,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。
图4-5 TI-LFA FRR备份路径转发流程图
如图4-6所示,当Device B故障时,到Device C的流量将切换到TI-LFA计算的备份路径转发。Device A收敛后,到Device C的流量将沿着收敛后路径转发。此时,如果Device D和Device F还没有收敛,仍按照收敛前的路径转发流量,则Device A到Device F之间形成环路。
通过FRR正切防微环功能和SR防微环功能可以解决上述问题。在Device A上开启该功能后,可以使Device A延迟一段时间收敛,在此期间使用SR防微环功能计算的路径转发流量。等待Device D和Device F收敛完成后,Device A再开始收敛。Device A收敛完成后,到Device C的流量沿将着收敛后路径转发,从而避免发生环路。
如图4-7所示,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
standard工作模式下,仅以下表格中的单板支持本功能。
表6-1 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200-E |
sdn-wan工作模式下,仅以下表格中的单板支持本功能。
表6-2 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-XP4LX、CEPC-XP24LX、CEPC-XP48RX、CEPC-CP4RX、CEPC-CP4RXA、CEPC-CP4RX-L、CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1304X、CSPEX-1404X、CSPEX-1502X、CSPEX-1504X、CSPEX-1504XA、CSPEX-1602X、CSPEX-1602XA、CSPEX-1804X、CSPEX-1512X、CSPEX-1612X、CSPEX-1812X、CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200、RX-SPE200-E |
OAA单板 |
IM-NGFWX-IV |
在SRv6 End.DT4/End.DT6/End.DT46场景下,当需要在PE设备上配置跨VPN静态路由方式实现不同VPN(或VPN与公网)之间的流量互通时,推荐将静态路由的下一跳地址设置为本端PE接入的CE设备接口地址。例如在“CE1(接口1)---(接口2)PE1(接口3)---(接口4)PE2(接口5)---(接口6)CE2”网络拓扑中,对于从PE1到PE2方向的流量,在PE2上配置跨VPN静态路由应指定下一跳为PE2直连的CE2设备上(接口6)的IP地址。
SRv6配置任务如下:
(1) 配置SRv6 SID
¡ 配置G-SID
SRv6节点的SID需要压缩时,本功能必选。
(2) (可选)管理SRv6 SID
(5) 配置BGP-EPE
在跨域组网部署BGP for SRv6时,本功能必选。
(6) (可选)配置TI-LFA FRR
(7) (可选)配置SRv6的MTU
(8) (可选)配置SRv6的差分服务模式
(9) (可选)开启SRv6模块的告警功能
在配置SRv6之前,需完成以下任务:
· 确定SRv6隧道的源节点、中间节点和尾节点。
· 规划节点的IP地址。
不同Locator的名称不能相同。
不能为不同Locator配置相同的IPv6地址前缀和前缀长度,且不同Locator的IPv6地址前缀不能有重叠部分。
SRv6视图下的Locator段内存在正在被使用的动态SRv6 SID时,不能关闭SRv6功能和删除该Locator段。
普通类型的Locator和Next模式、Default模式coc16类型的Locator支持互相修改,即无需删除已配置的Locator段,重新配置一遍Locator段时调整参数即可。修改的规则如下:
· 支持将普通类型的Locator修改为Next模式、Default模式coc16类型的Locator,修改时仅需要重新配置该Locator并指定compress-16和non-compress-static参数,其他参数不允许修改。
· 支持将Next模式、Default模式coc16类型的Locator修改为普通类型的Locator,修改时仅需要重新配置该Locator并不再指定compress-16和non-compress-static参数,按照普通类型的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。
仅以下表格中的单板支持End.DX2.AUTO类型SRv6 SID。
表6-3 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200-E |
(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 | usp-usd }
¡ 配置End.X SID。
opcode { opcode | hex hex-opcode } end-x interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd | usp-usd } [ path-index index-value | weight weight-value ] *
对于End.X类型的SRv6 SID,如果指定的出接口类型为Tunnel口,目前仅支持模式为GRE over IPv4、IPsec over IPv4和IPsec over IPv6的Tunnel隧道口。
可以通过path-index和weight参数来为同一opcode值,指定不同的出接口和下一跳,这些不同出接口对应的End.X SID为Parallel SID(平行SID)。通过该SID指导报文转发时,可以在多个出接口间基于权重,即weight值进行负载分担。
¡ 配置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 service-instance instance-id
指定的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 service-instance instance-id
指定的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.OP SID。
opcode { opcode | hex hex-opcode } end-op
¡ 配置End.M SID。
opcode { opcode | hex hex-opcode } end-m mirror-locator ipv6-address prefix-length
¡ 配置End.DX2.AUTO类型SRv6 SID。
opcode { opcode | hex hex-opcode } end-dx2-auto interface ve-l2vpn { interface-number | interface-number.subnumber }
在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前缀也不能相同、不能重叠。
指定compress-16参数时,远端Locator段的类型必须是coc16的类型Locator,并且根据指定的next参数和next-wlib参数引用对应模式的coc16的类型Locator。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 配置远端Locator段,并进入远端Locator视图。请选择其中一项进行配置。
¡ 引用普通类型的Locator段,并进入远端Locator视图。
remote-locator remote-locator-name [ ipv6-prefix ipv6-address prefix-length [ args args-length | static static-length ] * ]
¡ 引用Default模式的coc16类型的Locator段,并进入远端Locator视图。
remote-locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 [ non-compress-static non-compress-static-length ] [ args args-length | static static-length ] * ]
¡ 引用Next模式的coc16类型的Locator段,并进入远端Locator视图。
remote-locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 next [ non-compress-static non-compress-static-length ] [ args args-length | static static-length ] * ]
¡ 引用Wlib模式的coc16类型的Locator段,并进入远端Locator视图。
remote-locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 next-wlib [ wlib-start wlib-start-value ] [ wlib-static-start wlib-static-value ] [ 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 [ args args-length | static static-length ] * ]
(5) 配置Opcode段。
¡ 配置其他Opcode段。
具体配置请参见“配置普通SRv6 SID”。
¡ 配置End SID。
opcode opcode end-coc32 { no-flavor | psp }
¡ 配置End.X SID。
opcode opcode end-x-coc32 interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-address { no-flavor | psp } [ path-index index-value | weight weight-value ] *
对于End.X(COC32)类型的SRv6 SID,如果指定的出接口类型为Tunnel口,目前仅支持模式为GRE over IPv4、IPsec over IPv4和IPsec over IPv6的Tunnel隧道口。
可以通过path-index和weight参数来为同一opcode值,指定不同的出接口和下一跳,这些不同出接口对应的End.X(COC32) SID为Parallel SID(平行SID)。通过该SID指导报文转发时,可以在多个出接口间基于权重,即weight值进行负载分担。
在支持压缩与非压缩共存的coc-both类型Locator段下,可以为压缩的静态SID和非压缩的静态SID指定相同opcode值。
coc-both类型的Locator和Next模式、Default模式coc16类型的Locator支持互相修改,即无需删除已配置的Locator段,重新配置一遍Locator段时调整参数即可。修改的规则如下:
· 支持将coc-both类型的Locator修改为Next模式、Default模式coc16类型的Locator,修改时仅需要按照Next模式或Default模式coc16类型的Locator命令重新配置该Locator并指定compress-16参数。修改为coc16类型的Locator时还可以调整static-length参数,其他参数不支持修改。
· 支持将Next模式、Default模式coc16类型的Locator修改为coc-both类型的Locator,修改时仅需要按照coc-both类型的Locator的命令重新配置该Locator并不再指定compress-16参数。修改为coc16类型的Locator时还可以调整static-length参数,其他参数不支持修改。
coc16类型的Locator和其他类型的Locator互相修改时需要注意,如果该SRv6 Locator视图下配置了静态Opcode,则不允许不同类型的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) 开启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段。
具体配置请参见“配置普通SRv6 SID”。
¡ 配置End(COCNONE) SID。
opcode { opcode | hex hex-opcode } end-coc-none { no-flavor | psp | psp-usp-usd | 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 [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd | usp-usd } [ path-index index-value | weight weight-value ] *
End.X(COCNONE) SID从压缩段空间内分配,作用同End.X SID。
对于End.X(COCNONE)类型的SRv6 SID,如果指定的出接口类型为Tunnel口,目前仅支持模式为GRE over IPv4、IPsec over IPv4和IPsec over IPv6的Tunnel隧道口。
可以通过path-index和weight参数来为同一opcode值,指定不同的出接口和下一跳,这些不同出接口对应的End.X(COCNONE) SID为Parallel SID(平行SID)。通过该SID指导报文转发时,可以在多个出接口间基于权重,即weight值进行负载分担。
指定compress-16参数的Locator为coc16类型的Locator。这类Locator用于16bit G-SRv6场景中分配SID,coc16类型的Locator可以分为:
· Default模式的Locator:未指定next参数的Locator。可以分配带COC附加行为、NEXT附加行为、COC&NEXT附加行为的G-SID或不携带COC和NEXT附加行为的普通SID,适用于所有16bit压缩G-SRv6封装方案。
· Next模式的Locator:指定next参数的Locator。用于分配不带COC附加行为仅携带NEXT附加行为的G-SID或不携带COC和NEXT附加行为的普通SID。H3C设备对接某些第三方设备时,如果第三方设备仅支持“位移”操作的16bit压缩G-SRv6封装方案,可以配置Next模式的Locator用于分配SID。
· Wlib模式的Locator:指定了next-wlib参数的Locator,可以从扩展出W-LIB空间中分配携带NEXT附加行为的G-SID或者从压缩Function中分配携带NEXT附加行为的G-SID。目前Wlib模式的Locator中W-LIB空间主要用于分配VPN业务的SID。
coc-both类型的Locator和Next模式、Default模式coc16类型的Locator支持互相修改,即无需删除已配置的Locator段,重新配置一遍Locator段时调整参数即可。修改的规则如下:
· 支持将coc-both类型的Locator修改为Next模式、Default模式coc16类型的Locator,修改时仅需要按照Next模式或Default模式coc16类型的Locator命令重新配置该Locator并指定compress-16参数。修改为coc16类型的Locator时还可以调整static-length参数,其他参数不支持修改。
· 支持将Next模式、Default模式coc16类型的Locator修改为coc-both类型的Locator,修改时仅需要按照coc-both类型的Locator的命令重新配置该Locator并不再指定compress-16参数。修改为coc16类型的Locator时还可以调整static-length参数,其他参数不支持修改。
coc16类型的Locator和其他类型的Locator互相修改时需要注意,如果该SRv6 Locator视图下配置了静态Opcode,则不允许不同类型的Locator互相修改。
对于Wlib模式的Locator,如果需要从W-LIB空间中分配Opcode操作码,则在执行opcode命令配置End.DT4等VPN业务相关SID时,指定的opcode或十六进制hex-opcode需要先包含locator命令中的wlib-static-value~wlib-start-value+7值之一,再指定W-LIB空间中的操作码,此时,建议采用十六进制hex-opcode参数配置Opcode操作码。例如wlib-start-value取值为0xFFF3,wlib-static-value取值为0xFFF7,则hex-opcode应该先指定FFF7~FFFA中的一个值,再指定W-LIB空间中分配Opcode操作码。
仅以下表格中的单板支持16bit G-SRv6压缩功能。
表6-4 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200-E |
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6压缩功能。
srv6 compress enable
缺省情况下,SRv6压缩功能处于关闭状态。
(4) 配置Default模式的Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 [ non-compress-static non-compress-static-length ] [ args args-length | static static-length ] * ]
(5) 配置Opcode段,即静态指定SRv6 SID并指定SID的转发行为和附加行为。
¡ 配置从非压缩Function段中分配普通SRv6 SID,普通SRv6 SID不会携带COC和NEXT附加行为。
具体配置请参见“配置普通SRv6 SID”。
¡ 配置从压缩Function段中分配携带COC或NEXT附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end compress { coc | coc-next | next | psp-coc | psp-usd-next | usp-usd-coc-next }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address compress { coc | coc-next | next | psp-coc | psp-usd-next | psp-usp-usd-coc-next | usp-usd-coc-next }
SID的转发指令为End.X。
opcode { opcode | hex hex-opcode } end-dt4 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress { next | coc-next }
SID的转发指令为End.DT4。
opcode { opcode | hex hex-opcode } end-dt46 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress { next | coc-next }
SID的转发指令为End.DT46。
opcode { opcode | hex hex-opcode } end-dt6 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress { next | coc-next }
SID的转发指令为End.DT6。
opcode { opcode | hex hex-opcode } end-dx4 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress { next | coc-next }
SID的转发指令为End.DX4。
opcode { opcode | hex hex-opcode } end-dx6 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress { next | coc-next }
SID的转发指令为End.DX6。
opcode { opcode | hex hex-opcode } end-dx2 xconnect-group group-name connection connection-name compress { next | coc-next }
SID的转发指令为End.DX2。
opcode { opcode | hex hex-opcode } end-dx2l xconnect-group group-name connection connection-name compress { next | coc-next }
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dx2l vsi vsi-name interface interface-type interface-number service-instance instance-id compress { next | coc-next }
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dt2m vsi vsi-name compress { next | coc-next }
SID的转发指令为End.DX2M。
opcode { opcode | hex hex-opcode } end-dt2u vsi vsi-name compress { next | coc-next }
SID的转发指令为End.DX2U。
opcode { opcode | hex hex-opcode } end-dt2ul vsi vsi-name compress { next | coc-next }
SID的转发指令为End.DX2UL。
¡ 配置从压缩Function段中分配不携带COC附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end-coc-none { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x-coc-none interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End.X。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6压缩功能。
srv6 compress enable
缺省情况下,SRv6压缩功能处于关闭状态。
(4) 配置Next模式的Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 next [ non-compress-static non-compress-static-length ] [ args args-length | static static-length ] * ]
(5) 配置Opcode段,即静态指定SRv6 SID并指定SID的转发行为和附加行为。
¡ 配置从非压缩Function段中分配普通SRv6 SID,普通SRv6 SID不会携带COC和NEXT附加行为。
具体配置请参见“配置普通SRv6 SID”。
¡ 配置从压缩Function段中分配携带NEXT附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end compress { next | psp-usd-next }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address compress { next | psp-usd-next }
SID的转发指令为End.X。
opcode { opcode | hex hex-opcode } end-dt4 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT4。
opcode { opcode | hex hex-opcode } end-dt46 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT46。
opcode { opcode | hex hex-opcode } end-dt6 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT6。
opcode { opcode | hex hex-opcode } end-dx4 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress next
SID的转发指令为End.DX4。
opcode { opcode | hex hex-opcode } end-dx6 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress next
SID的转发指令为End.DX6。
opcode { opcode | hex hex-opcode } end-dx2 xconnect-group group-name connection connection-name compress next
SID的转发指令为End.DX2。
opcode { opcode | hex hex-opcode } end-dx2l xconnect-group group-name connection connection-name compress next
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dx2l vsi vsi-name interface interface-type interface-number service-instance instance-id compress next
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dt2m vsi vsi-name compress next
SID的转发指令为End.DX2M。
opcode { opcode | hex hex-opcode } end-dt2u vsi vsi-name compress next
SID的转发指令为End.DX2U。
opcode { opcode | hex hex-opcode } end-dt2ul vsi vsi-name compress next
SID的转发指令为End.DX2UL。
¡ 配置从压缩Function段中分配不携带COC附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end-coc-none { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x-coc-none interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End.X。
(1) 进入系统视图。
system-view
(2) 开启SRv6功能,并进入SRv6视图。
segment-routing ipv6
(3) 开启SRv6压缩功能。
srv6 compress enable
缺省情况下,SRv6压缩功能处于关闭状态。
(4) 配置Wlib模式的Locator段,并进入SRv6 Locator视图。
locator locator-name [ ipv6-prefix ipv6-address prefix-length compress-16 next-wlib [ wlib-start wlib-start-value ] [ wlib-static-start wlib-static-value ] [ args args-length | static static-length ] * ]
(5) 配置Opcode段,即静态指定SRv6 SID并指定SID的转发行为和附加行为。
¡ 配置从扩展的W-LIB空间中分配携带NEXT附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end-dt4 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT4。
opcode { opcode | hex hex-opcode } end-dt46 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT46。
opcode { opcode | hex hex-opcode } end-dt6 [ vpn-instance vpn-instance-name [ evpn | l3vpn-evpn ] ] compress next
SID的转发指令为End.DT6。
opcode { opcode | hex hex-opcode } end-dx4 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress next
SID的转发指令为End.DX4。
opcode { opcode | hex hex-opcode } end-dx6 interface interface-type interface-number nexthop nexthop-ipv4-address [ vpn-instance vpn-instance-name [ evpn ] ] compress next
SID的转发指令为End.DX6。
opcode { opcode | hex hex-opcode } end-dx2 xconnect-group group-name connection connection-name compress next
SID的转发指令为End.DX2。
opcode { opcode | hex hex-opcode } end-dx2l xconnect-group group-name connection connection-name compress next
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dx2l vsi vsi-name interface interface-type interface-number service-instance instance-id compress next
SID的转发指令为End.DX2L。
opcode { opcode | hex hex-opcode } end-dt2m vsi vsi-name compress next
SID的转发指令为End.DX2M。
opcode { opcode | hex hex-opcode } end-dt2u vsi vsi-name compress next
SID的转发指令为End.DX2U。
opcode { opcode | hex hex-opcode } end-dt2ul vsi vsi-name compress next
SID的转发指令为End.DX2UL。
¡ 配置从压缩Function段中分配不携带COC附加行为的SRv6 SID。
opcode { opcode | hex hex-opcode } end compress { next | psp-usd-next }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address compress { next | psp-usd-next }
SID的转发指令为End.X。
opcode { opcode | hex hex-opcode } end-coc-none { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End。
opcode { opcode | hex hex-opcode } end-x-coc-none interface interface-type interface-number [ member-port interface-type interface-number ] nexthop nexthop-ipv6-address { no-flavor | psp | psp-usp-usd | usp-usd }
SID的转发指令为End.X。
执行本功能可以配置GIB空间范围的长度,例如配置GIB长度为8,则LIB长度等于16-8=8,GIB和LIB的各有8个取值,执行locator命令配置coc16类型的Locator段时,Node ID的高4 bit范围是0x0~0x7(0000~0111);相应的压缩Function的高4 bit的范围是0x8~0xF(1000~1111)。
请保证全网所有设备,包括非压缩的设备的GIB一致。
配置coc16类型的Locator后,GIB的长度不能修改,请先删除coc16类型的Locator,再修改GIB的长度。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置GIB的长度。
csid-proportion global-id-block gib-proportion-value
缺省情况下,GIB的长度为14。
OSPFv3或IS-IS邻居关系震荡,为设备间链路动态分配的End.X SID会频繁地删除和申请,从而导致邻居间丢包。为了解决上述问题,可以配置本功能,当设备间邻居关系断开时,暂不删除动态分配的End.X SID,保证流量正常转发。当达到延迟删除时间后,如果设备间邻居关系仍然处于断开状态,则删除动态分配的End.X SID。
执行以下操作后,不会等待延迟时间,将立即删除动态分配的End.X SID:
· 执行reset ospfv3 process命令。有关本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“OSPFv3”。
· 执行reset isis all命令。有关本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“IS-IS”。
· 接口删除,如接口板拔出、删除子接口和删除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表。
通过引用Locator段,IGP协议可以通告指定的Locator网段和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 ] [ member-port-enable ] [ cost cost-value ] [ tag tag-value ] [ track track-entry-number { adjust-cost cost-offset | suppression } ]
缺省情况下,未引用Locator段。
多次配置本功能,可以引用多个Locator段,从而通告多个SRv6 SID。
当邻居接口为三层聚合接口时,可以指定member-port-enable参数为聚合组内的成员端口分配SRv6 SID。
当多个SRv6节点作为业务网关SGW,并组成VRRP备份组来保障业务的可靠性时,这些SRv6节点可以对外发布同一个Anycast Locator。为了区分出主备业务网关发布的Locator,保证SRv6流量优先转发到VRRP备份组中的主用业务网关上处理和转发,可以指定track参数,配置IS-IS发布Locator段时联动的Track项。Track项关联了VRRP备份组,Track模块监控VRRP备份组中节点状态。当VRRP备份组中的SRv6节点为Backup或Initialize状态时,对应Track项为Negative状态。此时,该SRv6节点通过IS-IS发布Locator段的开销值需要额外再加上cost-offset开销值增量或者抑制Locator段的发布。当VRRP备份组中SRv6节点为Master状态或者Inactive状态或VRRP备份组不存在时,都不影响Locator段的开销和发布情况。
(5) 开启IS-IS的SRv6压缩功能。
srv6 compress enable [ level-1 | level-2 ]
缺省情况下,IS-IS的SRv6压缩功能处于关闭状态。
仅在通过IS-IS发布G-SID时,配置本功能。
(6) (可选)配置聚合Locator路由。
summary ipv6-prefix prefix-length algorithm algo-id [ explicit ]
缺省情况下,不对Locator路由进行聚合。
将Locator路由与Flex-algo算法关联后,可以将该类路由聚合,以减少本路由器生成的LSP报文大小和LSDB的规模。有关Flex-algo算法的详细介绍,请参见“三层技术-IP路由配置指导”中的“IS-IS”。
(7) (可选)配置SRv6 Locator的管理标记值。
segment-routing ipv6 admin-tag tag-value
缺省情况下,IS-IS发布SRv6 Locator时不携带管理标记值。
在不同级别和不同区域间引入IS-IS路由,或者在IS-IS邻居之间学习IS-IS路由时,如果希望引入某些特定的SRv6 Locator,过滤掉其他SRv6 Locator,则可以通过配置本功能来标记不同SRv6 Locator,再通过路由策略中的if-match tag命令来过滤不同管理标记值的SRv6 Locator。
(1) 进入系统视图。
system-view
(2) 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 引用Locator段。
segment-routing ipv6 locator locator-name [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | auto-sid-disable ]
缺省情况下,未引用Locator段。
多次配置本功能,可以引用多个Locator段,从而通告多个SRv6 SID。
(4) 开启OSPFv3的SRv6压缩功能。
srv6 compress enable
缺省情况下,OSPFv3的SRv6压缩功能处于关闭状态。
仅在通过OSPFv3发布G-SID时,配置本功能。
(5) (可选)配置OSPFv3路由中携带的SRv6 SID-Sub TLV的类型值。
segment-routing ipv6 sid-sub-tlv-type { end-x end-x-value | lan-end-x lan-end-x-value }
缺省情况下,OSPFv3路由中携带的End.X SID Sub-TLV类型值为31,LAN End.X SID Sub-TLV类型值为32。
通过OSPFv3路由发布End.X SID时,不同设备OSPFv3路由协议报文中携带的End.X SID子TLV的类型值可能不同,从而导致设备之间无法互通。为了实现设备互通,需要配置本命令保证各个设备上子TLV的类型值相同。
(6) (可选)配置OSPFv3报文中为SRv6扩展的TLV和标记位遵循私有协议的定义。
segment-routing ipv6 private-srv6-extensions compatible
OSPFv3报文中的SRv6 Capabilities TLV类型值、各种Sub TLV的类型值及标记位遵循草案draft-ietf-lsr-ospfv3-srv6-extensions-09中的定义。请确保OSPFv3的邻居遵循了相同的标准,否则可能无法正常发布SRv6 Locator和SRv6 SID信息。
同时配置segment-routing ipv6 sid-sub-tlv-type命令和segment-routing ipv6 private-srv6-extensions compatible命令时,segment-routing ipv6 sid-sub-tlv-type命令中设置的End.X SID Sub-TLV类型取值和LAN End.X SID Sub-TLV类型取值优先生效。
(7) (可选)配置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邻居或链路。
通过本功能指定locator参数可以动态为对等体分配PeerNode SID和PeerAdj SID,指定static-sid参数可以为对等体手工静态指定PeerNode SID和PeerAdj SID的附加行为和分配方式。
如果未指定任何参数,则在BGP实例下通过segment-routing ipv6 egress-engineering locator命令配置的BGP-EPE引用Locator段内为对等体动态分配SRv6 SID。
对于同一对等体,配置本功能时:
· 指定参数locator时,多次执行本命令,最后一次执行的命令生效。
· 指定参数static-sid时:
¡ 对于同一类型SRv6 SID,多次执行本命令,最后一次执行的命令生效。
¡ 对于不同类型SRv6 SID,多次执行本命令,最后可以分配多个不同类型的SID。
¡ 多次指定coc32和coc-both coc32参数,最后一次的配置生效。
为对等体配置静态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不能相同。
仅在引用的Locator段为coc32类型Locator时,auto-sid-coc32及coc32参数才会生效。
仅在引用的Locator段为coc-both类型Locator时,auto-sid-coc-both及coc-both参数才会生效。
仅当引用的Locator段为coc16类型Locator时,coc、coc-next、coc-none、next、psp-coc、psp-usd-next、psp-usp-usd-coc-next参数才会生效。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启SRv6的BGP-EPE功能。请选择其中一项进行配置。
¡ 适用于普通类型的Locator命令形式:
peer group-name egress-engineering srv6
peer ipv6-address prefix-length egress-engineering srv6 [ locator locator-name ]
peer ipv6-address egress-engineering srv6 static-sid { psp psp-sid | no-psp-usp no-psp-usp-sid } *
peer ipv6-address egress-engineering srv6 static-sid { no-flavor no-flavor-sid | psp psp-sid | psp-usp-usd psp-usp-usd-sid | usp-usd usp-usd-sid } *
¡ 适用于32bit G-SRv6压缩场景带no-psp-usp参数的Locator命令形式:
peer ipv6-address egress-engineering srv6 [ locator locator-name [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } ] | static-sid [ coc32 | coc-both { coc32 | coc32-none } ] { psp psp-sid | no-psp-usp no-psp-usp-sid } * ]
¡ 适用于32bit G-SRv6压缩场景带no-flavor参数的Locator命令形式:
peer ipv6-address egress-engineering srv6 [ locator locator-name [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } ] | static-sid { coc32 | coc-both coc32 } { no-flavor no-flavor-sid | psp psp-sid } * ]
peer ipv6-address egress-engineering srv6 [ locator locator-name [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } ] | static-sid [ coc-both coc32-none ] { no-flavor no-flavor-sid | psp psp-sid | psp-usp–usd psp-usp-usd-sid | usp–usd usp-usd-sid } * ]
¡ 适用于16bit G-SRv6压缩场景的Locator命令形式:
peer ipv6-address egress-engineering srv6 static-sid { no-flavor no-flavor-sid | psp psp-sid | psp-usp-usd psp-usp-usd-sid | usp-usd usp-usd-sid } *
peer ipv6-address egress-engineering srv6 static-sid coc-none { no-flavor coc-none-no-flavor-sid | psp coc-none-psp-sid | psp-usp-usd coc-none-psp-usp-usd-sid | usp-usd coc-none-usp-usd-sid } *
peer ipv6-address egress-engineering srv6 static-sid compress { coc coc-sid | coc-next coc-next-sid | next next-sid | psp-coc psp-coc-sid | psp-usd-next psp-usd-next-sid | psp-usp-usd-coc-next psp-usp-usd-coc-next-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段为coc32类型Locator时,auto-sid-coc32参数才会生效。
仅在引用的Locator段为coc-both类型Locator时,auto-sid-coc-both参数才会生效。
执行segment-routing ipv6 egress-engineering locator命令未指定任何参数时,如果已经配置了静态SRv6 SID,则优先使用静态SRv6 SID;如果未配置静态SRv6 SID,则动态分配SRv6 SID。如果Locator段下配置的静态SRv6 SID是同一opcode值不同的出接口和下一跳的End.X SID,则BGP-EPE不会使用该静态SRv6 SID,而是会动态分配SRv6 SID。
引用coc16类型Locator时,分配的SID存在如下情况:
· BGP根据peer egress-engineering srv6命令和egress-engineering srv6 peer-set命令中static-sid参数静态指定的附加行为来分配SID。
· 如果egress-engineering srv6命令和egress-engineering srv6 peer-set命令中未指定static-sid参数,则BGP无法动态分配SID。
通过display bgp egress-engineering ipv6命令或display bgp egress-engineering srv6 peer-set命令可以查看分配的SID及其携带的附加行为。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP-EPE引用的Locator。
segment-routing ipv6 egress-engineering locator locator-name [ auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | auto-sid-coc32 [ additive ] | auto-sid-disable ]
缺省情况下,BGP-EPE未引用Locator。
当一台设备和多台设备建立BGP邻居关系时,可以手工规划邻居组,即将一组BGP邻居规划为一个Set,基于该组分配PeerSet SID。通过PeerSet SID转发流量时,可以在多个邻居间负载分担。
通过segment-routing ipv6 egress-engineering locator命令引用Locator段,再配置本命令可以为一组BGP邻居分配PeerSet SID,指定static-sid参数可以为BGP对等体手工静态指定PeerSet SID的附加行为和分配方式,不指定static-sid参数则动态为一组BGP邻居分配PeerSet SID。对于coc16类型Locator,仅支持指定static-sid参数来静态分配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命令时:
· 不指定static-sid时,最后一次执行的命令生效。
· 指定参数static-sid时:
¡ 对于同一类型SRv6 SID,多次执行本命令,最后一次执行的命令生效。
¡ 对于不同类型SRv6 SID,多次执行本命令,可以分配多个不同类型的SRv6 SID。
¡ 多次指定coc32和coc-both coc32参数,最后一次的配置生效。
通过本命令为BGP-EPE SRv6 Peer Set组指定静态SRv6 SID和通过peer egress-engineering srv6命令为对等体指定静态SRv6 SID时,配置的静态SRv6 SID不能相同。
仅在引用的Locator段为coc32类型Locator时,auto-sid-coc32及coc32参数才会生效。
仅在引用的Locator段为coc-both类型Locator时,auto-sid-coc-both及coc-both参数才会生效。
对于coc32类型Locator和coc-both类型Locator,未指定auto-sid-coc32相关参数和auto-sid-coc-both参数时,则动态分配普通类型的SRv6 SID。
仅当引用的Locator段为coc16类型Locator时,coc、coc-next、coc-none、next、psp-coc、psp-usd-next、psp-usp-usd-coc-next参数才会生效。
对于coc32类型Locator和coc-both类型Locator,segment-routing ipv6 egress-engineering locator和egress-engineering srv6 peer-set均可以配置动态分配SRv6 SID的类型,包括auto-sid-coc32、auto-sid-coc-both coc32和auto-sid-coc-both coc32-none参数。如果segment-routing ipv6 egress-engineering locator和egress-engineering srv6 peer-set指定的参数不同,则segment-routing ipv6 egress-engineering locator命令指定的参数生效。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 创建BGP-EPE SRv6 Peer Set组。请选择其中一项进行配置。
¡ 适用于普通类型Locator的命令形式:
egress-engineering srv6 peer-set peer-set-name [ static-sid { psp psp-sid | no-psp-usp no-psp-usp-sid } * ]
egress-engineering srv6 peer-set peer-set-name [ static-sid { no-flavor no-flavor-sid | psp psp-sid | psp-usp–usd psp-usp-usd-sid | usp–usd usp-usd-sid } * ]
¡ 适用于32bit G-SRv6压缩场景带no-psp-usp参数的Locator的命令形式:
egress-engineering srv6 peer-set peer-set-name [ auto-sid-coc32 [ additive ] | auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | static-sid [ coc32 | coc-both { coc32 | coc32-none } ] { psp psp-sid | no-psp-usp no-psp-usp-sid } * ]
¡ 适用于32bit G-SRv6压缩场景带no-flavor参数的Locator命令形式:
egress-engineering srv6 peer-set peer-set-name [ auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | auto-sid-coc32 [ additive ] | static-sid [ coc32 | coc-both coc32 ] { no-flavor no-flavor-sid | psp psp-sid } * ]
egress-engineering srv6 peer-set peer-set-name [ auto-sid-coc-both { all | coc32 | coc32-all | coc32-none } | auto-sid-coc32 [ additive ] | static-sid [ coc-both coc32-none ] { no-flavor no-flavor-sid | psp psp-sid | psp-usp–usd psp-usp-usd-sid | usp–usd usp-usd-sid } * ]
¡ 适用于16bit G-SRv6压缩场景的Locator命令形式:
egress-engineering srv6 peer-set peer-set-name static-sid { no-flavor no-flavor-sid | psp psp-sid | psp-usp-usd psp-usp-usd-sid | usp-usd usp-usd-sid } *
egress-engineering srv6 peer-set peer-set-name static-sid coc-none { no-flavor coc-none-no-flavor-sid | psp coc-none-psp-sid | psp-usp-usd coc-none-psp-usp-usd-sid | usp-usd coc-none-usp-usd-sid } *
egress-engineering srv6 peer-set peer-set-name static-sid compress { coc coc-sid | coc-next coc-next-sid | next next-sid | psp-coc psp-coc-sid | psp-usd-next psp-usd-next-sid | psp-usp-usd-coc-next psp-usp-usd-coc-next-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组。
在使用BGP-LS将链路状态上报给控制器进行路径计算的场景中,可以配置本功能在部署BGP EPE的设备上由BGP收集和扩散域内链路时延信息,并通过BGP-LS上报给控制器,由控制器基于时延计算路径,从而满足最优路径时延最小的需求。
BGP接口时延信息可通过如下两种方式获取:
· 静态配置:使用本命令静态配置接口时延。
· 动态获取:使用test-session bind interface命令将TWAMP-light测试与接口绑定,由TWAMP-light将统计后的时延信息发布给绑定接口,绑定接口向BGP上报时延信息。关于TWAMP的详细介绍,请参见“网络管理和监控配置指导”中的“NQA TWAMP-light”。
时延频繁抖动时,BGP会频繁地处理接口上报的时延信息,并频繁发布和上报链路信息,导致设备资源被过多占用。时延发布抑制功能可以用来解决上述问题。
时延发布抑制功能的工作机制为:
(1) 开启时延发布抑制功能后,接口按照时延发布抑制时间间隔向BGP上报时延信息,不再频繁上报时延信息。
(2) BGP按照时延发布抑制定时器设置的时间间隔发布和上报时延信息,即BGP在时延发布抑制定时器超时前不能发布和上报时延信息,以下两种情况除外:
¡ BGP收到接口上报的前后两次的时延变化率大于或等于percent-value时,不管时延发布抑制定时器超时与否,BGP都会发布和上报时延信息。
¡ BGP收到接口上报的前后两次的时延变化绝对值大于或等于absolute-value时,不管时延发布抑制定时器超时与否,BGP都会发布和上报时延信息。
如果同时通过静态和动态方式获取到了某个时延参数,则以静态配置的为准。
开启本功能及设置抑制参数时,需要注意:
· 只有通过egress-engineering metric-delay advertisement enable命令开启时延发布功能之后,本命令才能生效。
· 将某个抑制参数设置为0,则相应的抑制机制不再生效。各抑制参数均设置为0时,表示关闭时延发布抑制功能。
· 若在设备上同时执行了egress-engineering metric-delay suppression和egress-engineering metric-link-loss suppression命令,则NQA使用两条命令设置的发布抑制定时器中的较小值作为发布时延和丢包率的时间间隔。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP上报的接口时延参数。
egress-engineering link-delay { average average-delay-value | min min-delay-value max max-delay-value | variation variation-value } * interface interface-type interface-number
缺省情况下,未配置接口时延信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启时延发布功能。
egress-engineering metric-delay advertisement enable
缺省情况下,时延发布功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP的时延发布抑制功能,并设置抑制参数。
egress-engineering metric-delay suppression timer time-value percent-threshold percent-value absolute-threshold absolute-value
缺省情况下,时延发布抑制功能处于开启状态,时延发布抑制定时器的值为120秒,时延变化率的抑制阈值为10%,时延变化绝对值的抑制阈值为1000微秒。
在使用BGP-LS将链路状态上报给控制器进行路径计算的场景中,可以在部署BGP-EPE的设备上开启本功能,由BGP收集本地和BGP-EPE邻居间的链路丢包率信息,并通过BGP-LS上报给控制器,由控制器基于丢包率计算路径,从而满足最优路径丢包率最小的需求。
BGP-EPE接口的丢包率可通过如下两种方式获取:
· 静态配置:使用egress-engineering link-loss命令静态配置BGP-EPE接口丢包率。
· 动态获取:使用test-session bind interface命令将TWAMP-light测试与接口绑定,由TWAMP-light将统计后的丢包率信息发布给绑定接口,绑定接口向BGP上报丢包率信息。关于TWAMP-light的详细介绍,请参见“网络管理和监控配置指导”中的“NQA TWAMP-light”。
丢包率频繁变化时,BGP会频繁地处理接口上报的丢包率信息,并通过BGP-LS向控制器频繁上报链路信息,导致设备资源被过多占用。丢包率发布抑制功能可以用来解决上述问题。
丢包率发布抑制功能的工作机制为:
(1) 开启丢包率发布抑制功能后,接口按照丢包率发布抑制定时器设置的时间间隔向BGP上报丢包率信息,不再频繁上报丢包率信息。
(2) BGP按照丢包率发布抑制定时器设置的时间间隔通过BGP-LS发布接口上报的丢包率信息,即BGP在定时器超时前不能发布和上报丢包率信息,以下两种情况除外:
¡ BGP收到接口上报的前后两次丢包率的变化率大于或等于丢包率变化率抑制阈值。
¡ BGP收到接口上报的前后两次丢包率变化的绝对值大于或等于丢包率变化绝对值抑制阈值。
如果同时通过静态和动态方式获取到了某个丢包率参数,则以静态配置的为准。
NQA仅支持在物理接口上统计丢包率,因此建议使用直连物理接口建立BGP-EPE邻居,否则会出现统计不到丢包率的情况。
开启丢包率发布抑制功能并设置抑制参数时,需要注意:
· 只有通过egress-engineering metric-link-loss advertisement enable命令开启丢包率发布功能之后,本命令才能生效。
· 将某个抑制参数设置为0,则相应的抑制机制不再生效。各抑制参数均设置为0时,表示关闭丢包率发布抑制功能。
· 若在设备上同时执行了egress-engineering metric-delay suppression和egress-engineering metric-link-loss suppression命令,则NQA使用两条命令设置的发布抑制定时器中的较小值作为发布时延和丢包率的时间间隔。
· 建议将丢包率发布抑制定时器配置为大于或等于NQA TWAMP-light丢包率测量时间间隔的值。关于NQA TWAMP-light的详细介绍,请参见“网络管理和监控配置指导”中的“NQA”。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置BGP上报的接口丢包率参数。
egress-engineering link-loss loss-value interface interface-type interface-number
缺省情况下,未配置BGP-EPE接口的丢包率。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启丢包率发布功能。
egress-engineering metric-link-loss advertisement enable
缺省情况下,BGP-EPE的丢包率发布功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP的丢包率发布抑制功能,并设置抑制参数。
egress-engineering metric-link-loss suppression timer time-value percent-threshold percent-value absolute-threshold absolute-value
缺省情况下,丢包率发布抑制功能处于开启状态,丢包率发布抑制定时器的值为120秒,丢包率变化率的抑制阈值为10%,丢包率变化绝对值的抑制阈值为0.01%。
在使用BGP-LS将链路状态上报给控制器进行路径计算的场景中,可以在部署BGP EPE的设备上配置本功能由BGP收集和扩散域内链路带宽信息,并通过BGP-LS上报给控制器,由控制器基于带宽计算路径信息,从而满足最优路径带宽最大的需求。
带宽频繁变化时,BGP会频繁地处理接口上报的带宽信息,并频繁发布和上报链路信息,导致设备资源被过多占用。带宽发布抑制功能可以用来解决上述问题。
带宽发布抑制功能的工作机制为:
(1) 开启带宽发布抑制功能后,接口按照带宽发布抑制时间间隔向BGP上报带宽信息,不再频繁上报带宽信息。
(2) BGP按照带宽发布抑制定时器设置的时间间隔发布和上报带宽信息,即BGP在带宽发布抑制定时器超时前不能发布和上报带宽信息。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启时延发布功能。
egress-engineering metric-bandwidth advertisement enable
缺省情况下,带宽发布功能处于关闭状态。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP 的带宽发布抑制功能,并设置抑制参数。
egress-engineering metric-bandwidth suppression timer time-value
缺省情况下,BGP的带宽发布抑制功能处于开启状态,带宽发布抑制定时器的值为120秒。
BGP邻居关系震荡时,如果不希望BGP-EPE频繁地删除和重新申请SRv6 SID占用系统资源,避免BGP-EPE动态分配的SRv6 SID反复变化,可以配置本功能合理设置BGP-EPE动态分配的SRv6 SID延迟删除时间。
配置本功能后,当BGP会话变为down状态时,在延迟删除时间内不会删除动态分配的SRv6 SID。
· 如果在延迟删除时间之内BGP会话恢复为up状态,则BGP-EPE仍可以使用原来动态分配的SRv6 SID。
· 如果达到延迟删除时间后,设备间BGP会话仍然处于down状态,则删除动态分配的SRv6 SID。
在配置的延迟删除时间之内,如果设备发生主备板卡倒换,动态分配的SRv6 SID延迟删除功能仍生效。
主动删除BGP配置时,不会等待延迟时间,将立即删除由BGP协议动态分配的SRv6 SID。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 配置动态SID延迟删除时间。
segment-routing ipv6 sid delete-delay [ time-value ]
缺省情况下,BGP-EPE动态分配的SID延迟删除时间为1800秒。
在非直连的BGP EPE对等体之间通常使用Loopback口来建立多跳的EBGP邻居关系,其对应的物理链路可能有多条。此时,两个非直连的BGP EPE对等体通过BGP-LS上报给控制器的链路信息中本地地址为Loopback口地址,远端地址为直连链路的下一跳地址,两个非直连的BGP EPE对等体的远端地址不属于同一网段,即BGP EPE对等体链路信息中远端地址不匹配,控制器无法通过BGP-LS上报的链路信息来拼接完整的跨域链路拓扑信息,因此也无法基于跨域链路属性计算最优的跨域SRv6 TE Policy主备路径。在非直连的BGP EPE对等体上可以开启BGP虚链路功能解决上述问题。
在两个非直连的BGP EPE对等体上开启BGP虚链路功能后,BGP-LS上报给控制器的链路信息中将peer egress-engineering srv6命令指定的BGP EPE对等体的IPv6地址作为远端BGP邻居地址,将peer connect-interface命令指定的本地源接口的IPv6地址作为本地地址由于两个非直连的BGP EPE对等体上报的链路信息中的本地和远端BGP邻居地址匹配,则控制器拼接出一条无实际拓扑,但路由可达的虚链路。
用户可以为BGP EPE对等体之间的虚链路配置TE度量值、亲和属性、SRLG和时延等链路属性信息。关于链路的TE度量值、亲和属性和SRLG的详细信息,请参见“MPLS配置指导”中的“MPLS TE”。
BGP EPE对等体之间的虚链路支持绑定TWAMP-light测试会话ID,通过TWAMP-light测试会话来检测虚链路的网络质量,获取链路时延、抖动参数。虚链路绑定的TWAMP-light测试会话中源IP地址必须与BGP虚链路的本地地址一致,TWAMP-light测试会话的目的IP必须与BGP虚链路的远端地址一致。关于TWAMP-light测试会话的详细信息,请参见“网络管理和监控配置指导”中的“NQA TWAMP-light”。
直连的BGP EPE对等体不支持BGP虚链路功能及为虚链路配置的各种链路属性。
(1) 进入系统视图。
system-view
(2) 进入BGP实例视图。
bgp as-number [ instance instance-name ]
(3) 开启BGP虚链路功能。
peer ipv6-address virtual-link
缺省情况下,BGP虚链路功能处于开启状态。
(4) 配置BGP虚链路的TE度量值。
peer ipv6-address virtual-link te metric value
缺省情况下,BGP虚链路无TE度量值。
(5) 将BGP虚链路加入SRLG。
peer ipv6-address virtual-link te srlg srlg-list
缺省情况下,BGP虚链路未加入任何SRLG。
(6) 配置BGP虚链路的亲和属性值。
peer ipv6-address virtual-link te link administrative group attribute-value
缺省情况下,BGP虚链路的亲和属性值为0x00000000。
(7) 配置BGP虚链路绑定的TWAMP-light测试会话。
peer ipv6-address virtual-link twamp-light test-session session-id
缺省情况下,BGP虚链路未绑定TWAMP-light测试会话。
BGP虚链路可以通过绑定TWAMP-light测试会话动态获取链路时延和抖动参数。虚链路绑定的TWAMP-light测试会话中源IP地址必须与BGP虚链路的本地地址一致,TWAMP-light测试会话的目的IP必须与BGP虚链路的远端地址一致。
(8) 配置BGP虚链路的时延参数。
peer ipv6-address virtual-link link-delay { average average-delay-value | min min-delay-value max max-delay-value | variation variation-value } *
缺省情况下,BGP虚链路未配置时延参数。
BGP虚链路时延信息可通过本功能来手工指定,如果同时通过手工配置和TWAMP-light测试会话动态获取两种方式获取到了某个时延参数,则以本命令配置的为准。
如果源节点上等价主路径的下一跳节点不同,则缺省情况下无法通过TI-LFA FRR计算出备份路径。只有将源节点上所有的等价主链路加入同一个SRLG(Shared Risk Link Group,共享风险链路组)才能通过TI-LFA FRR计算出备份路径。
如图6-1所示,源节点Device A到目的节点Device E之间存在三条等价路径Link 1、Link 2和Link 3,且这三条等价路径的下一跳节点不完全相同。这种情况下,如果希望使用TI-LFA FRR计算备份路径,则需要将Link 1、Link 2和Link 3加入同一个SRLG。
图6-1 IS-IS的ECMP场景下使用TI-LFA FRR计算备份路径
TI-LFA FRR配置任务如下:
(1) 开启TI-LFA FRR功能
(2) (可选)配置TI-LFA FRR采用的封装模式
(3) (可选)配置接口不参与TI-LFA计算
禁止源节点设备上路由的主下一跳出接口参与TI-LFA计算。
(4) (可选)开启FRR正切防微环功能
(5) (可选)配置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。
(7) (可选)开启Level-1区域的TI-LFA使用Level-2的路径作为备份路径的功能。
inter-level-tilfa level-1 enable [ prefer ]
缺省情况下,Level-1区域的TI-LFA使用Level-2的路径作为备份路径的功能处于关闭状态。
关于本命令的详细介绍,请参见“三层技术-IP路由命令参考”中的“IS-IS”。
(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。
缺省情况下,TI-LFA FRR采用Insert封装模式添加Repair List,即:
· 对于SRv6报文:在原有IPv6基本头和SRH之间插入新的SRH,新的SRH包含Repair List中所有SID信息。
· 对于普通IPv6报文:将原IPv6基本头的目的地址替换为Repair List中的第一个SID,并添加SRH,SRH包含Repair List中所有SID信息。
配置本命令后,TI-LFA FRR采用Encap封装模式添加Repair List,即在原始报文的基础上封装新的IPv6基本头和SRH:
· IPv6基本头的目的地址为Repair List中的第一个SID,源IPv6地址为用户手工指定的IPv6地址。
· SRH包含Repair List中所有SID信息。
仅以下表格中的单板支持本功能。
表6-5 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200-E |
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 配置TI-LFA FRR采用Encap封装模式。
fast-reroute ti-lfa encaps
缺省情况下,TI-LFA FRR采用Insert封装模式。
(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 FRR功能的节点上配置FRR正切防微环功能,当最优路径上某个节点或者链路故障以后,首先流量切换到TI-LFA计算的备份路径上转发,避免丢包,然后本节点路由收敛后启动延迟时间定时器(延迟时间可通过fast-reroute microloop-avoidance rib-update-delay命令配置),等待备份路径上的所有设备均收敛完成且延迟时间定时器超时以后,本节点才将收敛后的转发路径下发FIB表,并将流量从TI-LFA计算的备份路径切换到收敛后的转发路径上。
如果同时配置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毫秒。
(1) 进入系统视图。
system-view
(2) 进入OSPFv3视图。
ospfv3 [ process-id | vpn-instance vpn-instance-name ] *
(3) 开启OSPFv3的FRR正切防微环功能。
fast-reroute microloop-avoidance enable
缺省情况下,OSPFv3的FRR正切防微环功能处于关闭状态。
(4) (可选)配置FRR正切防微环延迟时间。
fast-reroute microloop-avoidance rib-update-delay delay-time
缺省情况下,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毫秒。
缺省情况下,SR防微环功能采用Insert封装模式添加SID列表,即:
· 对于SRv6报文:在原有IPv6基本头和SRH之间插入新的SRH,新的SRH包含SID列表中所有SID信息。
· 对于普通IPv6报文:将原IPv6基本头的目的地址替换为SID列表中的第一个SID,并添加SRH,SRH包含SID列表中所有SID信息。
配置本命令后,SR防微环功能采用Encap封装模式添加SID列表,即在原始报文的基础上封装新的IPv6基本头和SRH:
· IPv6基本头的目的地址为SID列表中的第一个SID,源IPv6地址为用户手工指定的IPv6地址。
· SRH包含SID列表中所有SID信息。
仅以下表格中的单板支持本功能。
表6-6 单板信息一览表
单板类型 |
单板丝印 |
CEPC单板 |
CEPC-CQ8L、CEPC-CQ8LA、CEPC-CQ8L1A、CEPC-CQ8L3A、CEPC-CQ16L1、CEPC-DQ2L1-G |
CSPEX单板 |
CSPEX-1502XA、CSPEX-1802X、CSPEX-1802XA、CSPEX-1812X-E、CSPEX-2304X-G、CSPEX-2304X-LG、CSPEX-2612XA、CSPEX-2612X3A |
SPE单板 |
RX-SPE200-E |
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 配置SR防微环采用Encap封装模式。
segment-routing microloop-avoidance encaps
缺省情况下,SR防微环采用Insert模式。
缺省情况下,SR防微环功能先计算到P节点的End SID,再计算P节点到目的节点的End.X SID,组成一个SID列表封装到报文的SRH中,SID列表为{P节点的End SID,P节点到目的节点的多个End.X SID}。
当网络中存在多点故障且路径频繁切换时,如果通过End SID查找到P节点的路径,可能导致到P节点的路径存在微环。为了解决该问题,需要严格约束到达P节点的路径,在设备上创建一个无环的SID列表,引导流量转发到目的节点。
配置本功能后,SR防微环功能将计算到P节点的End.X SID,以严格约束到达P节点的路径。封装到报文的SRH的SID列表为{P节点的End.X SID,P节点到目的节点的多个End.X SID}。
(1) 进入系统视图。
system-view
(2) 进入IS-IS视图。
isis process-id
(3) 进入IS-IS IPv6单播地址族视图。
address-family ipv6
(4) 配置SR防微环在SID列表中封装严格SID。
segment-routing microloop-avoidance strict-sid-only
缺省情况下,未配置SR防微环在SID列表中封装严格SID。
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报文的大小同时受SRv6 Path MTU、Reserved MTU和物理接口的IPv6 MTU控制。SRv6 Path MTU和物理接口的IPv6 MTU先取较小值,再减去Reserved MTU即为实际采用的MTU。例如,全局配置SRv6 Path MTU为1600,配置Reserved MTU为100,如果物理接口的IPv6 MTU大于或等于1600,则源节点实际采用的MTU是SRv6 Path MTU减去Reserved MTU的值,即1500;如果物理接口的IPv6 MTU小于1600,例如1500,则源节点实际采用的MTU是物理接口的IPv6 MTU减去Reserved MTU的值,即1400。
(1) 进入系统视图。
system-view
(2) 进入SRv6视图。
segment-routing ipv6
(3) 配置SRv6的Reserved MTU值。
path-mtu reserved [ reserved-value ]
缺省情况下,未配置全局Path MTU预留值。
(4) 配置SRv6的Path MTU值。
path-mtu mtu-value
缺省情况下,SRv6的Path MTU值为9600。
在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配置指导”中的“优先级映射”。
IP L3VPN/EVPN L3VPN/EVPN VPWS/EVPN VPLS over SRv6 BE组网中,在Egress节点配置diffserv-mode命令不生效。
(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 } }
缺省情况下,指定差分服务模式为Pipe模式,且优先级为0。
开启SRv6模块的告警功能后,该模块会生成告警信息,用于报告该模块的重要事件。生成的告警信息将发送到设备的SNMP模块,通过设置SNMP中告警信息的发送参数,来决定告警信息输出的相关属性。有关告警信息的详细介绍,请参见“网络管理和监控配置指导”中的“SNMP”。
(1) 进入系统视图。
system-view
(2) 开启SRv6模块的告警功能。
snmp-agent trap enable srv6
缺省情况下,SRv6模块的告警功能处于关闭状态。
在完成上述配置后,在任意视图下执行display命令,可以显示配置的SID列表信息。
表6-7 显示与维护SRv6的运行状态
操作 |
命令 |
显示IPv6对等体的BGP-EPE信息 |
display bgp [ instance instance-name ] egress-engineering ipv6 [ ipv6-address ] |
显示BGP Peer SRv6 Set组的信息 |
display bgp 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 Tunnel接口信息 |
display isis srv6 tunnel [ level-1 | level-2 ] [ process-id ] |
显示OSPFv3 SRv6能力信息 |
display ospfv3 [ process-id ] segment-routing ipv6 capability |
显示OSPFv3 SRv6的Locator信息 |
display ospfv3 [ process-id ] [ flex-algo flex-algo-id ] segment-routing ipv6 locator [ ipv6-address prefix-length ] |
显示OSPFv3的SRv6 Tunnel接口信息 |
display ospfv3 [ process-id ] srv6 tunnel [ interface-number ] |
显示指定Locator中可用的静态SRv6 SID |
display segment-routing ipv6 available-static-sid locator locator-name [ from begin-value ] |
显示SRv6简要信息 |
display segment-routing ipv6 brief |
显示SRv6转发信息 |
(独立运行模式) display segment-routing ipv6 forwarding [ entry-id [ relation ] | forwarding-type { srv6be | srv6frr | srv6pcpath | srv6pgroup | srv6policy | srv6sfc | srv6sidlist | srv6sids } ] [ slot slot-number ] (IRF模式) display segment-routing ipv6 forwarding [ entry-id [ relation ] | forwarding-type { srv6be | srv6frr | srv6pcpath | srv6pgroup | srv6policy | srv6sfc | srv6sidlist | srv6sids } ] [ chassis chassis-number 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-bier | end-coc-none | end-coc32 | end-dt2m | end-dt2u | end-dt2ul | end-dx2 | end-dx2-auto | end-dx2l | end-m | end-op | end-psid | end-r | end-rgb | end-t | end-xsid ] [ owner owner ] [ sid ] display segment-routing ipv6 local-sid [ locator locator-name ] [ end-dt4 | end-dt46 | end-dt6 | end-dx4 | end-dx6 | src-dt4 | src-dt6 ] [ [ owner owner ] sid | vpn-instance vpn-instance-name ] display segment-routing ipv6 local-sid [ locator locator-name ] [ end-x | end-x-coc32 | end-x-coc-none ] [ sid | interface interface-type interface-number [ nexthop nexthop-ipv6-address ] ] [ owner owner ] |
显示16bit压缩G-SRv6场景中基于Local SID生成的本地G-SID表项 |
display segment-routing ipv6 local-sid lib [ locator locator-name ] [ end | end-b6encaps | end-b6encapsred | end-b6insert | end-b6insertred | end-coc-none | end-dt2m | end-dt2u | end-dt2ul | end-dx2 | end-dx2l | end-x | end-x-coc-none ] [ owner owner ] [ sid ] display segment-routing ipv6 local-sid lib [ locator locator-name ] [ end-dt4 | end-dt46 | end-dt6 | end-dx4 | end-dx6 ] [ owner owner ] [ sid ] |
显示各协议分配的SRv6 SID的数目 |
display segment-routing ipv6 local-sid statistics [ locator [ locator-name ] ] |
显示SRv6的Locator信息 |
display segment-routing ipv6 locator [ locator-name ] |
显示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 ] |
· 设备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 |
|
XGE3/1/1 |
2000:1::1/64 |
|
XGE3/1/1 |
2000:1::2/64 |
|
XGE3/1/2 |
2000:4::1/64 |
|
XGE3/1/2 |
2000:2::2/64 |
Device C |
Loop1 |
3::3/128 |
Device D |
Loop1 |
4::4/128 |
|
XGE3/1/1 |
2000:3::3/64 |
|
XGE3/1/1 |
2000:3::4/64 |
|
XGE3/1/2 |
2000:2::3/64 |
|
XGE3/1/2 |
2000:4::4/64 |
(1) 请按照图6-2配置各接口的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 ten-gigabitethernet 3/1/1
[DeviceA-Ten-GigabitEthernet3/1/1] isis ipv6 enable 1
[DeviceA-Ten-GigabitEthernet3/1/1] isis cost 10
[DeviceA-Ten-GigabitEthernet3/1/1] quit
[DeviceA] interface ten-gigabitethernet 3/1/2
[DeviceA-Ten-GigabitEthernet3/1/2] isis ipv6 enable 1
[DeviceA-Ten-GigabitEthernet3/1/2] isis cost 10
[DeviceA-Ten-GigabitEthernet3/1/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,并开启SR防微环功能。
[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
# 配置引用Locator段。
[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 ten-gigabitethernet 3/1/1
[DeviceB-Ten-GigabitEthernet3/1/1] isis ipv6 enable 1
[DeviceB-Ten-GigabitEthernet3/1/1] isis cost 10
[DeviceB-Ten-GigabitEthernet3/1/1] quit
[DeviceB] interface ten-gigabitethernet 3/1/2
[DeviceB-Ten-GigabitEthernet3/1/2] isis ipv6 enable 1
[DeviceB-Ten-GigabitEthernet3/1/2] isis cost 10
[DeviceB-Ten-GigabitEthernet3/1/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 ten-gigabitethernet 3/1/1
[DeviceC-Ten-GigabitEthernet3/1/1] isis ipv6 enable 1
[DeviceC-Ten-GigabitEthernet3/1/1] isis cost 100
[DeviceC-Ten-GigabitEthernet3/1/1] quit
[DeviceC] interface ten-gigabitethernet 3/1/2
[DeviceC-Ten-GigabitEthernet3/1/2] isis ipv6 enable 1
[DeviceC-Ten-GigabitEthernet3/1/2] isis cost 10
[DeviceC-Ten-GigabitEthernet3/1/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 ten-gigabitethernet 3/1/1
[DeviceD-Ten-GigabitEthernet3/1/1] isis ipv6 enable 1
[DeviceD-Ten-GigabitEthernet3/1/1] isis cost 100
[DeviceD-Ten-GigabitEthernet3/1/1] quit
[DeviceD] interface ten-gigabitethernet 3/1/2
[DeviceD-Ten-GigabitEthernet3/1/2] isis ipv6 enable 1
[DeviceD-Ten-GigabitEthernet3/1/2] isis cost 10
[DeviceD-Ten-GigabitEthernet3/1/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
NexthopFlag : -
Interface : XGE3/1/1
TI-LFA:
Interface : XGE3/1/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保留在没有任何通知或提示的情况下对资料内容进行修改的权利!