从我目前收集到的信息来看,Tracert 的工作方式是发送 3 条 ICMP 回显消息。从 TTL 值 1 开始。对于数据包遇到的每个路由器,TTL 值都会减少。对于第一个路由器,1-1 = 0,因此 ICMP“超时”消息将发送回发送方计算机。接下来,发送方计算机将 TTL 值增加到 2,然后对第二个路由器重复此循环(2-->1-->0),依此类推。
如果我的理解不正确,请纠正我。
我很好奇,为什么 Tracert 在命令提示符中不显示 ICMP“超出时间”消息,因为它实际上是一个错误消息?循环只是继续进行。
谢谢。
答案1
正如您所说,“超出时间”的“错误”消息由 tracert 显示为获取该错误所需的毫秒数。该错误证明第 1、第 2、第 3 等路由器收到了数据包,并且上面有该路由器的地址,因此 tracert 知道数据包所走的路径。当它们不回来后你会得到*
打印的和Request timed out
该路由器的地址。
答案2
“错误消息”(实际上与其说是错误,不如说是礼貌信息)没有显示,因为它没有被发送到 stderr tracert
。我看不出当程序预期并正确处理数据时,发送无关的错误消息可能有什么价值。
您的其余解释是正确的。