ICMP 回复 - 入口或出口接口(例如来自跟踪路由)

ICMP 回复 - 入口或出口接口(例如来自跟踪路由)

当跟踪路由启动并收到ICMP 答复从节点,哪个接口

  1. 应该回复来自RFC 1812
  2. 他们实际上是在回复 入口(接收数据包的地方)或出口(如果 ttl 更高,数据包将被发送到下一个节点)

个人评论和研究:

  1. 根据NANOG 发布的幻灯片,RFC 1812 指出它应该是出口接口。我读过 RFC 1812 的 ICMP 部分,但找不到它在哪里提到这一点(我怀疑我对术语的理解有误)。
  2. 我读过各种路由器(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 节适用于这些特定的响应类型。

想象一下这个场景并假设如下:

  1. 假设环路(路由器)之间的所有链路都是等价的三层链路(特别是,R1 和 R2 之间的链路不是 LAG/EtherChannel/等)
  2. 示例网络内的路由是这样的:数据包从发送方 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 的目标地址派生的源地址。

相关内容