我在Stack Overflow问这个问题,然后认为这可能是更好的地方问。
鉴于以下情况:
PC — | aa RTR1 bb | — | aa RTR2 bb | — | aa RTR3 bb | 等等
每一个| aa rtr bb | 是指一个具有两个端口aa和bb的路由器。
我的问题是这个。 当你做一个跟踪路由从路由器端口地址应该回应的时间超过生活中的PC在PC上的路由信息?
我似乎记得被教导认为路由器与端口一样多,所以在我的情况下,当aa将数据包转发到bb并将ttl递减到0时,它将是aa端口的地址失败的消息。 我试图find明确的答案。
谢谢。
没有太多的路由工作 。 你将只能看到你正在“面对”你机器的界面的反应。
所以,在你的例子中,TTL Exceeded消息总是来自“aa”接口之一。 基本上,处理数据包的逻辑发生在两个接口之间,然后任何响应或转发都发送出正确的接口。 在你的情况下,TTL超出的信息将被发送出“aa”,因为这是返回到你的机器的唯一途径。
确定的反应,也许不是,但是我所做的所有testing都是这样。 我认为路由器无法路由,因为TTL为空,因此在路由之前发送ICMP数据包。 所以这是path中find的第一个IP。
«RTR1将回应港口aa的地址或港口bb的地址»
这是完全武断的,有点愚蠢的问题。
考虑ICMP通过端口“aa”进入的情况,但实际上是针对端口“bb”的地址:哪一个应该是ICM回复中的源地址? 'AA'? 'BB'? 或者路由器的其他地址?
»将路由器视为与端口一样多的部分»
节点(touter或计算机)在TCPdevise中没有地址,只有接口有地址,但是ICMP由节点而不是接口完成。 这造成了相当多的含糊之处。 他们实际上是故意的。 请注意,Linux TCP / IP堆栈有一个不同的devise,但它是不正常的。
正如其他人指出的,路由器大多数时候会从“aa”接口回答。 由于我不能发表评论,所以我会补充以前的答案。 在路由器之间的点对点链路上也可能有无编号的接口,如果你想保存一些IP地址,并且你不想对ping接口单独感兴趣。 在这种情况下,您可以通过分配给回送接口的IP地址来访问路由器,并且这个地址将是您在traceroute中也会看到的地址。
然而,这是一个特例,而不是一个特别好的操作实践。