SRv6 Ping/Tracert 介绍
Flags 详细格式:
| | |O-bit|Reserved|
方案一:SRH 里的 O-bit
由于 O-bit 处于 SRv6 报文头中,每一个 SRv6 Endpoint 节点都需要处理并响应 ICMPv6 Ping&Tracert 请求;
所以基于 O-bit=1,就可以实现逐段(Segment-by-Segment)检测;
方案二:利用 End.OP SID
End.OP SID 可以指示将数据包上送到控制平面进行 OAM 处理;
检测 SRv6 Policy 时,头节点会将 End.OP SID 编入 Segment List;
由于只有生成了 End.OP SID 的 SRv6 Endpoint 节点才能处理 ICMPv6 Ping&Tracert 请求报文,所以基于 End.OP SID,就可以实现端到端(End-to-End)检测;
实现方式
当前实现 SRv6 的 Ping&Tracert 有两种方法:
其二是在 ping srv6-te policy 和 tracert srv6-te policy 命令中通过指定 end-op 参数,实现对 SRv6 Policy 的检测;
SRv6 Ping 工作原理
SRv6 Ping 可以分为逐段 Ping 测试与非逐段 Ping 测试
对于逐段检测的情况:
PE1 向 PE2 发起 Ping,携带 P1 的 SRv6 SID(End SID 和 End.X SID)和 PE2 的 End SID,构造并发送 ICMPv6 请求报文;
P1 收到 ICMPv6 请求报文后,会向 PE1 发送 ICMPv6 应答报文,并且向 PE2 转发 ICMPv6 请求报文;
PE2 收到 ICMPv6 请求报文后,向 PE1 发送 ICMPv6 应答报文;
对于非逐段检测的情况:
PE1 向 PE2 发起 Ping,携带 PE2 的 End SID,构造并发送 ICMPv6 请求报文;
P1 收到 ICMPv6 请求报文后,会向 PE2 转发 ICMPv6 请求报文;
PE2 收到 ICMPv6 请求报文后,向 PE1 发送 ICMPv6 应答报文。此时发送端 PE1 上可以查看 Ping 操作的详细信息;
SRv6 Tracert 工作原理
SRv6 Tracert 可以分为 Overlay Tracert 与非 Overlay Tracert;
对于 Overlay 检测的情况:
PE1 向 PE2 发起 Tracert,携带 P1 的 SRv6 SID(End SID 和 End.X SID)和 PE2 的 End SID,构造 UDP 报文,封装 SRH 扩展头并进行转发。此时 IPv6 报文首部的 Hop Limit(等同于 IPv4 中的 TTL)字段的取值设置为 64,每经过一个设备,Hop Limit 字段的取值都会减 1,当该字段的值为 0 时,数据包就被丢弃,并向 PE1 发送 ICMPv6 超时报文;
P1 收到 UDP 报文后,Hop Limit 字段的值变成 63,会向 PE1 发送 ICMPv6 端口不可达报文,并将 UDP 报文向 PE2 转发;
PE2 收到 UDP 报文后,Hop Limit 字段的值变成 62,会向 PE1 发送 ICMPv6 端口不可达报文;
对于非 Overlay 检测的情况:
PE1 向 PE2 发起 Tracert,携带 P1 的 SRv6 SID 和 PE2 的 End SID,构造 UDP 报文,封装 SRH 扩展头并进行转发。此时 IPv6 报文首部的 Hop Limit 字段的取值设置为 1,每经过一个设备,Hop Limit 字段的取值都会减 1,当该字段的值为 0 时,数据包就被丢弃,并向 PE1 发送 ICMPv6 超时报文;
P1 收到 UDP 报文后,Hop Limit 字段的值变成 0,会向 PE1 发送 ICMPv6 超时报文;
PE1 收到 P1 发送的 ICMPv6 超时报文后,将 Hop Limit 字段的取值加 1(此时设置为 2),继续发送 UDP 报文;
P1 收到 UDP 报文后,Hop Limit 字段的值变成 1,会向 PE2 转发 UDP 报文;
PE2 收到 UDP 报文后,Hop Limit 字段的值变成 0,确认 SID 类型为 End SID,并校验上层协议头是否为 UDP 或 ICMPv6;