SRv6技术白皮书
Copyright © 2022 新华三技术有限公司 版权所有,保留一切权利。
非经本公司书面许可,任何单位和个人不得擅自摘抄、复制本文档内容的部分或全部,并不得以任何形式传播。
除新华三技术有限公司的商标外,本手册中出现的其它公司的商标、产品标识及商品名称,由各自权利人拥有。
本文中的内容为通用性技术信息,某些信息可能不适用于您所购买的产品。
2.6.2 SRv6 Capabilities sub-TLV
2.6.7 SRv6 LAN End.X SID sub-TLV
2.6.8 SRv6 SID Structure Sub-Sub-TLV
5.2.8 SRv6 SID Information TLV
5.2.9 SRv6 Endpoint Behavior TLV
5.2.10 SRv6 BGP Peer Node SID TLV
云计算的发展对广域网提出了新的挑战,要求传统广域网进行变革。SD-WAN作为重构广域网的核心技术,通过自动部署、集中控制、智能调度及可视化等手段,加速网络交付,优化应用体验,提高带宽利用率,简化网络运维,满足了云计算对广域网的需求。
智能调度是新一代广域网的一个关键能力,对应用质量的保障、带宽资源的优化非常重要。现有的MPLS及RSVP-TE等流量工程技术可以满足应用对带宽的差异化保障需求,但存在协议种类多、部署复杂、管理困难、可扩展性差等问题,无法满足新一代广域网所要求的动态部署、灵活调度、快速、可扩展等方面的要求。因此,出现了一种新的协议Segment Routing。
SR(Segment Routing,分段路由)采用源路径选择机制,预先在源节点封装好路径所要经过节点分配的SID(Segment Identifier,段标识),当报文经过SR节点时,该节点根据报文的SID对报文进行转发。除源节点外,其它节点无需维护路径状态。
SRv6(Segment Routing IPv6,IPv6段路由)是指基于IPv6转发平面实现SR。SRv6通过在IPv6报文中插入一个路由扩展头SRH(Segment Routing Header,SRv6报文头),并在SRH中添加路径所要经过的所有段的SID,即SID List,来显式指定该报文的转发路径。
SRv6为SD-WAN网络提供了一种灵活高效的控制手段,具有部署简单、容易扩展的特点,能够更好地实现流量调度和路径优化,保障关键业务质量、均衡流量分布、提高专线利用率和降低线路成本。
SRv6技术具有如下优势:
· 简化维护
仅需要在源节点上控制和维护路径信息,网络中其他节点不需要维护路径信息。
· 智能控制
SRv6基于SDN架构设计,跨越了应用和网络之间的鸿沟,能够更好地实现应用驱动网络。SRv6中转发路径、转发行为、业务类型均可控。
· 部署简单
SRv6基于IGP和BGP扩展实现,无须使用MPLS标签,不需要部署标签分发协议,配置简单。
在SRv6网络中,不需要大规模升级网络设备,就可以部署新业务。在DC(Data Center,数据中心)和WAN(广域网)中,只需网络边界设备及特定网络节点支持SRv6,其他设备支持IPv6即可。
· 适应5G业务需求
随着5G业务的发展,IPv4地址已经无法满足运营商的网络需求。可通过在运营商网络中部署SRv6,使所有设备通过IPv6地址转发流量,实现IPv6化网络,以满足5G业务需求。
· 易于实现VPN等新业务
SRv6定义了多种类型的SID,不同SID具有不同的作用,指示不同的转发动作。通过不同的SID操作,可以实现VPN等业务处理。
日后,用户还可以根据实际需要,定义新的SID类型,具有很好的扩展性。
SRv6是指在IPv6网络中使用Segment Routing,将IPv6地址作为SID,SRv6 节点根据SID对报文进行转发。SRv6将SID列表封装在IPv6报文的SRH(Segment Routing Header,SR报文头)中,以控制报文转发路径。
SRv6的报文封装格式为:在原始数据报文前面添加新的IPv6基本头和SRH。SRH是路由类型取值为4的一种路由扩展头。
在某些场景下,源节点不会添加新的IPv6头,而是在原始IPv6报文的IPv6头中插入SRH扩展头。插入的SRH扩展头的格式与图1相同。本文不再详细描述这种报文封装格式。
图1 SRv6的报文封装示意图
如图1所示,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,以此类推。
为了便于理解SRv6的转发原理,采用图2所示方式简化SRv6报文。其中:
· IPv6 Destination Address:IPv6报文的目的地址,简称IPv6 DA。在普通IPv6报文里,IPv6 DA是固定不变的。在SRv6中,IPv6 DA仅标识当前报文的下一个节点,是不断变换的。
· SRH(SL=n-1)<Segment List [0]=a, Segment List [1]=b, …, Segment List [n-1]=x>:SRv6报文的SID列表。通过SL和Segment List字段共同决定IPv6 DA的取值。
图2 SRv6报文简化示意图
如图3所示,在SRv6中,每经过一个SRv6节点,SL字段减1,IPv6 DA信息变换一次:
· 如果SL=n-1,则IPv6 DA为SID [n-1]=x。
· 如果SL=1,则IPv6 DA为SID [1]=b。
· 如果SL=0,则IPv6 DA为SID [0]=a。
图3 SRH处理过程示意图
在SRv6中,SID用来定义某种网络功能、代表某种网络指令。SRv6 SID采用IPv6地址形式,但不与任何设备上的接口地址对应。
如图4所示,SRv6 SID由Locator、Function、Arguments和MBZ四部分组成:
· Locator:标识SID所属的网段。Locator在SR域内唯一。
· Function:标识与SID绑定的本地操作指令,SR域内指定节点收到流量后,根据SRv6 SID的Function字段执行相关操作。
· Arguments:定义报文的流和服务等信息。
· MBZ(Must be zero):当Locator、Function和Arguments的位数之和小于128bits时,其他位使用0补齐。
根据SRv6 SID功能和应用场景的不同,SRv6 SID包括但不限于:
· End SID:用于标识网络中的某个目的地址前缀。End SID对应的转发动作是将SRH中的SL的值减1,并根据SL从SRH取出下一个SID更新到IPv6报文头的目的地址,再根据IPv6目的地址查表转发。
· End.X SID:用于标识网络中的某条链路。End.X SID对应的转发动作是根据该SID绑定的三层接口转发给特定下一跳。
· End.DT4 SID:用于标识网络中的某个IPv4 VPN实例。End.DT4 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例路由表转发。End.DT4 SID用于IPv4 L3VPN over SRv6、EVPN IPv4 L3VPN over SRv6和公网IPv4 over SRv6场景。
· End.DT6 SID:用于标识网络中的某个IPv6 VPN实例。End.DT6 SID对应的转发动作是解封装报文,并且查找IPv6 VPN实例路由表转发。End.DT6 SID用于IPv6 L3VPN over SRv6、EVPN IPv6 L3VPN over SRv6和公网IPv6 over SRv6场景。
· End.DT46 SID:用于标识网络中的某个IPv4 VPN实例或IPv6 VPN实例。End.DT46 SID对应的转发动作是解封装报文,并且查找IPv4 VPN实例或IPv6 VPN实例路由表转发。End.DT46 SID用于IPv4 L3VPN over SRv6、EVPN IPv4 L3VPN over SRv6、公网IPv4 over SRv6、IPv6 L3VPN over SRv6、EVPN IPv6 L3VPN over SRv6和公网IPv6 over SRv6场景。
· End.DX4 SID:用于标识网络中的某个IPv4下一跳。End.DX4 SID对应的转发动作是解封装报文,并且将解封后的IPv4报文通过该SID绑定的三层接口转发给特定下一跳。End.DX4 SID用于IPv4 L3VPN over SRv6、EVPN IPv4 L3VPN over SRv6和公网IPv4 over SRv6场景。
· End.DX6 SID:用于标识网络中的某个IPv6下一跳。End.DX6 SID对应的转发动作是解封装报文,并且将解封后的IPv6报文通过该SID绑定的三层接口转发给特定下一跳。End.DX6 SID用于IPv6 L3VPN over SRv6、EVPN IPv6 L3VPN over SRv6和公网IPv6 over SRv6场景。
· End.DX2 SID:用于标识一个端点。End.DX2 SID对应的转发动作是解封装报文,并将解封装后的报文转发到SID对应的出接口。End.DX2 SID用于EVPN VPWS over SRv6和EVPN VPLS over SRv6场景。
· End.DX2L SID:用于标识报文来自Bypass SRv6 PW,携带该SID的报文不会再转发到该Bypass SRv6 PW,从而避免产生环路。End.DX2L SID对应的转发动作是解封装报文,并将解封装后的报文转发到SID对应的出接口。End.DX2L SID用于EVPN VPWS over SRv6多归属站点和EVPN VPLS over SRv6多归属站点场景。
· End.DT2M SID:用于转发VSI实例中的泛洪流量。End.DT2M SID对应的转发动作是解封装报文,并将解封装后的报文在VSI内广播泛洪。End.DT2M SID用于EVPN VPLS over SRv6场景。
· End.DT2U SID:用于转发VSI实例中的单播流量。End.DT2U SID对应的转发动作是解封装报文,根据解封装后报文的目的MAC地址查找VSI实例的MAC地址表,根据MAC表项将报文转发到对应的出接口。End.DT2U SID用于EVPN VPLS over SRv6场景。
· End.DT2UL SID:用来标识报文来自Bypass SRv6 PW,携带该SID的报文不会再转发到该Bypass SRv6 PW,从而避免产生环路。End.DT2UL SID对应的转发动作是解封装报文,并根据解封装后报文的目的MAC地址查找VSI实例的MAC地址表,根据MAC表项将报文转发到对应的出接口。End.DX2L SID用于EVPN VPLS over SRv6多归属站点场景。
· End.OP SID:OAM类型的SID。End.OP SID对应的转发动作是对下一个SRv6 SID进行检查。如果下一个SRv6 SID是本地SRv6 SID,则回复应答报文;否则丢弃该报文。End.OP SID用于SRv6 OAM场景。
· End.M SID:用于保护指定的Locator,即保护指定Locator段内的SRv6 SID。如果远端设备发布的SRv6 SID在指定Locator段的范围内,则使用End.M SID对该SRv6 SID(称为远端SRv6 SID)进行保护。End.M SID对应的转发动作为解封装报文,获取内层报文信息。内层报文的目的IPv6地址作为远端SRv6 SID,执行远端SRv6 SID对应的转发动作。End.M SID用于SRv6 TE Policy尾节点保护场景。
· End.T SID:用于Option B跨域VPN场景。
· End.AS SID:用于SRv6 SFC服务链静态代理场景。有关End.AS SID的详细介绍,请参见SRv6 SFC技术白皮书。
· End.AM SID:用于SRv6 SFC服务链伪代理场景。有关End.AM SID的详细介绍,请参见SRv6 SFC技术白皮书。
通过IGP协议通告SR节点的SRv6 SID后,其他SR节点可以根据收到的路由协议报文生成到达该SRv6 SID的路由转发表项。
SID附加行为(Flavors)可以改变SRv6 SID的转发行为,以便适配多种业务需求。目前,支持的SRv6 SID附加行为包括:
· PSP(Penultimate Segment POP of the SRH):倒数第二个Endpoint节点执行SRH移除操作。为了减轻SRv6网络尾节点的负担,可以在倒数第二个Endpoint节点将SRH移除,尾节点不需要查看SRH信息,只需根据目的IPv6地址查找Local SID表进行处理。
· 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头移除,将内层报文转发到目的节点。TI-LFA的详细介绍,请参见SRv6高可靠性技术白皮书。
· COC(Continue of Compression):标识本SID之后是G-SID,用于SID压缩场景,以减少SRH大小。SID压缩的详细介绍,请参见“3 G-SRv6”。
SRv6节点维护一个Local SID表,记录本节点生成的SRv6 SID,以及与SRv6 SID绑定的操作指令和转发信息,例如VPN实例、出接口和下一跳等。
SRv6节点接收到SRv6报文后,根据报文中的SID,查找Local SID表,并根据查找结果执行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节点。
图5 SRv6报文详细转发示意图
如图5所示,源节点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所示,为了支持SRv6,IS-IS协议需要发布两类SRv6信息:
· Locator信息:用于网络中的其他节点定位到发布SID信息的节点。
· SID信息:用于详细描述SID的功能,比如SID绑定的Function。
表1 IS-IS针对SRv6的扩展描述表
TLV名称 |
作用 |
携带位置 |
SRv6 Capabilities sub-TLV |
通告SRv6能力 |
IS-IS Router CAPABILITY TLV |
Node MSD sub-TLV |
通告MSD(Maximum SID Depth),即SID列表中能够包括的SID的最大数目 |
IS-IS Router CAPABILITY TLV |
SRv6 Locator TLV |
通告SRv6的Locator以及该Locator相关的End SID |
IS-IS报文,SRv6引入的一个顶级TLV |
SRv6 End SID sub-TLV |
通告End SID |
SRv6 Locator TLV |
SRv6 End.X SID sub-TLV |
在P2P网络中通告End.X SID |
IS-IS NBR TLV(IS-IS的22、23、141、222和223等类型TLV) |
SRv6 LAN End.X SID sub-TLV |
在LAN网络中通告End.X SID |
IS-IS NBR TLV(IS-IS的22、23、141、222和223等类型TLV) |
SRv6 SID Structure Sub-Sub-TLV |
发布SRv6 SID格式 |
· SRv6 End SID sub-TLV · SRv6 End.X SID sub-TLV · SRv6 LAN End.X SID sub-TLV |
SRv6 Capabilities sub-TLV用于通告节点支持SRv6功能,即本节点能够处理SRH。
SRv6 Capabilities sub-TLV的报文格式如图6所示。
SRv6 Capabilities sub-TLV包含字段如表2所示。
表2 SRv6 Capabilities sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为25 |
Length |
8比特 |
长度 |
Flags |
16比特 |
标志位 · C:表示支持SRv6 SID压缩功能 · O:用于OAM |
optional sub-sub-TLVs |
可变长度 |
可选的Sub-sub-TLV |
Node MSD sub-TLV用于通告设备MSD,即SID列表中能够包括的SID的最大数目。
Node MSD sub-TLV的报文格式如图7所示。
Node MSD sub-TLV包含字段如表3所示。
表3 Node MSD sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为23 |
Length |
8比特 |
长度 |
MSD-Type |
8比特 |
MSD类型: · 41:SRH Max SL,SRH中Segment Left字段的最大值 · 42:SRH Max End Pop,支持PSP或USP的Endpoint节点能够弹出的最大SID个数 · 45:SRH Max End D,Endpoint节点能够解封装的SID的最大个数 |
MSD Value |
8比特 |
MSD取值 |
SRv6 Locator TLV用于发布SRv6 Locator以及该Locator相关的End SID。
SRv6的Locator必须通过SRv6 Locator TLV发布出去,其他具备IS-IS SRv6能力的设备接收到TLV以后,将Locator对应的网段路由添加到本机路由表中,没有SRv6能力的设备则不添加Locator对应网段的路由。
Locator对应的网段路由也可以通过Prefix Reachability TLV(236/237)发布出去,以便不支持SRv6的设备能够添加路由表项,进而支持与SRv6节点共同组网。如果设备同时收到Prefix Reachability TLV和SRv6 Locator TLV,则Prefix Reachability TLV优先使用。
SRv6 Locator TLV的报文格式如图8所示。
SRv6 Locator TLV包含字段如表4所示。
表4 SRv6 Locator TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为27 |
Length |
8比特 |
长度 |
MTID |
12比特 |
多拓扑标识符 |
Metric |
8比特 |
开销 |
Flags |
8比特 |
标志位 当前只定义了D标志位。当SID从Level-2渗透到Level-1,必须置位。D标志置位后,SID不能从Level-1渗透到Level-2,以防止路由循环 |
Algorithm |
8比特 |
路由算法 |
Loc Size |
8比特 |
Locator长度 |
Locator (variable) |
可变长度 |
Locator段的网络前缀 |
Sub-tlv-len |
8比特 |
Sub-TLV长度 |
Sub-TLVs (variable) |
可变长度 |
包含的Sub-TLV,例如SRv6 End SID sub-TLV |
SRv6 End SID sub-TLV用于发布End SID。
SRv6 End SID sub-TLV的报文格式如图9所示。
SRv6 End SID sub-TLV包含字段如表5所示。
表5 SRv6 End SID sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为5 |
Length |
8比特 |
长度 |
Flags |
8比特 |
标志位: · C:表示发布G-SID |
SRv6 Endpoint Function |
16比特 |
|
SID |
16字节 |
发布的SRv6 SID |
Sub-sub-tlv-len |
8比特 |
Sub-sub-TLV长度 |
Sub-sub-TLVs (variable) |
可变长度 |
包含的Sub-sub-TLV |
SRv6 End.X SID sub-TLV用于发布一个P2P邻接类型的End.X SID。
SRv6 End.X SID sub-TLV的报文格式如图10所示。
SRv6 End.X SID sub-TLV包含字段如表6所示。
表6 SRv6 End.X SID sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为43 |
Length |
8比特 |
长度 |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA场景 · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 · C:表示发布G-SID |
Algorithm |
8比特 |
算法 |
Weight |
8比特 |
权重,暂不支持 |
SRv6 Endpoint Function |
16比特 |
|
SID |
16字节 |
发布的SRv6 SID |
Sub-sub-tlv-len |
8比特 |
Sub-sub-TLV长度 |
Sub-sub-TLVs (variable) |
可变长度 |
包含的Sub-sub-TLV |
SRv6 LAN End.X SID sub-TLV用于发布一个LAN邻接类型的End.X SID。
SRv6 LAN End.X SID sub-TLV的报文格式如图11所示。
图11 SRv6 LAN End.X SID sub-TLV
SRv6 LAN End.X SID sub-TLV包含字段如表7所示。
表7 SRv6 End.X SID sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为44 |
Length |
8比特 |
长度 |
System ID |
48比特 |
IS-IS的System ID |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA场景 · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 · C:表示发布G-SID |
Algorithm |
8比特 |
算法 |
Weight |
8比特 |
权重,暂不支持 |
SRv6 Endpoint Function |
16比特 |
|
SID |
16字节 |
发布的SRv6 SID |
Sub-sub-tlv-len |
8比特 |
Sub-sub-TLV长度 |
Sub-sub-TLVs (variable) |
可变长度 |
包含的Sub-sub-TLV |
SRv6 SID Structure Sub-Sub-TLV用于发布SRv6 SID的格式,即SRv6 SID中各个字段的长度。
SRv6 SID Structure Sub-Sub-TLV的报文格式如图12所示。
图12 SRv6 SID Structure Sub-Sub-TLV
SRv6 SID Structure Sub-Sub-TLV包含字段如表8所示。
表8 SRv6 SID Structure Sub-Sub-TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为1 |
Length |
8比特 |
长度 |
LB Length |
8比特 |
Locator的Block长度,即公共前缀长度,用于SID压缩 |
LN Length |
8比特 |
Locator的Node ID长度,即节点标识,用于SID压缩 |
Fun.Length |
8比特 |
SID中的Function字段长度 |
Arg.Length |
8比特 |
SID中的Arguments字段长度 |
SRv6通过Endpoint Function定义每个SRv6 SID绑定的动作。除了发布Locator网段路由,IS-IS完成的另一个功能就是将SRv6 SID信息和SID对应的SRv6 EndPoint Function信息通过IS-IS的各类SID sub-TLV发布出去,对网络进行编程。不同SID sub-TLV支持的EndPoint Function类型如表9所示。其中,Y表示该sub-TLV会发布这种类型的SRv6 Endpoint Function,N表示不发布。
表9 IS-IS发布的SRv6 Endpoint Function描述表
SRv6 Endpoint Function |
SRv6 End SID sub-TLV |
SRv6 End.X SID sub-TLV |
SRv6 LAN End.X SID sub-TLV |
End (no PSP, no USP) |
Y |
N |
N |
End (with PSP) |
Y |
N |
N |
End (with USP) |
Y |
N |
N |
End (with PSP & USP) |
Y |
N |
N |
End.X (no PSP, no USP) |
N |
Y |
Y |
End.X (with PSP) |
N |
Y |
Y |
End.X (with USP) |
N |
Y |
Y |
End.X (with PSP & USP) |
N |
Y |
Y |
End.DT4 |
Y |
N |
N |
End.DT6 |
Y |
N |
N |
End.DX4 |
N |
Y |
Y |
End.DX6 |
N |
Y |
Y |
End.OP |
Y |
N |
N |
End with COC |
Y |
N |
N |
End with PSP&COC |
Y |
N |
N |
End with PSP&USP&COC |
Y |
N |
N |
End.X with COC |
N |
Y |
Y |
End.X with PSP&COC |
N |
Y |
Y |
End.X with PSP&USP&COC |
N |
Y |
Y |
End with PSP&USD&COC |
Y |
N |
N |
End with PSP&USP&USD&COC |
Y |
N |
N |
End.X with PSP&USD&COC |
N |
Y |
Y |
在SRv6 TE Policy组网场景中,管理员需要将报文转发路径上的SRv6节点的128-bit SRv6 SID添加到SRv6 TE Policy的SID列表中。因此,路径越长,SRv6 TE Policy的SID列表中SRv6 SID数目越多,SRv6报文头开销也越大,导致设备转发效率低、芯片处理速度慢。在跨越多个AS域的场景中,端到端的SRv6 SID数目可能更多,报文开销问题更加严峻。关于SRv6 TE Policy的详细介绍,请参见《SRv6 TE Policy技术白皮书》。
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时,通常会规划出一个地址块,专门用于SRv6 SID的分配,这个地址块称为SID Space。在一个SRv6域中,SRv6 SID均从SID Space中分配,具有相同的前缀(即公共前缀Common Prefix)。因此,Segment List中SRv6 SID的公共前缀是冗余信息。G-SRv6将Segment List中SRv6 SID的Common Prefix移除,仅携带SRv6 SID中的可变部分,即压缩SID(G-SID),可以有效减少SRv6报文头开销。报文转发过程中,在根据SRH头中的Segment List替换报文的目的地址时,将G-SID与Common Prefix拼接形成新的目的地址,继续查表转发。
G-SRv6对SRv6 SID进行压缩时,既要保证高效压缩,又要兼顾网络规模等需求。综合考虑,32比特是当前较为理想的压缩后SID长度。
如图13所示,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)。
例如,管理员按图14所示规划Locator段长度为64,Common Prefix为10:20:30::/48,Args段长度为16。Common Prefix、G-SID和Args段的总长度为96位,因此,MBZ段长度为128-96=32位。
图14 G-SID的部署示例
图15 G-SRv6报文格式示意图
如果下一个节点的SRv6 SID需要进行压缩,则路由协议在发布本节点的SRv6 SID时,会为该SRv6 SID添加COC标记,标识本SRv6 SID之后是G-SID。 报文中不会携带COC标记,COC是SRv6 SID本身的转发行为,为了方便理解,在报文结构中标识出SRv6 SID是否具有COC标记。
如图15所示,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。
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。
图16 G-SID组成示意图
如图16所示,使用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。如图17所示,在Segment List的一组G-SID中,G-SID按照SI从小到大的顺序从左到右依次排列,即最左侧的G-SID的SI为0,最右侧的G-SID的SI为3。
图17 通过SI定位G-SID
· 0:若Common Prefix、G-SID和SI的位数之和不足128比特,则中间位使用0补齐。
如果SRv6节点上管理员部署的Common Prefix为A:0:0:0::/64、SRv6报文中的当前的G-SID为1:1,该G-SID对应的SI为3,则组合成的目的地址为A:0:0:0:1:1::3。
SRv6节点收到G-SRv6报文后,不同情况下,报文目的地址计算方法为:
· 如果当前报文的目的地址在Segment List中为携带COC标记的128-bit SRv6 SID,则表示下一个SID为G-SID,将SL-1,根据[SL-1]值定位所处的G-SID组,并按照上述方法根据[SI=3]对应的32-bit G-SID计算目的地址。
· 如果当前报文的目的地址在Segment List中为携带COC标记的32-bit G-SID,则表示下一个SID为G-SID:
¡ 如果SI>0,则将SI-1,根据报文当前的SL值定位所处的G-SID组,并按照上述方法根据[SI-1]对应的32-bit G-SID计算目的地址。
¡ 如果SI=0,则将SL-1、将SI值重置,即将SI设置为3,根据报文当前的SL值定位所处的G-SID组,并按照上述方法根据[SI=3]对应的32-bit G-SID计算目的地址。
· 如果当前报文的目的址在Segment List中是未携带COC标记的32-bit G-SID,则将SL-1,同时查找[SL-1]对应的128-bit SRv6 SID,并使用该SRv6 SID替换IPv6头中的目的地址。
· 如果当前报文的目的址在Segment List中是未携带COC标记的128-bit SRv6 SID,则将SL-1,同时查找[SL-1]对应的128-bit SRv6 SID,并使用该SRv6 SID替换IPv6头中的目的地址。
IGP for SRv6只能在AS(Autonomous System,自治系统)内通告SRv6 SID,通过合理编排AS内的SID,规划出AS内的最优路径。大规模网络通常需要跨越多个AS,此时IGP for SRv6无能为力。
BGP-EPE(BGP Egress Peer Engineering,BGP出口对等体工程)用来为域间路径分配SID,该SID称为BGP Peer SID。BGP Peer SID可以通过BGP LS扩展传递给控制器。控制器通过对IGP SID和BGP Peer SID进行编排,实现端到端SRv6路径部署。
BGP-EPE可以自动为对等体分配BGP Peer SID,也可以手工指定BGP Peer SID。
BGP Peer SID分为以下几种类型:
· PeerNode SID:用于指示一个对等体节点。每一个BGP会话都会分配Peer-Node SID。对于基于Loopback接口建立的EBGP邻居,其对应的物理链路可能有多条,那么针对该邻居的Peer-Node SID就会对应多个出接口。基于Peer-Node SID转发时,会在多个出接口间负载分担。
· PeerAdj SID:用于指示到达对等体的一个邻接链路。对于基于Loopback接口建立的EBGP邻居,其对应的物理链路可能有多条,则每条链路都会分配一个Peer-Adj SID。基于Peer-Adj SID转发时,只能通过指定出接口进行转发。
· PeerSet SID:用于标识一组对等体。BGP支持将一组对等体规划为一个Set,基于该组分配SID,这个SID称为PeerSet SID。基于PeerSet SID转发时,会在多个邻居间负载分担。一个PeerSet SID对应多个PeerNode SID和PeerAdj SID。
图18 BGP-EPE示意图
如图17所示,BGP-EPE的SID分配方式为:
· 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建立EBPG邻居关系,BGP-EPE将对等体ASBR 4和ASBR 5加入同一Set组,为其分配PeerSet SID 100:AB::3。当通过PeerSet SID转发流量时,会在多个邻居间负载分担。
在跨域SRv6组网中,通告将域内SRv6 SID和域间Peer SID合理组合,可以实现跨域最优路径转发。
图19 BGP-EPE组网图
如图18所示,在PE 1和PE 2之间建立跨域SRv6路径,该路径包括以下几个部分:
· PE 1到ASBR 1的路径,即SRv6 SID A。
· ASBR 1到ASBR 2的路径,即由BGP-EPE分配的PeerNode SID B。
· ASBR 2到PE 2的路径,即SRv6 SID C。
控制器对域内和域间SID进行编排后,将SRv6路径(SID列表{A, B, C})下发给源节点PE 1,即可实现流量沿着PE 1->ASBR 1->ASBR 2->PE 2的路径转发。
如图27所示,在SRv6网络中,SRv6节点通常会通过BGP LS路由,将链路状态、SID、SRv6 TE Policy的候选路径等信息上报给控制器,控制器根据上报的信息计算出最优路径,并将路径下发给源节点,以便指导报文沿着SRv6路径转发。
发布BGP LS路由的SRv6节点,称为BGP LS发言者。
为了支持SRv6,BGP-LS新定义了一个SRv6 SID NLRI,用于通告和收集SRv6 SID的网络层可达信息。SRv6 SID NLRI的报文格式如图28所示。
SRv6 SID NLRI包含字段如表10所示。
表10 SRv6 SID NLRI的字段描述表
字段名称 |
长度 |
含义 |
Protocol-ID |
8比特 |
协议ID,BGP-LS通过指定协议学习节点的SRv6 SID 信息: · 1:IS-IS Level 1 · 2:IS-IS Level 2 · 4:直连路由 · 5:静态路由 · 6:OSPFv3 · 7:BGP |
Identifier |
64比特 |
节点标识符 |
Local Node Descriptors |
长度可变 |
本地节点描述 |
SRv6 SID Descriptors |
长度可变 |
SRv6 SID相关信息,必须包含SRv6 SID Information TLV |
BGP-LS还在已有Node NLRI、Link NLRI和Prefix NLRI中定义了新的子TLV,以通告SRv6相关信息。
BGP-LS针对SRv6的扩展具体如表11所示。
表11 BGP-LS针对SRv6的扩展
TLV名称 |
作用 |
携带位置 |
SRv6 Capabilities TLV |
通告SRv6能力 |
BGP-LS Node NLRI |
SRv6 Node MSD Types |
通告节点的SID列表中能够包括的SID的最大数目MSD 非新增TLV,仅在Node MSD TLV基础上新增类型 |
BGP-LS Node NLRI |
SRv6 End.X SID TLV |
通告End.X SID 在BGP-EPE组网中,该TLV还可以用于通告Peer-Adj-SID,也就是BGP EPE Peer的End.X SID |
BGP-LS Link NLRI |
SRv6 LAN End.X SID TLV |
通告广播网络邻接类型的End.X SID |
BGP-LS Link NLRI |
SRv6 Link MSD Types |
通告链路的SID列表中能够包括的SID的最大数目MSD 非新增TLV,仅在Link MSD TLV基础上新增类型 |
BGP-LS Link NLRI |
SRv6 Locator TLV |
通告Locator信息 |
BGP-LS Prefix NLRI |
SRv6 SID Information TLV |
通告SRv6 SID |
BGP-LS SRv6 SID NLRI |
SRv6 Endpoint Behavior TLV |
通告SRv6 SID类型 |
BGP-LS SRv6 SID NLRI |
SRv6 BGP Peer Node SID TLV |
通告BGP-EPE组网中的BGP Peer Node SID和BGP Peer Set SID,该TLV必须与BGP Peer Node或Peer Set功能关联的SRv6 End.X SID一起使用 |
BGP-LS SRv6 SID NLRI |
SRv6 SID Stucture TLV |
通告SRv6 SID格式,即描述SID各部分的长度 |
BGP-LS SRv6 SID NLRI可选TLV、SRv6 End.X、IS-IS SRv6 LAN End.X、OSPFv3 SRv6 LAN End.X TLVs的sub-TLV |
SRv6 Capabilities TLV用于通告节点支持SRv6功能,即本节点能够处理SRH。
SRv6 Capabilities TLV的报文格式如图29所示。
SRv6 Capabilities TLV包含字段如表12所示。
表12 SRv6 Capabilities TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为1038 |
Length |
16比特 |
长度 |
Flags |
16比特 |
标志位: · O:用于OAM |
Reserved |
16比特 |
预留值,取值为0 |
SRv6 Node MSD Types用于通告节点的SID列表中能够包括的SID的最大数目。
SRv6 Node MSD Types的报文格式如图30所示。
SRv6 Node MSD Types包含字段如表13所示。
表13 SRv6 Node MSD Types的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型,取值为23 |
Length |
8比特 |
长度 |
MSD-Type |
8比特 |
MSD类型: · 41:SRH Max SL,SRH中Segment Left字段的最大值 · 42:SRH Max End Pop,支持PSP或USP的Endpoint节点能够弹出的最大SID个数 · 45:SRH Max End D,Endpoint节点能够解封装的SID的最大个数 |
MSD Value |
8比特 |
MSD取值 |
SRv6 End.X SID TLV用于发布End.X SID。
SRv6 End.X SID TLV的报文格式如图31所示。
图24 SRv6 End.X SID TLV
SRv6 End.X SID TLV包含字段如表14所示。
表14 SRv6 End.X SID TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为1106 |
Length |
16比特 |
长度 |
Endpoint Behavior |
16比特 |
SRv6 SID类型: · End SID · End.X SID · End.T SID · End.DX6 SID · End.DX4 SID · End.DT6 SID · End.DT4 SID · End.DX2 SID · End.DX2V SID · End.DT2U SID · End.DT2M SID |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA场景 · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 |
Algorithm |
8比特 |
算法 |
Weight |
8比特 |
权重,暂不支持 |
Reserved |
16比特 |
预留值,取值为0 |
SID |
16字节 |
发布的SRv6 SID |
Sub-TLVs (variable) |
可变长度 |
包含的Sub-TLV |
SRv6 LAN End.X SID TLV用于发布一个广播邻接类型的End.X SID。
SRv6 LAN End.X SID TLV的报文格式如图32所示。
图25 SRv6 LAN End.X SID TLV
SRv6 LAN End.X SID TLV包含字段如表15所示。
表15 SRv6 LAN End.X SID TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型: · 1107:表示发布IS-IS的链路状态信息,在该TLV中携带IS-IS的System ID · 1108:表示发布OSPFv3的链路状态信息,在该TLV中携带OSPFv3 Router-ID |
Length |
16比特 |
长度 |
Endpoint Behavior |
16比特 |
SRv6 SID类型: · End SID · End.X SID · End.T SID · End.DX6 SID · End.DX4 SID · End.DT6 SID · End.DT4 SID · End.DX2 SID · End.DX2V SID · End.DT2U SID · End.DT2M SID |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA场景 · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 |
Algorithm |
8比特 |
算法 |
Weight |
8比特 |
权重,暂不支持 |
Reserved |
16比特 |
预留值,取值为0 |
ISIS System-ID (6 octets) or OSPFv3 Router-ID (4 octets) of the neighbor |
48比特或者32比特 |
IS-IS的System ID或OSPFv3 Router-ID |
SID |
16字节 |
发布的SRv6 SID |
Sub-TLVs (variable) |
可变长度 |
包含的Sub-TLV |
SRv6 Link MSD Types用于通告链路的SID列表中能够包括的SID的最大数目,其格式同SRv6 Node MSD Types。
SRv6 Locator TLV用于收集节点的Locator信息。
SRv6 Locator TLV的报文格式如图33所示。
SRv6 Locator TLV包含字段如表16所示。
表16 SRv6 Locator TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为1162 |
Length |
16比特 |
长度 |
Flags |
8比特 |
标志位: · D标志位:表示Locator网段路由不能渗透到IGP中 · A标志位:表示该Locator为Anycast Locator,即一组SRv6节点具有相同的Locator |
Algorithm |
8比特 |
算法 |
Reserved |
16比特 |
预留值,取值为0 |
Metric |
32比特 |
开销 |
Sub-TLVs (variable) |
可变长度 |
包含的Sub-TLV,例如SRv6 End SID sub-TLV |
SRv6 SID Information TLV是SRv6 SID NLRI的一个子TLV,用于通告SRv6 SID相关信息。
SRv6 SID Information TLV的报文格式如图34所示。
SRv6 SID Information TLV包含字段如表17所示。
表17 SRv6 SID Information TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为518 |
Length |
16比特 |
长度 |
SID |
16字节 |
发布的SRv6 SID |
SRv6 Endpoint Behavior TLV是一个必须包含于SRv6 SID NLRI关联的BGP-LS属性中的强制TLV。
SRv6 Endpoint Behavior TLV的报文格式如图35所示。
图28 SRv6 Endpoint Behavior TLV
SRv6 Endpoint Behavior TLV包含字段如表18所示。
表18 SRv6 Endpoint Behavior TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为1250 |
Length |
16比特 |
长度 |
Endpoint Behavior |
16比特 |
SRv6 SID类型: · End SID · End.X SID · End.T SID · End.DX6 SID · End.DX4 SID · End.DT6 SID · End.DT4 SID · End.DX2 SID · End.DX2V SID · End.DT2U SID · End.DT2M SID |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 |
Algorithm |
8比特 |
算法 |
SRv6 BGP Peer Node SID TLV用于在BGP-EPE组网中的BGP Peer Node SID和BGP Peer Set SID,该TLV必须与BGP Peer Node或Peer Set功能关联的SRv6 End.X SID一起使用。
SRv6 BGP Peer Node SID TLV的报文格式如图36所示。
图29 SRv6 BGP Peer Node SID TLV
SRv6 BGP Peer Node SID TLV包含字段如表19所示。
表19 SRv6 BGP Peer Node SID TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
16比特 |
类型,取值为1251 |
Length |
16比特 |
长度 |
Flags |
8比特 |
标志位: · B(Backup):备份标志,用于TI-LFA · S(Set):组标志。如果置位,表示End.X SID是一组邻接 · P(Persistent):永久分配标志。如果置位,表示End.X SID被永久分配 |
Weight |
8特 |
SID的权重值,暂不支持 |
Reserved |
16比特 |
预留值,取值为0 |
Peer AS Number |
32比特 |
BGP邻居的AS号 |
Peer BGP Identifier |
32比特 |
BGP邻居的Router ID |
SRv6 SID Structure TLV用于发布SRv6 SID的格式,即SRv6 SID组成中各个字段的长度。
SRv6 SID Structure TLV的报文格式如图37所示。
图30 SRv6 SID Structure TLV
SRv6 SID Structure TLV包含字段如表20所示。
表20 SRv6 SID Structure TLV的字段描述表
字段名称 |
长度 |
含义 |
Type |
8比特 |
类型 |
Length |
8比特 |
长度 |
LB Length |
8比特 |
Locator的Block长度,即公共前缀长度,用于SID压缩 |
LN Length |
8比特 |
Locator的Node ID长度,即节点标识,用于SID压缩 |
Fun.Length |
8比特 |
SID中的Function字段长度 |
Arg.Length |
8比特 |
SID中的Arguments字段长度 |
· draft-ietf-idr-bgpls-srv6-ext-05
· draft-ietf-bess-srv6-services-02
· draft-ietf-spring-srv6-network-programming-16
· draft-ietf-6man-spring-srv6-oam-05
· draft-ietf-lsr-isis-srv6-extensions-08
· RFC 8667:IS-IS Extensions for Segment Routing
· RFC 8754:IPv6 Segment Routing Header (SRH)