一、概要
traceroute是Linux和Mac OS等系统默认提供的用于网络诊断和探测最常用的工具,Windows系统提供了一个叫:tracert的工具,和traceroute工具的功能相同。通过IP地址或域名,traceroute能探测数据包从源地址到目的地址之间经过哪些路由器,以及经过每个路由器的耗时。
二、traceroute原理
2.1 相关名词
ICMP
ICMP全称(Internet Control Message Protocol)Internet控制报文协议,使用IP的基本支持,它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
IP
IP协议是TCP/IP协议族中最核心的部分,它的作用是在两台主机之间传输数据,所有上层协议的数据(HTTP、TCP、UDP等)都会被封装在一个个的IP数据包中被发送到网络上。
TTL
TTL(time-to-live)是IP数据包中的字段,它指定了从源地址到目的主机的过程中会经历很多次路由转发,在发送数据包时会指定一个TTL值。
2.2 实现原理
traceroute的实现都借助了TTL:通过向目的地址发送一系列的探测包,设置探测包的TTL初始值分别为1,2,3…,根据返回的超时通知(ICMP Time Exceeded Message)得到源地址与目的地址之间的每一跳路由信息。在传输过程中每经过一个路由器,TTL的值都会减1,当TTL为0时,发回一个ICMP超时通知(ICMP Time Exceeded Message)。
2.3 探测流程
从源地址发出一个探测包到目的地址;
到达路由器时,TTL将会被减一;
当TTL变成0时,包则被丢弃,路由器会向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),ICMP超时的通知包含:
IP包源地址
IP包所有的内容
路由器的IP地址
当源地址收到ICMP超时通知时;
根据路由信息判断ICMP返回的不是目标地址,则每次设置TTL加1,重复1 ~ 4;
直到目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable),则停止traceroute;
三、traceroute命令详解
Usage:
traceroute [ -46dFITnreAUDV ] [ -f first_ttl ] [ -g gate,... ] [ -i device ] [ -m max_ttl ] [ -N squeries ] [ -p port ] [ -t tos ] [ -l flow_label ] [ -w waittime ] [ -q nqueries ] [ -s src_addr ] [ -z sendwait ] [ --fwmark=num ] host [ packetlen ]
Options:
-4 Use IPv4
-6 Use IPv6
-d --debug Enable socket level debugging
-F --dont-fragment Do not fragment packets
-f first_ttl --first=first_ttl