书籍来源:《SRv6:可编程网络技术原理与实践》
2022年刚出的书,业界的众多大佬合力,将SRv6最前沿的技术分享了出来。一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!
附上汇总贴:SRv6网络编程自学系列之二 | 汇总_COCOgsta的博客-CSDN博客
G-SRv6压缩技术基于SRv6,通过提取公共前缀和Arguments等字段,以减少SRH中SID冗余信息的携带。G-SRv6采用与SRH相同的数据平面,但控制平面需在SRv6控制平面基础上进行协议扩展。
5.4.1 G-SID以及G-SID Container
G-SRv6作为一种通用SRv6技术方案,不仅支持SRv6报头压缩,而且可与传统SRv6 SID混合编程。G-SRv6定义了G-SRv6 SID格式。标准SRv6 SID与G-SRv6 SID格式如图5-5所示,G-SRv6 SID与标准SRv6 SID格式完全兼容。NodeID字段与Function字段合称为G-SID字段。
为了压缩SRv6报头,G-SRv6压缩方案将SID列表中冗余的Common Prefix移除,仅携带变化的G-SID部分。
为便于实现byte对齐,G-SRv6定义了G-SID Container(长度为128bit),用于携带3类SID:
- 标准SRv6 SID;
- Micro SID Container;
- G-SID。
G-SID Container承载G-SID示例如图5-6所示。
5.4.2 G-SRv6数据平面技术
由G-SID Container构成的SRv6 SRH称为G-SRH。G-SRH格式如图5-7所示,其与标准的SRH格式保持一致。
为实现混合编码,G-SRv6定义了压缩子路径的概念。压缩子路径中的每个G-SID都具有相同的Common Prefix。每个压缩子路径的起始128bit需携带完整的Commom Prefix、起始G-SID及Argments/Padding等字段,后续的G-SID Container中则只携带G-SID部分,最后一个G-SID即该压缩子路径的最后一跳。
在报文转发过程中,为了定位G-SRH中压缩子路径的下一个G-SID,需要新增SI来定位其在G-SID Container中的位置。
G-SRH采用SL指针与SI字段相结合的方式实现混合编码条件下的G-SID定位,SL指示G-SID Container在G-SRH中的位置,而SI指示了G-SID在G-SID Container中的位置。G-SID也采用倒序排列,即SI=3时,定位为G-SID Container的最低32bit,SI=0时,定位到G-SID Container的最高32bit。
在转发过程中,只有当Active SID为可压缩SID时,目的地址中的SI字段才有意义。
为了在G-SRH中标识G-SID和SRv6 SID,G-SID提出了COC Flavor概念。COC Flavor是与SID相关的一种行为属性,用于标识下一个SID(Next SID),是否为G-SID,进而用于标识Segment List中SRv6压缩子路径的起始和结束。
Container1中的G-SID1携带了COC特性,即指示Next SID为G-SID类型,报头处理时需将G-SID0更新至目的地址字段中的G-SID字段;而G-SID0未携带COC属性,则指示其下一跳为非压缩的128bit SID,报头处理时需将对应的128bit SID信息全部更新至DA字段中。
以32bit G-SID为例,节点N收到报文后,发现其IPv6报文的目的地址与本地SID表中某SID表项(带COC Flavor)相匹配,则其报文处理伪码如下。
If(DA.SI != 0){
Decrement DA.SI by 1.
} Else {
Decrement SL by 1.
SET DA.SI to 3 in the IPv6 Destination Address
}
Copy Segment List[SL][DA.SI] into the bit[B..B+31] of the IPv6 Destination Address.
复制代码
伪码中,B指Locator Block的长度。由于G-SID长度为32bit,故而将G-SID内容复制到IPv6 DA的[B..B+31]字段中。
G-SRv6混编场景下的G-SRH封装示例加图5-10所示,可见G-SID压缩子路径、SRH、G-SID Container、G-SID之间的关系。
当SRH中存在多个Common Prefix时,不建议采用Reduced模式;当Common Prefix不替换,或Common Prefix可预知时(如域内仅有一个Block),可使用Reduced模式,此时完整路径信息可恢复。
5.4.3 G-SRv6控制平面技术
G-SRv6部署需对控制平面协议进行扩展,包括IGP、BGP-LS及BGP SRv6 Policy等协议。
- IGP扩展
本节以ISIS协议为例,介绍IGP针对G-SRv6的扩展。
(1)扩展SRv6 Capabilities Sub-TLV,增加C标志位,通告节点支持压缩的能力。
(2)扩展SRv6 End SID Sub-TLV、SRv6 End.X SID Sub-TLV和SRv6 LAN End.X SID Sub-TLV,增加C标志位以标识该SID支持压缩。
SRv6 End SID Sub-TLV面向G-SRv6压缩方案的扩展如图5-12所示,SRv6 End.X SID Sub-TLV面向G-SRv6压缩方案的扩展如图5-13所示,SRv6 LAN End.X SID Sub-TLV面向G-SRv6压缩方案的扩展如图5-14所示。
将图5-12 ~ 图5-14与图4-6 ~ 图4-8分别对比可知,相应的SID TLV/Sub-TLV均增加了C标志位。
若C标志位置1且携带了SRv6 SID Structure Sub-sub-TLV,则SRv6 End Sub-TLV中的SID被认定为可压缩SRv6 SID。若SID的Behavior携带了COC Flavor属性,则C标志位必须置1,且必须携带SRv6 SID Structure Sub-sub-TLV。
当不支持压缩的节点接收不支持的Endpoint Behavior的SID(如COC Flavor的SID)时,在本地处理时直接忽略与该SID相关的TLV,但仍会继续发送给其他节点。
- BGP-LS协议扩展
控制器主要通过BGP-LS协议实现对网络拓扑信息的收集。为支持SRv6头压缩,BGP-LS需要扩展3类信息。
(1)扩展SRv6 Capabilities TLV,增加C标志位,通告节点支持压缩的能力。
(2)扩展SRv6 Link Attributes下的SRv6 End.X SID TLV、SRv6 LAN End.X SID TLV,增加C标志位以标识该SID支持压缩。
(3)扩展SRv6 SID Attributes中的Endpoint Function TLV,增加C标志位,标识SID的格式支持压缩。
- BGP SRv6 Policy扩展
控制器可通过BGP SRv6 Policy给头端节点下发SRv6 Policy。为支持SRv6头压缩,需扩展BGP SRv6 Policy。
若头端节点支持SRv6头压缩,则下发包含压缩SID的SRv6 Polic,否则只下发普通SRv6 Policy。在混合编码情形下,为描述Segment List编码格式,扩展定义Segment List Sub-TLV下的SID Encoding Sub-TLV来描述G-SID在SID中的具体位置。SID Encoding Sub-TLV格式如图5-18所示。
此扩展可用于头端节点感知SID信息的场景。
节点在进行G-SRH编码时,若SID Encoding Sub-TLV所描述SID的Block Length为0,G-SID长度为128bit,则表示完整复制128bit SID。否则按照Common Prefix值和G-SID Length进行对应复制。从当前SID Encoding Sub-TLV之后一直到下一个SID Encoding Sub-TLV出现之前,中间的所有SID都按照当前SID Encoding Sub-TLV指示的G-SID位置,将G-SID编码到G-SRH中。