SRv6网络编程自学系列之二 | G-SRv6头压缩方案

书籍来源:《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等协议。

  1. 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,但仍会继续发送给其他节点。

  1. 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的格式支持压缩。

  1. 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中。

猜你喜欢

转载自blog.csdn.net/guolianggsta/article/details/129938913