我正在计算机网络中的Wireshark实验室IP上工作-一种自上而下的方法,我不明白为什么每个正常过期的数据包的TTL都是1。
https://www.dropbox.com/s/rr5wgze9j20gzvu/traceroute-56.pcapng?dl=0

我捕获了Linux中traceroute程序的执行情况(使用56字节),使用以下命令执行:

traceroute http://gaia.cs.umass.edu 56


您可以看到大多数数据包的TTL == 1,我不知道为什么,因为我了解到每个后续跃点的TTL都为+1(或更高)。主机。
我是通过主机(Windows)上的wireshark捕获的。 >

#1 楼

让我尝试回答这个问题,因为它乍看之下会有些复杂。 br />
traceroute尝试确定从主机到目标主机的所有中间步骤,或者只是从主机到目标主机的距离(即跃点数)。为此,它将开始使用“随机”目标端口号和从1开始并持续增加的TTL向目标主机发送数据包。
想法是,中间的每个路由器都会将TTL降低1。因此,如果TTL达到0(实际上就不会这样做,因为将要降低到0的路由器会在此之前产生错误),将返回ICMP“超过生存时间”错误消息,例如捕获文件中的第24个数据包。从中得到的是您的目的地更远,这就是为什么您不断增加TTL的原因。
当数据包的TTL足以到达目的地时,您将收到另一条ICMP错误消息:“目的地不可达(端口不可达)”,例如捕获文件中的数据包编号208。您从中得到的是,上次使用的TTL实际上就是您与目标节点之间的跳数。出现错误的原因仅是因为您正在向目标节点(希望)未在监听的“随机”端口发送消息。

现在详细介绍捕获文件:
traceroute的手册页中,我们可以看到每个TTL使用了3次(选项“ -q”),默认使用的协议是UDP(选项“ -P”)。通过检查前3个UDP数据包(即数据包8-9-10),我们确实可以看到TTL为1。接下来的3个数据包(即11-12-13)具有TTL 2,依此类推。因此,从源头角度看,一切似乎都很好。

然后,在一段时间后,取决于网络的延迟,我们开始获取预期的错误消息。因此,我们可以看到数据包24-25-26是“生存时间超出”错误数据包,因此意味着目的地在更远的地方。

这种反复尝试和错误一直持续到最后,直到数据包208,然后您可以看到“ Port Unreachable”错误消息,这意味着已到达目的地。

通过对发送的数据包和响应进行计数,即使从TTL实际起作用的痕迹中您也可以实际发现,但这是一项繁琐的工作:)

希望有帮助的
/>

评论


超级解释

–ksp0422
14-10-17在3:01

#2 楼

您的客户端仅发送前三个数据包,其TTL为1。接下来的三个数据包的TTL为2。接下来的三个数据包的TTL为3。依此类推。以此类推。

一种更简单的查看方法是在Wireshark中将IP TTL字段设置为其自己的列。只需右键单击任何数据包中的TTL值,然后选择“应用于列”:


从那里,您可以看到数据包8,9,10的TTL为1 。数据包11,12,13的TTL为2,依此类推,依此类推。


发生这种情况是因为Traceroute是这样工作的。它利用了路由器将TTL降低到0时的功能。它没有继续转发数据包,而是向原始客户端发送了“ ICMP TTL Expired in Transit消息”(请参见捕获中的数据包24)。

因此,作为客户端,当您发送TTL为1的第一组数据包时,路径中的第一个路由器将以TTL过期消息进行响应。然后,您测量发送初始消息时接收TTL过期消息所花费的时间,这使您在Traceroute输出中获得前三个值。

然后,您发送另一组三个数据包,其TTL为2。路径中的第一个路由器将其递减为1,然后将其转发到路径中的下一个路由器。收到后,当第二个路由器收到它时,它将TTL递减为0,这会提示它丢弃数据包,并向您发送TTL传输中的过期。 (三个)TTL过期消息,它来自您与您要对其运行traceroute的最终目标之间的传输中的每个路由器。

评论


最好用视觉解释

–ksp0422
14-10-17在3:01

@Eddie,这可能与这个问题无关,但这是我想在评论中问的很少的细节。您能指定如果主机(而非路由器)接收到带有TTL字段1的数据报会发生什么情况?

– Vimal Patel
19/12/10在4:08

@VimalPatel如果将数据包发送到主机,则主机仅接受该数据包。如果TTL为0,则丢弃数据包是路由器功能。

–艾迪
19/12/10在16:27