当一个traceroute被启动并且从这个节点接收一个ICMP应答时 ,哪一个接口
个人意见和研究:
我没有虚拟思科实验室,也没有足够的内存来在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。
考虑这种情况,并假设如下:
在现代实施下的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请求的目的地址的源地址。