其他分享
首页 > 其他分享> > SP专题Segment Routing技术浅淡SRv6中IPv6 Header的处理过程

SP专题Segment Routing技术浅淡SRv6中IPv6 Header的处理过程

作者:互联网

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

1.png

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

2.png

在路由扩展包头中,有个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定义,不排除将来会设计一个新的扩展包头的可能

3.png


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

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

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

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


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

4.png

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

Segment List [0] = D,

Segment List [1] = C,

Segment List [2] = B,

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

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

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

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

 

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

 

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





标签:数据包,SP,List,Header,IPv6,包头,Segment,节点
来源: https://blog.51cto.com/11042505/2484826