Traceroute程序
Linux和Unix中为Traceroute,Windows中对应的是Tracert。如:Tracert www.baidu.com 输出为路由信息。
该命令可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。Tracert程序使用ICMP报文和IP首部中的TTL字段。每个处理数据报的路由器都需要把TTL值减去1,或减去数据报在路由器中的秒数。由于大多数路由器转发数据报的时间都小于1秒钟,因此TTL最终成为一个跳站的计数器,所经过的每个路由器都将其值减一。TTL字段的目的是防止数据报在选路时无休止的在网络中流动。
让路由器收到一份数据报,如果其TTL字段是0或者1,则路由器不转发该数据报。路由器将该数据报丢弃,并给信源主机发送一份ICMP“超时”信息。
Tracerout的工作原理
1)信源主机发送一份TTL字段为1的IP数据报给目的主机。处理这份数据报的第一个路由器将TTL值减1,丢弃该数据报,并发回一份超时ICMP报文。这样就得到了该路径中的第一个路由器的地址。
2)然后Traceroute程序发送一份TTL值为2的数据报,这样我们就可以得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机。但是目的主机哪怕接收到TTL值为1的IP数据报,也不会丢弃该数据报并产生一份超时ICMP报文,这是因为数据报已经到达其最终目的地。那么我们该如何判断是否已经到达目的主机了呢?
3)Traceroute程序发送一份UDP数据报给目的主机,但它选择一个不可能的值作为UDP端口号(大于30 000) ,使目的主机的任何一个应用程序都不可能使用该端口。因为,当该数据报到达时,将使目的主机的 UDP模块产生一份“端口不可达”错误ICMP报文。这样,Traceroute程序所要做的就是区分接收到的ICMP报文是超时还是端口不可达,以判断什么时候结束。
IP源站选路
通常IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。应用程序对此不进行控制,而且通常也并不关心路由。不过可以采用Traceroute程序工具来发现实际的路由。
源站选路的思想是由发送者指定路由。它可以采用以下两种形式:
1)严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。
2) 宽松的源站选路。发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。