Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Network protocols traceroute如何获得每个路由器';什么信息?_Network Protocols_Traceroute - Fatal编程技术网

Network protocols traceroute如何获得每个路由器';什么信息?

Network protocols traceroute如何获得每个路由器';什么信息?,network-protocols,traceroute,Network Protocols,Traceroute,关于traceroute如何使用TTL工作,有很多很好的解释 我不明白的是跟踪路由是如何在每一步上获取路由器信息的 例如,假设有一个如下所示的简单网络,从计算机a(CA)到计算机B(CB): 当TTL在RB过期时,CA如何知道RB的IP地址 在每个跃点上,路由器是否更改数据报的源/目标地址 RB将向CA发回一条ICMP过期消息,其中包含RB的IP地址。虽然这不是你问题的一部分,但CA通常可以使用反向DNS查找RB的名称 “超时”实际上意味着超出了出站ICMP消息中设置的IP“跳数” 编辑以添加:

关于traceroute如何使用TTL工作,有很多很好的解释

我不明白的是跟踪路由是如何在每一步上获取路由器信息的

例如,假设有一个如下所示的简单网络,从
计算机a(CA)
计算机B(CB)

当TTL在
RB
过期时,
CA
如何知道
RB
的IP地址

在每个跃点上,路由器是否更改数据报的源/目标地址

RB将向CA发回一条ICMP过期消息,其中包含RB的IP地址。虽然这不是你问题的一部分,但CA通常可以使用反向DNS查找RB的名称

“超时”实际上意味着超出了出站ICMP消息中设置的IP“跳数”

编辑以添加: CA消息的源地址始终为CA,目标地址始终为CB。CA不知道沿途路由器的地址,除非通过使用跟踪路由之类的方法发现它们

CA首先发送一个ICMP回显(ping)数据报,目标地址为CB,TTL为1。RA接收该数据报,递减TTL,TTL变为零。RA向CA发送ICMP超时消息;该消息的一部分是RA的IP地址,因此CA现在知道第一个跃点的地址

CA然后发送另一个ping,仍然发往CB,但TTL为2。RA将减小TTL并将其发送至RB。RB递减,找到零,并将ICMP时间过期发送回CA,以便CA找到第二个跃点的地址


然后CA将发送第三、第四等数据报,所有数据报都发往CB,每个数据报的TTL增加一个,直到CB应答。

当RB向CA发回ICMP时,RB的IP地址在哪里?我猜RB会将ICMP发送给RA,哪个RA会将其转发给CA?通常是正确的。RB的ICMP响应发送给CA。它可能会通过RA,但如果有较短的返回路线,则不一定。Traceroute根据需要测量出站路线。。我明白了,谢谢!关于我在每个跃点上的第二个问题,路由器是否会更改数据报的源/目标地址?否,来自CA的出站消息总是发往CB,因为CA无法知道(不检查,如TracerRoute)到CB的路径上有哪些路由器。我编辑了我的答案,以提供更全面的解释。我的答案的第4段有一个错误,现在已修复。第二个传出ping的TTL为2,第三个传出ping的TTL为3,以此类推。
COMPUTER A(CA) ----  ROUTER A(RA)  ---- ROUTER B(RB) ---- COMPUTER B(CB)