一、traceroute的实现原理

1、IP协议利用存活时间TTL来发出探测包跟踪数据包到达目标ip主机所经历的路由网关数量,每经过一个路由器,TTL的值就减去1。当TTL值为0时,主机就取消发送数据包,并回传一份ICMP报文。
2、在linux系统中,traceroute 命令利用ICMP协议实现定位本地计算机与目标计算机进行网络通信过程中经历的所有路由器。
3、IP协议包头部中的TTL 值可以反映数据包经过的路由器的跳数,通过控制独立ICMP 请求报文段中的TTL 值,观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。

二、traceroute命令使用方法

1、命令格式

	traceroute  [参数]  [主机]

2、常用命令参数

	-4 Use IPv4

	-6 Use IPv6

	-d  --debug    Enable socket level debugging

	-q  Set the number of probes per each hop. Default is 3

	-f 设置第一个检测数据包的存活数值TTL的大小。

	-F 设置勿离断位。

	-g 设置来源路由网关,最多可设置8个。

	-i 使用指定的网络界面送出数据包。

	-I 使用ICMP回应取代UDP资料信息。

	-m 设置检测数据包的最大存活数值TTL的大小。

	-n 直接使用IP地址而非主机名称。

	-p 设置UDP传输协议的通信端口。

	-r 忽略普通的Routing Table,直接将数据包送到远端主机上。

	-s 设置本地主机送出数据包的IP地址。

	-t 设置检测数据包的TOS数值。

	-v 详细显示指令的执行过程。

	-w 设置等待远端主机回报的时间。

	-x 开启或关闭数据包的正确性检验。

3、使用实例

    1. sudo apt-get install traceroute
      如果是第一次使用 traceroute 命令,则可能会出现这种情况:
      traceroute在linux中的使用方法-LMLPHP
      按照提示安装即可: sudo apt-get install traceroute
    2. traceroute www.baidu.com
      效果截图:traceroute在linux中的使用方法-LMLPHP
      可以看到,traceroute 一台主机时,会看到有一些行是以星号表示的。出现这样的情况,可能是防火墙封掉了ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
    3. traceroute -n -m 5 -q 4 -w 3 www.baidu.com
      效果截图:
      traceroute在linux中的使用方法-LMLPHP
      -q 4每个网关发送4个数据包
      -w 3 把对外发探测包的等待响应时间设置为3秒
05-11 18:27