segment routing是个新的转发技术,利用了IGP/BGP作为控制平面协议来分配、分发SID(Segment-ID ID)使用MPLSIPv6作为转发平面。其中SRv6使用IPv6作为转发平面。今天我们来讨论下SRv6IPv6 Header的基本操作。

首先IPv6包头有基本包头和扩展包头之分基本包头40 bytes,里面包含一个重要字段next header”这个字段类似于IPv4包头protocol字段,用于表示上层是什么协议(IPv4报文的负载是什么报文),比如next header字段等于17时候,表示后面跟着UDP报文;等于6时候表示后面跟着TCP报文;4时候表示后面跟了一个IPv4头部(IPv4 over IPv6)。其中next header等于43时候,后面跟的是IPv6Routing Extension Header(路由扩展包头)下图示例

路由扩展包头中,有个Routing Type字段,被几个RFC所定义,其中

0 表示Source Route (2007年被取消)

1 表示Nimred (2009被取消)

2 表示Mobility (RFC 6275定义)用于移动

3 表示RPL Source Route (RFC 6554定义)主要用于IOT

4 表示Segment Routing (现在tentative)意味着临时使用,没有被RFC定义,不排除将来会设计一个新的扩展包头可能


    所以一个SRv6路由头部就是这么多,一个基本包头(next-header = 43)一个路由扩展包头(Routing Type = 4)后面是Segment Routing部分字段。这个扩展路由包头中,最重要的字段是Segments LeftFirst SegmentSegment List我们大概来解释这些字段。

Segment List其中我们在头端压路径标签的时候,会压入多层标签(是基于MPLSSRTE操作方式)对于SRv6说,会在SR specific中压入多个数据包传输过程中需要经过的节点。其中Last Segment,或称为尾节点(Tail-end)称为终节点(End-point)Segment List编号为0 (图上Segment List [0]),然后按顺序反向将需要经过的节点压入SR specific中,比如经过N节点,则最后一个压入的是Segment List [n-1]

First Segment:意思数据包从头端发送到终节点经过的第一跳设备,Segment List中,下面的节点是离头端更近的,最上面的是终节点,所以在这个图First Segment字段的值是n-1

Segment Left简称SL,指的是Active Segment,意思是现在我们将要去往的下一跳是谁。在头端的时候,Segment Left字段的值为n-1意思是我们去往终节点,下一个要经过的节点是Segment List [n-1]


工作原理是每经过一个Segment List包含的节点,SL值会递减同时会将Segment List [SL]节点SID (实际上是一个IPv6地址,只不过可能有不同功能)拷贝到基本包头的目的IPv6地址的字段里面,告诉路由器下一跳需要去往个节点,这样一跳一跳将数据包发往目的地。下面我们用一个数据包的转发过程来说明一下它的工作流程如下图:

第一张图:从图中可以看到,A头端节点,D终节点我们programming压入必须经过的节点BCD。所以SR Header中压入(反向压入)

Segment List [0] = D

Segment List [1] = C

Segment List [2] = B

这时B我们要经过的第一个节点,所以First SegmentB节点的下标2而数据包还没有发送,所以这些Segment List的节点还没有到达,所以Segment Left也为B下标2同时会将Segment List [SL = 2] = B地址拷贝IPv6基本包头的Destination Address中,你可以看到IPv6基本包头的目的地址为B

第二张图:从图中我们可以看到数据包发送到了中间的节点,你可以理解为Underlay中经过的任意节点,这个节点仅仅会根据IPv6基本包头的目的地址B来正常的路由数据包,除Hop Limit字段以外,其他字段基本不变;

第三张图:这时数据包到达了节点B收到报文后查看IPv6基本包头的目的地址B这时可以拆掉基本包头,看后面的扩展包头,发现是一个SR HeaderSegment Left字段2表示还没有到达节点,需要继续转发,所以这时First Segment字段不变,Segment Left1变为1并且将Segment List [SL=1] = C节点的地址拷贝到IPv6基本包头Destination Address中,你可以看到此时IPv6基本包头的目的地址为C然后继续转发数据包

第四张图:数据包达到节点D此时查看IPv6基本包头目的地址为自己,拆掉看扩展包头,扩展包头中SL等于0表示已经到达终节点。然后根据Segment List中的Function部分payload部分进行服务

 

以上工作流程中,我们可以发现SRv6实际很容易理解,也很容易做Programming(编程)处理,原因是SR HeaderSegment List你可以根据手工控制器等方式进行编写。所以SRv6运营商和大型企业核心网中下一步可以发展应用的技术。

 

为了帮助更多技术爱好者了解SR-TE的技术,SR-TE的专题技术文案会不断推出。相关的专题视频也会配套在IE-LAB的各学习平台发布。而对新技术的不断学习,应成为网络工程师必备的学习习惯。