当跟踪路由启动并收到ICMP 答复从节点,哪个接口
- 应该回复来自RFC 1812。
- 他们实际上是在回复 入口(接收数据包的地方)或出口(如果 ttl 更高,数据包将被发送到下一个节点)
个人评论和研究:
- 根据NANOG 发布的幻灯片,RFC 1812 指出它应该是出口接口。我读过 RFC 1812 的 ICMP 部分,但找不到它在哪里提到这一点(我怀疑我对术语的理解有误)。
- 我读过各种路由器(Junos、Cisco)从不同的接口回复,但大多数回复都是从入口进行的(如 NANOG 幻灯片 10 所述)。
我没有虚拟思科实验室,也不认为有足够的 RAM 在 VirtualBox 中设置多个 VM 路由器。
答案1
嗨,我迟到了,但如果你仍然好奇......
R Steenbergen 的 NANOG 幻灯片中的引述是正确的。该行为的定义如下第 4.3.2.4 节RFC1812 中规定:
路由器发出的 ICMP 消息中的 IP 源地址必须是与传输 ICMP 消息的物理接口关联的 IP 地址之一
根据某个 Traceroute 的实现,对跟踪的响应可能是 ICMP 目标无法到达(即 Unix 实现的 traceroute)或 ICMP 超时(Windows 启动的 traceroute)。我相信 Steenbergen 的演讲中已经涵盖了这一点。由于这两个部分都没有规定指定 ICMP 响应的源地址,我们假设第 4.3.2.4 节适用于这些特定的响应类型。
想象一下这个场景并假设如下:
- 假设环路(路由器)之间的所有链路都是等价的三层链路(特别是,R1 和 R2 之间的链路不是 LAG/EtherChannel/等)
- 示例网络内的路由是这样的:数据包从发送方 S 沿着较低的路径到达接收方 R,然后通过较高的路径返回,方向如下:
现代实现的 Traceroute 如下所示:
traceroute to R
1 A 0.329 ms A 0.425 ms A 0.471 ms
2 C 0.349 ms C 0.435 ms C 0.473 ms
3 F 0.359 ms G 0.445 ms F 0.481 ms
4 R 0.369 ms R 0.455 ms R 0.491 ms
如果路由器按照规范进行编码,则跟踪将如下所示:
traceroute to R
1 B 0.329 ms B 0.425 ms B 0.471 ms
2 D 0.349 ms E 0.435 ms D 0.481 ms
3 H 0.369 ms H 0.445 ms H 0.491 ms
4 R 0.389 ms R 0.455 ms R 0.496 ms
因此,从更通俗的意义上讲,现代实现告诉我们如何到达特定主机。原始规范会告诉我们如何离开路由器,但不会告诉我们如何到达那里。
请注意,我们可能认为这会导致 Ping 中断,但规范明确涵盖了这种情况:
ICMP 回显答复中的 IP 源地址必须与相应的 ICMP 回显请求消息的特定目标地址相同
。
换句话说,对于 Ping 来说,ICMP Echo Reply 源地址不应该是第 4.3.2.4 节指定的与出口接口相关联的地址,而应该使用从原始 ICMP Echo Request 的目标地址派生的源地址。