Traceroute程序
引言
Traceroute程序是一个能更深入探索TCP/IP协议的方便可用的工具,它可以让我们看到IP数据报从一台主机到另一台主机所经过的路由,还可以让我们使用IP源路由选项。
Traceroute程序的操作
为什么不使用IP记录路由选项而是用Traceroute?
原因有三:
- 并非所有路由器都支持记录路由选项。
- 记录路由一般是单向的选项。
- 主要原因:IP首部中留给选项的空间有限,不能存放当前大多数的路径。
Traceroute运行原理:
- 使用ICMP报文和IP首部中的TTL字段(生存周期)。
- 每个处理数据包的路由器都需要把TTL的值-1.TTL字段的目的是防止数据报在选路是无休止地在网络中流动。
- 当TTL被减为0的时候,路由器不转发数据报,并且返回一份ICMP“超时”信息。
- 当数据报已经到达最终目的的时候,不会返回ICMP“超时”报文,那就不知道已经到达了目的地。所以!Traceroute程序会发一份UDP数据报给目的主机(它使用一个不可能的值作为UDP端口号,应该封装在IP中),当数据报到达目的主机,就可以往上分用,抵达传输层,这个时候产生一份“端口不可达”错误的ICMP报文。
操作过程
- 发送一个TTL为1的IP数据报出去,第一个路由器把TTL减为0,返回一份ICMP“超时”报文。
- 发送TTL为2的IP数据报,以此类推。我们就可以知道数据报经过的路由IP了。
- 到达目的主机之后,返回一个“端口不可达”的UDP数据报,这样就知道了目的主机的IP。
IP源站选路选项
通常IP路由是动态的,即每个路由器都要判断数据报下面该转发到哪个路由器。
源站选路的思想是由发送者指定路由,有两种形式:
- 严格的源路由选择。发送端指明IP数据报所必须采用的确切路由。如果发现下一个指定的路由器不在其直接连接的网络上,就返回一个“源站路由失败”的ICMP差错报文。
- 宽松的源站选路。发送端指明了一个数据报经过的IP地址清单。只要经过上面的IP即可,不限制经过其他的路由以及顺序。