Traceroute是一个用来探索TCP/IP协议的工具,他通过ICMP协议可以让我们看到IP数据报从一台主机传送到另一台主机所经过的所有路由。
使用方法:
traceroute [参数] [主机名]
windows下命令为 tracert [] []
- [-n]:显示的地址是用数字表示而不是符号
- [-v]:长输出
- [-p]:UDP端口设置(缺省为33434)
- [-q]:设置TTL测试数目(缺省为3)
- [-t]:设置测包的服务类型
- [-s]:设置本地主机送出数据包的IP地址。
Traceroute程序使用ICMP报文和IP首部中的TTL字段。TTL字段是由发送端设置的一个8比特字段。
每个处理数据报的路由器都需要把TTL的值减1或减去数据报在路由器中停留的描述。由于大多数的路由器转发数据报的时延都小于1秒钟,因此TTL最终成为一个跳站的计数器,所以经过的每个路由器都将其值减1。
TTL字段的目的是防止数据报在选路是无休止地在网络中流动。 如:当路由器瘫痪或者两个路由器的连接丢失时,选路协议有时会去检测丢失的路由并一直进行下去。在这段时间内,数据报可能在循环回路被终止。TTL字段就是在这些循环传递的数据报上加上一个生存期限。
当路由器收到一份IP数据报,如果TTL字段是0或1,则路由器不转发该数据报(接收到这种数据报的目的主机可以将它交给应用程序,这是因为不需要转发该数据报。但是在通常情况下,系统不该接收TTL字段为0的数据报)。相反,路由器将该数据报丢弃,并给源主机发一份ICMP“超时”信息。Traceroute的关键在于包含这份ICMP信息的IP报文的信源地址是该路由器的IP地址。
Traceroute发送一份UDP数据报给目的主机,但它选择一个不可达的值作为UDP端口(>3000),使目的主机的任何一个应用程序都不肯使用该端口。因此,当该数据报到达时,目的主机的UDP将产生一份“端口不可达”的ICMP错误报文。Traceroute区分接收到的ICMP报文时超时还是端口不可达,已判断什么时候结束。
Traceroute需要注意的是:
1、并不能保证现在的路由也是将来要采用的路由,甚至两份连续的IP数据报都可能采用不同的路由。 对于一个给定的TTL,如果其路由发生变化,Traceroute程序将打印出新的IP地址。
2、不能保证ICMP报文的路由与Traceroute发送的UDP数据报采用统一路由。
3、返回的ICMP报文中的信源IP地址是UDP数据报到达的路由器接口的IP地址。
4、在广域网情况下,由于Traceroute程序接收到ICMP报文时,它所获得的唯一信息就是IP地址,因此在给定IP地址的情况下,它做一个“反向域名查看”工作来获取域名。
IP源站选路选项:
一般IP路由是动态的,即每个路由器都要判断数据报下一跳该转发到哪个路由器。应用程序对此不进行控制,通常也比你够不关心路由。
源站选路的思想是由发送者指定路由。可以采用两种形式:
1)、严格的源站选路。发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现原路由所指定的饿下一个路由器不再其直接连接的网络上,那么它就返回一个”源站路由失败“的ICMP差错报文。
2)、宽松的源站选路。发送端指明一个数据报经过的IP地址清单,但数据报在清单上指明的任意两个地址之间kiyomi通过其他路由。