linux 机器
TraceRoute 实现原理
Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具。
- 从源地址发出一个UDP探测包到目的地址,并将TTL设置为1;
- 到达路由器时,将TTL减1;
- 当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
- 当源地址收到该ICMP包时,显示这一跳路由信息;
- 重复1~5,并每次设置TTL加1;
- 直至目标地址收到探测数据包,并返回端口不可达通知(ICMP Port Unreachable);
- 当源地址收到ICMP Port Unreachable包时停止traceroute。
- Linux和Mac OS等系统使用UDP包进行探测,目标端口号默认为33434,每次探测目标端口号加1。Traceroute故意使用了一个大于 30000 的目标端口号,以保证目标地址收到数据包后能够返回一个“端口不可达”的 ICMP 报文,于是源地址就可将端口不可达报文当作跟踪结束的标志。
- Traceroute每跳默认发送3个探测包(发包的数量可通过-q进行设置),探测包的返回会受到网络情况的影响。如果防火墙封掉了ICMP的返回信息,那么相应的延时位置会以*显示。如果某台网关阻塞或者某台DNS出现问题,那么相应行的延时会变长。可以加-n 参数来避免DNS解析,以IP格式输出数据。
- 每个探测包都有唯一的标识号,使得Traceroute能够识别返回的包。UDP数据包使用递增的目标端口号进行标识。
1 | traceroute [-n] -T -p <目标端口号> Host |
参数说明
1 | traceroute [-46dFITUnreAV] [-f first_ttl] [-g gate,...] |
异常节点判定方法:如果相关端口在某一跳被阻断,则其后各跳均不会返回数据。据此就可以判定出异常节点
1 | [root@10-1-53-21 ~]# traceroute -n -T -p 443 183.3.217.36 |
1 | [root@10-1-53-21 ~]# traceroute -n -T -p 443 183.3.217.36 |
1 | yum install -y sshpass |
windows 机器
1 | tracetcp <目标服务器域名或 IP>:<待探测端口号> |
异常节点判定方法:如果相关端口在某一跳被阻断,则其后各跳均不会返回数据。据此就可以判定出异常节点
Tracert实现原理
从源地址发出一个ICMP请求回显(ICMP Echo Request)数据包到目的地址,并将TTL设置为1;
到达路由器时,将TTL减1;
当TTL变为0时,包被丢弃,路由器向源地址发回一个ICMP超时通知(ICMP Time Exceeded Message),内含发送IP包的源地址,IP包的所有内容及路由器的IP地址;
当源地址收到该ICMP包时,显示这一跳路由信息;
重复1~5,并每次设置TTL加1;
直至目标地址收到探测数据包,并返回ICMP回应答复(ICMPEcho Reply);
当源地址收到ICMP Echo Reply包时停止tracert。
注:
1.Windows系统使用ICMP请求回显(ICMP Echo Request)数据包进行探测,源地址以目的地址返回的ICMP回应答复(ICMP Echo Reply)作为跟踪结束标志。
2.Traceroute每跳默认发送3个探测包。在未能到达路由器或未返回ICMP超时通知的情况下,相应的延时位置会以*显示。
3.每个探测包都有唯一的标识号,ICMP数据包使用seq进行标识。
tracetcp
安装依赖
下载tracetcp,解压后放在c:/windows下
1 | http://www.github.com/simulatedsimian/tracetcp |
1 | tracetcp host [options] |