IP协议中的TTL

定义

TTL是IP协议包中的一个值,指定数据报被路由器丢弃之前允许通过的网段数量。(IP数据包在计算机网络中可以转发的最大跳数)

在很多情况下数据包在一定时间内不能被传递到目的地。解决方法就是在一段时间后丢弃这个包,然后给发送者一个报文,由发送者决定是否要重发。

TTL 是由发送主机设置的,以防止数据包不断在 IP 互联网络上永不终止地循环。转发 IP 数据包时,每经过一个路由器,路由器会修改TTL值, 即将改值减小1。当记数到0时,路由器决定丢弃该包,并发送一个*ICMP Type 11 and Code 0 message(Time to live exceeded) *报文给最初的发送者,由发送者决定是否要重发。

常见操作系统的TTL值

UNIX 及类 UNIX 操作系统 ICMP 回显应答的 TTL 字段值为 255
Compaq Tru64 5.0 ICMP 回显应答的 TTL 字段值为 64
微软 Windows NT/2K操作系统 ICMP 回显应答的 TTL 字段值为 128
微软 Windows 95 操作系统 ICMP 回显应答的 TTL 字段值为 32
LINUX Kernel 2.2.x & 2.4.x ICMP 回显应答的 TTL 字段值为 64

linux系统TTL值修改

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,接着执行sysctl -p即可。

理解发送主机

在本机(windows 10)ping本地的VMware虚拟主机(操作系统为CentOS release 6.8),其IP为192.168.10.128,可见TTL为64:

在CentOS上执行echo 168 > /proc/sys/net/ipv4/ip_default_ttl修改TTL值为168,接着再次在本机(windows 10)ping 192.168.10.128,发现TTL由64变为168


综上可知,这里的发送主机指的是ping后面IP对应的主机。