tracert/traceroute原理和使用

我是平民何 2024-03-21 20:44:41

tracert一个常用的网络诊断工具,用于追踪在访问目的地址的时候会经过哪些中间路由,并将这些中间路由记录下来。

tracert/traceroute的实现原理,有两种方法:1、基于ICMP报文实现 2、基于UDP报文实现的

windows不指定参数默认是基于icmp实现的(-d选项的添加时为了避免DNS查找造成的额外时间消耗)

请求包:

回包:

实现原理

tracert发出TTL值为1的ICMP数据包,当到达路径上第一个路由器时,路由器会将TTL减1,此时TTL值为0,该路由器将此数据包丢弃,并向源地址返回一个ICMP超时报文,当主机收到该数据包,获得了这个路径上的第一个路由器的地址;tracert再发送另一个TTL为2的数据包,第一个路由器会将此数据包转发给第二个路由器,当TTL=0,第二个路由器返回一个超时通知,tracert得到第二个路由器地址..

Tracert每次发出数据报时便会将TTL加1,发现下一个路由器

这个动作一直重复,直到到达目的地或者确定目标主机不可到达为止

每次检测都同时发送3个数据包,因此打印出来三个时间。

linux不指定参数默认是基于udp实现的(添加-I选项,这时候会通过ICMP协议跟踪)

安装:yum install traceroute

发包

回包

原理区别:

利用UDP+ICMP不可达消息,发送一个UDP报文,TTL值为1,目的UDP端口号是大于30000的一个数,因为在大多数情况下,大于30000的UDP是任何一个应用程序不可能使用的端口号。

补充:

TTL(time-to-live存活时间):

某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。(这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样。)有了TTL机制后,即使存在路由环路,ip报文的运动时间是有限的(TTL是ip报文中的一个字段 最大值255 每经过一个路由器数值减1;有防止环路的作用)

不同的操作系统默认下TTL是不同的。默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。(ping 本机地址可以看出TTL初始值)

禁用主机被tracert方式:1、禁用icmp 2、禁用udp 30000以上端口访问

0 阅读:32

我是平民何

简介:感谢大家的关注