简介
Traceroute是利用ICMP协议跟踪一条消息路由的应用。(在Windows中其被称为tracert)
原理
在TCPIP通信中,每经过一个路由器,会将IP包中TTL(Time To Live,生存周期)字段减一,减到0时该IP包会被丢弃。此时IP路由器会给发送端主机发送一个ICMP超时的消息(ICMP Time Exceeded Message, 错误码0)用于报告这个错误。
Traceroute就是利用了上述IP协议族中的ICMP超时信息。利用IP包的生存期限从1开始顺次递增的同时发送UDP包,强制接收ICMP消息,通过每次发送的IP包超时后对方路由返回的ICMP消息就能确定所有经过的路由器地址。
指令
如果需要知道到www.miluo.us的网络状况
1 | $ traceroute www.miluo.us |
其中每一行都标明了路由器的IP与到该路由器的时间。如果过程中有某一跳路由器没有ICMP返回回来,超过5秒后程序将会打印一个”*”。这种情况主要出现于路径中部分路由器由于安全配置或其他原因不允许发送ICMP的情况,此时这一跳(Hop)的信息无法获取。
主要参数
- -P proto: 发送指定协议的包,目前支持UDP , TCP , GRE和ICMP
- -p: 对UDP和TCP,定义所使用的端口号(默认33434),traceroute希望的是指定一个没有在使用中的端口号,对端会返回一个ICMP PORT_UNREACHABLE报错,这样就能顺利结束追踪。
- -F: 开启IP段中的don’t fragment(不可分片)位(用于发现路径中MTU)
- -M first_ttl: 设定最开始的ttl
- -a: 对每一跳的路由执行
AS# lookups
,显示网络的自制系统编号
(如前述例子中第5-8跳都在AS4134 163骨干网中)