8、traceroute
引言
Traceroute程序可以让我们看到IP数据报从一台主机传到另一台主机所经过的路由。Traceroute程序还可以让我们使用IP源路由选项。
traceroute程序的操作
使用ping -R选项进行IP记录路由选项的缺点:
- 不是所有路由器都支持记录路由选项
- 一来一回记录的操作,会有某些限制
- IP首部空间有限
Traceroute程序使用ICMP报文和IP首部中的TTL字段(生存周期、最大值255)。TTL字段的目的是防止数据报在选路时无休止地在网络中流动。例如,当路由器瘫痪或者两个路由器之间的连接丢失时,选路协议有时会去检测丢失的路由并一直进行下去。在这段时间内,数据报可能在循环回路被终止。TTL字段就是在这些循环传递的数据报上加上一个生存上限。
trace route 操作过程
对于过程中经过的路由,只需要依次增加TTL并发送数据报,那么到达中间路由时会返回超时ICMP报文。
对于目的主机,发送一份端口不存在的UDP数据报给目的主机,那么到达目的主机时,将使目的主机的UDP模块产生一份“端口不可达”错误的ICMP报文。(如果是正常接受,就没信息返回给客户机了)

对于每一个TTL值,都会发送三份数据报,未到达就会输出星号。然后发送TTL+1的数据报。每一个时间都表示的是往返的总时间。
ICMP超时报文

根据代码字段的不同,ICMP超时报文分为两种:
- 代码字段为0,即为此处的TTL=0产生的超时报文
- 代码字段为1,表示的是主机在组装分片时超时报文
注意事项
- 不能保证当前采用的路由一定是未来采用的路由。当同一个TTL若其路由发生变化,会输出新的IP,如之前bilibili例子中TTL=7、9、10
- 不能保证ICMP报文的路由与traceroute发送的UDP数据报采用同一路由
- 返回的ICMP报文的信源IP地址是UDP数据报到达的路由器接口的IP地址(ping -R记录的路由选项中,IP都是发送网口的地址, 而此处是接受网口的地址)
traceroute -g宽松的源站选路(发送端指明了一个数据报经过的IP地址清单,但是数据报在清单上指明的任意两个地址之间可以通过其他路由器。)、traceroute -G严格的源站选路(发送端指明IP数据报所必须采用的确切路由。如果一个路由器发现源路由所指定的下一个路由器不在其直接连接的网络上,那么它就返回一个“源站路由失败”的ICMP差错报文。)
用traceout确定路径MTU
通过修改traceroute源程序,设置IP首部3位标志中不分片的bit为1,然后陆续发送。每当收到ICMP不能分片差错时,就减小分组长度。
浙公网安备 33010602011771号