1.Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由(Traceroute程序不需要中间路由器具备任何特殊的或可选的功能)。
Traceroute程序只需要目的端运行一个UDP模块----其他不需要任何特殊的服务器应用程序。
Traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期,由发送端初始设置一个8bit字段,跳站的计数器,用来防止数据报在选路时无休止地在网络中流动,在循环传递的数据报上加上一个生存上限)。
当路由器收到一份IP数据报,其TTL字段是0或者1,则路由器不转发该数据报(目的主机可以将它交给应用程序)。相反,路由器将该数据报丢弃,并给信源机发送一份ICMP“超时”信息。Traceroute程序的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。
2.Traceroute程序的操作过程。
(1)它发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值减1,丢弃数据报,并发回一份超时ICMP报文。就会得到该路径中的第一个路由器的地址。
(2)Traceroute程序发送一份TTL值为2的数据报,这样可以得到第二路由器的地址。
(3)继续这个过程直至该数据报到达目的主机。(但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃数据报并产生一份超时ICMP报文,因为数据报已到达其最终目的地) Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30000),使得目的主机的任何一个应用程序都不可能使用该端口号。Traceroute程序所要做的就是区分接收的ICMP报文是超时还是端口不可达,以判断什么时候结束。
Traceroute程序必须可以为发送的数据报设置TTL字段。并非所有与TCP/IP接口程序(所有的实现)都支持这项功能,Traceroute程序界面通常需要用户拥有超级用户权限(可能需要特殊权限以在主机上运行该程序)
3.在局域网中进行输出
第0行:目的主机名;IP地址;traceroute程序最大的TTL字段值为30;40字节的UDP数据报(20字节IP首部、8字节的UDP首部、12字节的用户数据)
第1行:TTL;主机/路由器名(IP地址);对于每个TTL值,发送3份数据报。每收到一份ICMP报文,就计算并打印出往返时间(如果5秒内仍未收到3份数据报的任意一份的响应,就打印一个星号,并发送下一份数据报)(往返时间:由发送主机的traceroute程序计算的,指的是从traceroute程序到该路由器的总往返时间)
3.2traceroute程序需要指出:
(1)并不能保证现在的路由也是进来要采用的路由,甚至两份连续的IP数据报都可能采用不同的路由。
(2)不能保证ICMP报文的路由与traceroute程序发送的UDP数据报采用同一路由。
(3)返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。
4.IP源站选路选项
IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。采用traceroute程序的工具来发现实际路由。
源站选路*(source routing)的思想是由发送者指定路由。采用形式:
一:严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。
二:宽松的源站选路。发送端指明了一个数据报进过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。
源站路由选项的实际称呼为“源站及记录路由”(数据报沿路由发送过程中,对IP地址清单进行了更新)
5.在一个TCP/IP网络中,traceroute程序是不可缺少的工具,操作:
(1)发送一个TTL字段为1的UDP数据报,然后将TTL字段每次加1,以确定路径中的每个路由器。每个路由器在丢弃UDP数据报时都返回一个ICMP超时报文2,而最终目的主机则产生一个ICMP端口不可达的报文。