TCP-IP详解卷1(协议读书笔记_8)

Traceroute程序 Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。Traceroute还可以让我们使用IP源路由选项。
Traceroute程序的操作:
为什么不使用上一节中的IP数据报的RR功能记录IP路由:
1.并非所有的路由器都支持记录路由选项,因此该选项在某些路径不能使用;
2.记录路由一般是单项的选项。发送端设置了该选项,那么接收端不得不从收到的IP首部中提取出所有的信息,然后全部返回给发送端;
3.IP首部中留给选项数据的空间有限,不能存放太多的路径。
【TCP-IP详解卷1(协议读书笔记_8)】Traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期)。TTL字段是由发送端初始化一个8bit的字段。推荐的初始值由分配数字RFC指定。每个处理数据包的路由器要把TTL的值减1或者减去数据报在路由器中停留的秒数。由于大多数路由器转发的时间延时都小于1秒,因此TTL最终会成为一个跳站的计数器,所经过的每个路由器都将值减少1。
TTL字段存在的目的是防止数据报在选路时无休止地在网络上流动。当路由器收到一份IP数据报,如果其TTL字段的值是0或1,则路由器不转发该数据报,同时路由器将该数据报丢弃,并给信源机发送一份ICMP“超时”信息。Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。
Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的UDP模块产生一份“端口不可达”错误(见6.5节)的ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
windows下命令为 tracert
局域网输出
TCP-IP详解卷1(协议读书笔记_8)
文章图片
Traceroute示例 运行Traceroute程序得到输出给出了目的主机和其IP地址,指出Traceroute程序最大的TTL字段值为30,40字节的数据报包含20字节IP首部,8字节UDP首部和12字节的用户数数据。
输出TTL值,以及主机和路由器名以及其IP地址。对于每个TTL值,发送3分数据报。每接收到一份ICMP报文,就计算并打印出往返时间。如果5秒中内仍未收到3分数据包的任一一份的相应,就打印一个星号,并发送下一份数据报。
往返时间是发送主机的Traceroute程序计算的,它是指从traceroute程序到该路由器的总往返时间。
之前有两种ICMP超时报文,它们的ICMP报文中code字段不同,下图是这种ICMP差错报文的格式。

TCP-IP详解卷1(协议读书笔记_8)
文章图片
ICMP超时报文 关于Traceroute程序,有一些需要指出的事项:
1.并不能保证现在的路由也是将来所要采用的路由,甚至两份连续的IP数据报都可能采用不同的路由;
2.不能保证ICMP报文的路由与Traceroute程序发送的UDP数据报采用同一路由;
3.返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。
广域网输出
下图是从windows主机到www.baidu.com的情况,与局域网比较相差不大。

TCP-IP详解卷1(协议读书笔记_8)
文章图片
Windows->www.baidu.com
IP源站选路选项
通常IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。应用程序对此不进行控制,通常也不关心。
源站选路的思想是由发送者指定路由,它可以采用以下两种形式:
1.严格的源站路由选择。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源站路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个"源站路由失败"的ICMP差错报文。
2.宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。
下图给出了源站路由选项的格式:

TCP-IP详解卷1(协议读书笔记_8)
文章图片
源站路由格式 这个格式与我们之前记录路由选项格式基本一致。不同之处在于,对于源站选路,我们必须在发送IP数据前进行填充IP地址清单; 而对于记录路由选项来说,必须尽可能的分配空间,以达到9个地址。
对于宽松的源站选路来说,code字段的值为0x83;而对于严格的源站选路,其值为0x89。
源站路由选项的实际称呼为“源站及记录路由”(对于宽松的源站选路和严格的源站选路,分别用LSRR和SSRR表示),这是因为在数据报沿路由发送过程中,对IP地址清单进行了更新。下面是其运行过程:
1.发送主机从应用程序接受源站路由清单,将第一个表项去掉(它是数据报的最终目的地址),将剩余的项移到1个项中,并将原来的目的地址作为清单的最后一下那个。指针仍然指向第一项。
2.每个处理数据报的路由器检查其是否为数据报的最终地址。如果不是,则正常转发数据报(在这种情况下,必须指明宽松源站选路,否则就不能接收到该数据报)。
3.如果该路由器是最终目的,且指针不大于路径的长度,那么(1)有ptr所指定的清单中的下一个地址就是数据报的最终目的地址;(2)由外出接口相对应的IP地址取代刚才使用的源地址; (3)指针加4。

TCP-IP详解卷1(协议读书笔记_8)
文章图片
示例
小结
在一个TCP/IP网络中,traceroute程序是不可缺少的工具。其操作很简单:开始时发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可达的报文。

    推荐阅读