通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径。当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上 来说大部分时候所走的路由是相同的。
Linux 系统中个,我们称之为 tracertoute,在 MS Windows 中为 tracert。
traceroute 通过发送小的数据包到目的设备直到其返回,来测量其需要多长时间。一条路径上的每个设备traceroute要测3次。输出结果中包括每次测试的时间(ms)和设备的名称及其IP地址。
在大多数情况下,我们会在 Linux 主机系统下,直接执行命令行。
traceroute hostname
而在 Windows 系统下是执行 tracert 的命令:
tracert hostname
1.命令格式:
traceroute [参数] [主机]
2.命令功能:
traceroute 指令让你追踪网络数据包的路由途径,预设数据包大小是40 Bytes, 用户可另行设置。
具体参数格式:traceroute [-dFlnrvx] [-f] [-g][-i][-m][-p][-s][-t][-w][主机名称或IP地址][数据包大小]
3.命令参数
-d 使用socket 层级的排错功能
-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 开启或关闭数据包的正确性检验
4.返回结果解释:
默认情况下,TTL的最大值为30,可根据实际情况改变设置,并且发送3个探测(各自有不同的TTL的值)到每一跳
返回结果解释:
* 探测报文没有获得响应,出现这种情况,可能是防火墙封掉了 ICMP的返回信息,所以我们得不到什么相关的数据包返回数据。
! 接收到报文中的TTL值为1
!H 目标主机不可达
!N 目标网络不可达
!P 目标协议不可达
!S 源路由选项错误,表示某一路由器有程序错误或硬件故障
!F 探测报文需要分段,表示某一路由器有程序错误或硬件故障
!X 由于通信被管理性禁止,该路径被阻塞或关闭
有时我们在某一网关处延时比较长,有可能是某台网关比较阻塞,也可能是物理设备本身的原因,当然如果某台DNS出现问题时,不能解析主机名、域名时,也会有延时长的现象;您可以加 -n 参数来避免DNS 解析,以 IP格式 输出数据。
5。traceroute命令选项的应用
当目标主机所处的网络与本机所处的网络间路由数较多(多于30)时,修改TTL的值
#traceroute -m 35 128.197.2.200
默认情况下,基于UDP协议发送探测报文,但网络中有的路由器不支持,-I参数表示使用ICMP协议代替
#traceroute -m 35 -I 128.197.2.200
默认情况下,UDP协议的33434端口进行跟踪,-p 指定端口号
#traceroute -m 35 -p 65000 128.197.2.200
-v 用来为每一跳显示响应报文的大小和响应报文的目标
-n 用来显示地址而不是使用符合化的名字显示,减轻网络服务的负荷(加快速度)
6.TTL
虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数。TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上,每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP包并向IP包的发送者发送 ICMP time exceeded消息。