一、概念
就是利用ICMP(Internet Control Message Protocol)Internet控制报文协议 来追踪的计算机到目标计算机之间的所有路由器信息
二、不同平台下命令方式
- windows下:
tracert www.baidu.com
- linux下
traceroute www.baidu.com
三、基于方式
- UDP(user datagram protocol)--linux下
- ICMP 回显 ---Windows下
四、TTL解释
Time To live(存活时间),TTL=1代表允许通过的最大链路
四、实现过程
- 命令行输入
tracert www.baidu.com
- 先会触发DNS请求,去解析www.baidu.com 的ip地址
- 获取到目标IP后,客户端就会向目标IP发送ICMP请求回显报文,并在ip首部设置TTL的值为1,当到达第一个路由节点后,路由节点根据目标ip,决定要转发出去时,就会将TTL值减去1,发现1-1=0,就超时了,路由器就会返回一次ICMP的超时错误信息,客户端收到后就会判断是不是回显应答报文
- 如果不是回显应答报文,客户端就会继续发送,而此时ICMP报文的TTL值就为2了,就可以通过2个节点了
- 依次进行。。。直到收到ICMP回显应答报文
五、示例
-
过程1
-
过程2
-
过程3
-
过程4
六、linux基于udp的模式
原理类似,只是不是基于icmp请求回显、回显应答的模式,但是每次都是通过TTL值的递增关系,来追踪路由器的情况
- linux 发送的udp 端口号默认是大于30000,为什么发送这么大呢?
- 因为一般目标服务器监控的端口一般都比较小,比如80 443,这样做就是为了区分
- 当达目标主机的时候,目标主机只能发送一个端口不可达的ICMP数据报给客户端。客户端就知道跑拢了