标签:数据包 SP List Header IPv6 包头 Segment 节点
segment routing是个新的转发技术,利用了IGP/BGP作为控制平面协议来分配、分发SID(Segment-ID 段ID),使用MPLS或IPv6作为转发平面。其中SRv6使用IPv6来作为转发平面。今天我们来讨论下SRv6中IPv6 Header的基本操作。
首先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(路由扩展包头)。如下图示例:
在路由扩展包头中,有个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 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地址的字段里面,告诉路由器下一跳需要去往哪个节点,这样一跳一跳将数据包发往目的地。下面我们用一个数据包的转发过程来说明一下它的工作流程,如下图:
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
本站声明:
1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。