Traceroute原理
1. 先看一则案例
yum install traceroute -y
traceroute $host
2. 什么是traceroute
从上图可以看出来,traceroute是诊断两端服务器网络路由节点可用性工具。它可以定位从源主机到目标主机之间经过了哪些路由器,以及到达各个路由器的耗时。而mtr探测底层就是由traceroute实现,只不过是ICMP协议。
3. traceroute的原理
主机之间通信,网络层IP数据报的首部中,有个TTL字段(Time To Live)。TTL的作用是,设置IP数据报被丢弃前,最多能够经过的节点数。
同时,每经过一个中间节点,再向下一个节点转发数据前,都会将TTL减1。如果TTL不为0,则将数据报转发到下一个节点;否则,丢弃数据报,并返回错误。
假设TTL设置为N,当前转发到第M个节点:
- 第1个节点:将TTL设置为N-1。如果TTL != 0,则将数据报传递给第2个节点;否则丢弃数据报,并向源主机报错。
- 第2个节点:将TTL设置为N-2。如果TTL != 0,则将数据报传递给第3个节点;否则丢弃数据报,并向源主机报错。
- 第M个节点:将TTL设置为N-M。如果TTL != 0,则将数据报传递给第3个节点;否则丢弃数据报,并向源主机报错。
4. 抓包追溯
tcpdump -i any -w filename
- 4.1 从mtr图中能看到,第一跳"10.22.33.1",这个是内部网络网关,ttl=1
- 4.2 第二跳为"192.168.150.1",ttl=2
- 4.3 第三跳为"211.103.114.1",ttl=3
从图中可以看到,traceroute源端是"UDP"协议,经过的每一跳都返回"ICMP"协议且报文中携带当前路由src ip。
5. 如何判断是否达到了目标主机
多次测试发现,ICMP报文中的Type与Code 都为3说明达到了目标主机(用同网段机器模拟的)
若Type=11,Code=0, 返回的就是超时错误(Time Exceeded Message)