简单来说,TTL
首先要说明ping 命令是使用的网络层协议ICMP ,所以TTL 指的是一个网络层的网络数据包(package )的生存周期,这句话不懂的先回去了解OSI 七层参考模型。
第一个问题,为什么要有生存周期这个概念。
很显然,一个package 从一台机器到另一台机器中间需要经过很长的路径,显然这个路径不是单一的,是很复杂的,并且很可能存在环路。如果一个数据包在传输过程中进入了环路,如果不终止它的话,它会一直循环下去,如果很多个数据包都这样循环的话,那对于网络来说这就是灾难了( 广播风暴) 。所以需要在数据包中设置这样一个值,包在每经过一个节点,将这个值减1 ,反复这样操作,最终可能造成2 个结果:包在这个值还为正数的时候到达了目的地,或者是在经过一定数量的节点后,这个值减为了0 。前者代表完成了一次正常的传输,后者代表包可能选择了一条非常长的路径甚至是进入了环路,这显然不是我们期望的,所以在这个值为0 的时候,网络设备将不会再传递这个包而是直接将他抛弃,并发送一个通知给包的源地址,说目的地不可达,这个数据包已经丢弃了。
其实TTL 值这个东西本身并代表不了什么,对于使用者来说,关心的问题应该是包是否到达了目的地而不是经过了几个节点后到达。但是TTL 值还是可以得到有意思的信息的。
每个操作系统对TTL 值得定义都不同,这个值甚至可以通过修改某些系统的网络参数来修改,例如Win2000 默认为128 ,通过注册表也可以修改。而 Linux 大多定义为64 。不过一般来说,很少有人会去修改自己机器的这个值的,这就给了我们机会可以通过ping 的回显TTL 来大体判断一台机器是什么操作系统。
如图我的机器是linux的,因此,经过五跳后,TTL=64-5=59...
想象一下,如果我给目的服务器发送一个TTL为1的包,结果会怎样?
在包港出发的第一个节点,TTL就会减少为0,这时这个节点就会回应TTL失效的反馈,这个回应包含了设备本身的ip地址,这样我们就得到了路由路径的第一个节点的地址。
因此,我们继续发送TTL=2的包,也就受到第二个节点的TTL失效回应
依次类推,我们一个一个的发现,当最终返回的结果不是TTL失效而是ICMP Response的时候,我们的tracert也就结束了,就是这么简单
转载于:https://blog.51cto.com/budongzhenren/707047