ICMP回复 – 入口或出口接口(例如,从跟踪路由)

当一个traceroute被启动并且从这个节点接收一个ICMP应答时 ,哪一个接口

  1. 应该根据RFC 1812来回答。
  2. 他们实际上是从入口 (他们接收数据包的地方)或出口 (数据包将被发送到的地方 – 即,如果ttl较高的情况下到达下一个节点)

个人意见和研究:

  1. 根据NANOG发布的幻灯片 ,RFC 1812指出它应该是出口接口。 我已经阅读了RFC 1812的ICMP部分,并且找不到说明的地方(我怀疑我对术语的理解是closures的)。
  2. 我已经阅读了不同接口的各种路由器(Junos,Cisco)回复,但是大多数回复forms的入口(如NANOG幻灯片10所述)。

我没有虚拟思科实验室,也没有足够的内存来在VirtualBox中设置多个VM路由器。

嗨,我迟到了,但如果你还好奇,

R Steenbergen的NANOG幻灯片的引用是正确的。 该行为在RFC1812的4.3.2.4节中定义,其中规定:

由路由器发起的ICMP消息中的IP源地址必须是与发送ICMP消息的物理接口相关的IP地址之一

根据Traceroute的实现,对跟踪的响应可能是ICMP Destination Unreachable(即Unix实现的跟踪路由)或ICMP Time Exceeded(Windows启动的跟踪路由)。 我相信这在Steenbergen的介绍中已经涵盖了。 由于这两部分都没有规定指定ICMP响应的源地址,所以我们假定4.3.2.4节适用于这些特定的响应types。

考虑这种情况,并假设如下:

  1. 假设圆圈(路由器)之间的所有链路是同等成本的三层链路(特别是R1和R2之间的链路不是LAG / EtherChannel /等)
  2. 在示例networking中的路由是这样的,即分组从下层path从发送者S到接收者R,并且经由更高path以指示的方向返回

在现代实施下的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 

所以从更通俗的angular度来说,现代实现告诉我们如何到达一个特定的主机。 原来的规范会告诉我们如何离开路由器,但不会告诉我们如何到达那里。

请注意,我们可能会认为这会导致Ping中断,但是规范明确说明了这种情况:

ICMP Echo Reply中的IP源地址必须和
对应的ICMP回声请求的特定目的地址
信息。

换句话说,对于Ping,ICMP Echo Reply源地址不应该是4.3.2.4节规定的与出口接口关联的地址,而应该使用源于原始ICMP Echo请求的目的地址的源地址。