在IETF的SRv6 Network Programming文稿中定义了很多Behavior(行为),它们也被称为指令。每个SID都会与一个指令绑定,用于告知节点在处理SID时需要执行的动作。SRH可以封装一个有序的SID列表,为报文提供转发、封装和解封装等服务。
SRH
首先来了解一下SRH。SRH是IPv6扩展报文头通过携带Segment List等信息显式地指定一条SRv6路径。
SRH的格式如图:
各字段说明:
指令集
命名规则
- End:表示当前指令的终止,开始执行下一个指令。对应的转发动作是将SL值减1,并将SL指向的SID复制到IPv6报文头的目的地址字段。
- X:指定一个或一组三层接口转发报文。对应的转发行为是按照指定出接口转发报文。
- T:查询路由转发表并转发报文。
- D:解封装。移除IPv6报文头和与它相关的扩展报文头。
- V:根据VLAN(Virtual Local Area Network,虚拟局域网)查表转发。
- U:根据单播MAC查表转发。
- M:查询二层转发表,进行组播转发。
- B6:应用指定的SRv6 Policy。
- BM:应用指定的SR-MPLS Policy。
常见指令
所有指令都是由上述一个或多个原子组合而成。我们介绍几个常用的指令。
- End.X全称为Layer-3 cross-connect,End.X将报文从指定的出接口转发,可用于TI-LFA、严格显式路径的TE等场景。
- End.DT4全称为Decapsulation and specific IPv4 table lookup,支持解封装报文,在指定IPv4路由表查表转发,主要用于L3VPNv4场景,可作为基于VPN实例(per-VPN)的VPN标签使用。
- End.DT6全称为Decapsulation and specific IPv6 table lookup,支持解封装报文,在指定的IPv6路由表中查表转发,主要用于L3VPNv6场景,可作为基于VPN实例(per-VPN)的VPN标签使用。
以End.DT4为例:
在下面的拓扑图里,R1-R2-R3-R4是SRv6域,R1和R4各拿一个loopback接口放到vpna中,这样我们可以简单模拟一个L3VPNv4场景1.1.1.1到4.4.4.4 经过SRv6域互通的场景,
这时,在R1的SRv6的Local SID 1001::1:0:0/128 的类型是End.DT4,会查找vpna的路由表。
从R4上也能看到 vpna路由表中1.1.1.1/32 下一跳1001::1:0:0,
4.4.4.4 ping 1.1.1.1,在PE1上收到外层IPv6目的是1001::1:0:0的报文,按照指令解封装,到vpna路由表查找路由。
解封装后内层目的IP是1.1.1.1,在vpna路由表中找到1.1.1.1下一跳送出去。
Flavor附加行为
PSP:倒数第二个Endpoint节点移除SRH。
USP:最后一个Endpoint节点移除SRH。
USD:最后一个Endpoint节点解封装外层IPv6报文头。