Traceroute
![本页使用了标题或全文手工转换](http://upload.wikimedia.org/wikipedia/commons/thumb/c/cd/Zh_conversion_icon_m.svg/35px-Zh_conversion_icon_m.svg.png)
此条目没有列出任何参考或来源。 (2021年1月8日) |
![](http://upload.wikimedia.org/wikipedia/commons/thumb/5/55/Traceroute_screenshot.png/220px-Traceroute_screenshot.png)
traceroute,Linux系统称为tracepath,Windows系统称为tracert,是一种电脑网络工具。它可显示封包在IP网络经过的路由器的IP位址。
原理
[编辑]程式是利用增加存活时间(TTL)值来实现其功能的。每当封包经过一个路由器,其存活时间就会减1。当其存活时间是0时,主机便取消封包,并传送一个ICMP TTL封包给原封包的发出者。
程式发出的首3个封包TTL值是1,之后3个是2,如此类推,它便得到一连串封包路径。注意IP不保证每个封包走的路径都一样。
实现
[编辑]主叫方首先发出 TTL=1 的数据包,第一个路由器将 TTL 减1得0后就不再继续转发此数据包,而是返回一个 ICMP 逾时报文,主叫方从逾时报文中即可提取出数据包所经过的第一个闸道器位址。然后又发出一个 TTL=2 的 ICMP 数据包,可获得第二个闸道器位址,依次递增 TTL 便获取了沿途所有闸道器位址。
需要注意的是,并不是所有闸道器都会如实返回 ICMP 超时报文。出于安全性考虑,大多数防火墙以及启用了防火墙功能的路由器缺省配置为不返回各种 ICMP 报文,其馀路由器或交换机也可被管理员主动修改配置变为不返回 ICMP 报文。因此 Traceroute 程式不一定能拿全所有的沿途闸道器位址。所以,当某个 TTL 值的数据包得不到响应时,并不能停止这一追踪过程,程式仍然会把 TTL 递增而发出下一个数据包。一直达到预设或用参数指定的追踪限制(maximum_hops)才结束追踪。
依据上述原理,利用了 UDP 数据包的 Traceroute 程式在数据包到达真正的目的主机时,就可能因为该主机没有提供 UDP 服务而简单将数据包抛弃,并不返回任何信息。为了解决这个问题,Traceroute 故意使用了一个大于 30000 的端口号,因 UDP 协定规定端口号必须小于 30000[来源请求] ,所以目标主机收到数据包后唯一能做的事就是返回一个“端口不可达”的 ICMP 报文,于是主叫方就将端口不可达报文当作跟踪结束的标志。
除了使用 UDP 外,也有使用TCP代替的实现方法。
历史
[编辑]根据traceroute的man page:1987年,Steve Deering建议Van Jacobson写一个这样的程式。C. Philip Wood、Tim Seaver和Ken Adelman为这个程式提供一些意见或改动。
Windows NT系统有结合ping和traceroute的pathping工具。
外部链接
[编辑]- 线上traceroute工具(页面存档备份,存于互联网档案馆)
- TRACEROUTE6.net(页面存档备份,存于互联网档案馆): 在亚洲区含IPv4 和 IPv6 的线上traceroute工具
- (英文) Traceroute test
- 在线Traceroute路由器追踪工具[永久失效链接]
|
|