IP协议包中的TTL(Time-To-Live)

TTL(Time-To-Live)的作用是限制数据包在网络中存在的时间,防止数据包不断的在IP互联网络上循环。

TTL指定数据包被路由器丢弃之前允许通过的最大网段数量,是IP数据包在网络中可以转发的最大跳数(跃点数),TTL位于IPv4包的第9个字节,是一个8 bit字段。

TTL字段由数据包的发送者设置,路由器转发数据包时,至少将TTL减小1。路由器将会丢弃TTL=0的数据包,并向数据包源地址发送一个类型11的ICMP报文,表示time exceeded(TTL为0),由发送者决定是否要重发。

TTL的最大值是255,推荐值是64,windows中TTL默认值保存在注册表HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters 下的DefaultTTL(DWORD)中,修改设置后重启才生效。

ping命令结果中的TTL:来自 192.168.1.1 的回复: 字节=32 时间<1ms TTL=64

ping -i 1 8.8.8.8后可抓到Time-to-live exceeded的数据包,wireshark抓包使用icmp.type == 11过滤对应的ICMP包:Time-to-live exceeded (Time to live exceeded in transit),抓包中可以根据TTL值判断数据包是否被中间设备伪造。

在域名系统 (DNS)中的TTL存活时间,用以设定域名纪录的最长缓存时间。