SRv6网络编程自学系列 | 网络程序运行:SRv6报文转发

书籍来源:《SRv6网络编程:开启IP网络新时代》

这本书已经出了很多年了,但多年之后因为工作需要再来读一遍,除了温习之外,发现自己学到了更多的知识。一边学习一边整理读书笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:SRv6网络编程自学系列 | 汇总_COCOgsta的博客-CSDN博客


2.5.1 本地SID表

SRv6节点维护一个本地SID表,该表包含所有在该节点生成的SRv6 SID信息。本地SID表有以下用途。

  • 存储本地生成的SID,例如End.X SID。
  • 指定绑定到这些SID的指令。
  • 存储和这些指令相关的转发信息,例如VPN实例、出接口和下一跳等。

2.5.2 报文转发流程

本节采用一个示例说明SRv6的报文转发流程。

如图2-9所示,假设现在有报文需要从主机H1转发到主机H2,H1将报文发送给节点A处理。节点A、B、D和F均为支持SRv6的设备,节点C和节点E为不支持SRv6的设备。

图2-9 SRv6的报文转发流程

我们在SRv6源节点A上进行了网络编程,希望报文经过B-C和D-E这两条链路,然后送达节点F,再经节点F送达主机H2。以下是报文从节点A到节点F的详细处理步骤。

① SRv6源节点A的处理。节点A将SRv6路径信息封装在SRH中,指定B-C链路和D-E链路的End.X SID。还要封装节点F发布的End.DT4 SID A6::100。

按照逆序形式压入SID序列,由于有3个SID,所以节点A封装后的报文的初始SL = 2。SL指向当前需要处理的操作指令,也就是Segment List[2]字段。

节点A将其值A2::23复制到外层IPv6报文头的目的地址字段,并且按照最长匹配原则查找IPv6路由表,将报文转发到节点B。

图2-10 SRv6源节点A的处理

② Endpoint节点B的处理。节点B收到报文以后,根据IPv6报文的目的地址A2::23查找本地SID表,命中End.X SID。执行End.X SID的指令动作,将SL的值减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。

③ 中转节点C的处理。当报文到达节点C后,节点C只支持处理IPv6报文头,无法识别SRH,此时节点C按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发给当前的目的地址所代表的节点D。

④ Endpoint节点D的处理。节点D收到报文以后,根据IPv6报文的目的地址A4::45查找本地SID表,命中End.X SID。执行End.X SID的指令动作,将SL的值减1,并将SL指示的SID更新到外层IPv6报文头的目的地址字段,同时将报文从End.X SID绑定的链路发送出去。

图2-11 Endpoint节点B的处理

图2-12 Endpoint节点D的处理

⑤ 中转节点E的处理。节点E只支持IPv6报文头处理,无法识别SRH,此时节点E按照正常的IPv6报文处理流程,按照最长匹配原则查找IPv6路由表,将报文转发给当前目的地址所代表的节点F。

图2-13 中转节点E的处理

⑥ Endpoint节点F的处理。节点F收到报文以后,根据外层IPv6目的地址A6::100查找本地SID表,命中End.DT4 SID。执行End.DT4 SID的指令动作,解封装报文,去除IPv6报文头,再将内层IPv4报文在End.DT4 SID绑定的VPN实例的IPv4路由表中进行查表转发,最终将报文发送给主机H2。


版权声明:本文为guolianggsta原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。