《TCP/IP协议详解 卷1》--- Traceroute程序

Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。
Traceroute程序还可以让我们使用IP源路由选项。

Traceroute程序的操作
当路由器收到一份IP数据报,如果其TTL字段是0或1,则路由器不转发该数据报,相反,路由器将该数据报丢弃,并给信源
机发一份ICMP“超时”信息。Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。

我们现在可以猜想一下Traceroute程序的操作过程。它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。然后 Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报
到达目的主机。但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?

Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30 000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。

输出

终端1:

tcpdump -i enp0s8 icmp

终端2:

traceroute -I www.baidu.com

在这里用书中给出的例子

局域网输出:
这里写图片描述
对于每个TTL值,发送3份数据报。每接收到一份ICMP报文,就计算并打印出往返时间。如果在5秒种内仍未收到3份数据报的任意一份的响应,则打印一个星号,并发送下一份数据报。
第 1个发往bsdi的探测数据报的往返时间是 20 ms,大于后面两个,是因为发生了一次 ARP交换。
这里写图片描述
打印出了TTL字段为1的IP数据报的注释 [ttl 1]。当TTL值为0或1时,tcpdump打印出这条信息,以提示我们数据报中有些不太寻常之处。

广域网输出:
这里写图片描述
TTL字段为6的第2个RTT(590)几乎是其他两个RT T值(234和262)的两倍 。它表明IP路由的动态变化。在发送主机和这个路由器之间发生了使该数据报速度变慢的事件。我们不能区分是发出的数据报还是返回的 ICMP差错报文被拦截。
这里写图片描述

IP源站选路选项
源站选路(source routing)的思想是由发送者指定路由。它可以采用以下两种形式:
• 严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。
• 宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。
这里写图片描述
源站选路vs记录路由选项:对于源站选路,我们必须在发送IP数据报前填充IP地址清单;而对于记录路由选项,我们需要为 IP地址清单分配并清空一些空间,并让路由器填充该清单中的各项。同时,对于源站选路,只要为所需要的IP地址数分配空间并进行初始化,通常其数量小于9。而对于记录路由选项来说,必须尽可能地分配空间,以达到9个地址。

对于宽松的源站选路来说,code字段的值是0x83;而对于严格的源站选路,其值为0x89。

这里写图片描述
#表示指针字段,其值分别是 4、8、12 和16。长度字段恒为15(三个IP地址加上三个字节首部)。可以看出,每一跳IP数据报中的目的地址都发生改变。

使用-g选项可指定宽松路由,使用-G选项可指定严格路由。
这里写图片描述
RTT后面的!S。这表明traceroute程序接收到ICMP“源站路由失败”的差错报文:即type字段为3,而code字段为5。

猜你喜欢

转载自blog.csdn.net/u012319493/article/details/80876460