traceroute使用ICMP 和TTL,ICMP 用于回显信息,包括IP,TTL,sequence number等。TTL字段是发送端初始设置的字段,RFC指定的值为64,对于每个处理数据包的路由器都需要把TTL的值减1或者减去在路由器中停留的时间,一般路由器转发数据包的时延不超过1s,因此TTL可以作为跳数的计数值。
如果路由器收到的IP数据包的TTL值为0或者1,路由器将不会转发数据包,将数据包丢弃并发送ICMP超时信息。包含ICMP信息的IP报文的源地址是该路由器的IP地址。Traceroute可以用做追溯网关的工具,只要设置合理设置TTL值。发送一份TTL值为1的数据报,第一个路由器将TTL值减1,丢弃该数据报,并发送ICMP超时信息,得到第一个路由器的IP,同理发送一份TTL值为2的数据报得到第二个路由器的地址。继续这个过程直至该数据报到达目的主机,但是目的主机哪怕接收到TTL值为1的IP报文,也不会丢弃该数据报并发送ICMP报文,因为数据报已经到达目的地,如何判断是否已经到达目的主机?发送一份UDP数据报给目的主机,其中UDP使用的端口号是不可达的端口,根据ICMP报文是超时还是端口不可达区分是否为目的主机。
linux系统 TTL值的修改位置是/proc/sys/net/ipv4/ip_default_ttl,
echo 128 > /proc/sys/net/ipv4/ip_default_ttl
(这是短暂性的)若要设置长久的可以:
修改/etc/sysctl.conf配置文件,添加如下一行
net.ipv4.ip_default_ttl=128
时间: 2024-10-25 17:22:22