ping 命令中的 TTL

ping 命令中的 TTL


TTL(Time To Live)

当我们在使用ping命令时,返回结果里会带一个TTL值。这个东西的含义其实就是Time To Live,指的是报文在网络中能够‘存活’的限制。以前这个限制方式是设定一个时间(Time To Live中的Time就是这样来的),当报文在网络中转发时,时间超过这个限制,最后一个收到报文的‘路由点’就会把它扔掉,而不继续转发。后来把时间限制改为了跳数限制,就是当报文在网络中转发时,每经过一个‘路由点‘,就把预先设定的这个TTL数值减1,直到最后TTL=1时报文就被扔掉,不向下转发。

路由点:我这里是指完成路由功能的机器,因为并不是只有路由器才可以完成路由转发功能,比如主机可以配置路由转发。


ping命令中的TTL

上边解释的TTL是基础,然后,我们这篇文章要说明的是ping中的TTL到底是什么意思。因为不管怎么想,返回了一个TTL这东西,是说被你ping的主机预设的报文TTL是这个值吗?还是说你ping它的时候自己的报文自动设定了TTL是这个值?还是说你的报文经过了TTL跳到达被ping主机?。。。总之就是不能明确地说出这个TTL的意义。

其实这个TTL是指:被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。

有点绕口,举个例子就明白了。


我们先tracert www.baidu.com

tracert返回结果

这里表示,我们发出的ICMP报文从自己主机到目标主机一共经过12跳,这里可以想成我们发过去的和对方返回的路由路径是一样的(其实网络很复杂的,这样说是在基本理论上简化问题——一般网络情况不变化就是这样的),也就是目标主机它预设的报文TTL要减掉12。现在,按照刚才说的“被ping主机那里返回的报文,到了你这里,从它自己预设的TTL减小到还剩下多少。”,我们可以计算ping www.baidu.com时的TTL了。

TTL = 目标主机预设报文TTL - 12

现在等式中有两个未知数,但是“目标主机预设报文TTL”其实比较容易知道。并且有一个前提:一般有64、128等几个值(这些东西大家另外去查资料吧)

我们先来ping www.baidu.com

ping返回结果

这里我们看到 TTL = 52。一般就可以推断目标主机预设的报文TTL为64,因为它比较接近(一般啦)。然后对比一下上边的等式,代入数值:

52 = 64 - 12……bingo~


by the way

因为上边的说明中涉及到的网络原理中其它挺多的内容,比如“网络的拓扑或者网络的流量情况会影响路由路径”、“TTL其实是可以修改的”、“64与128等TTL值也只是一般常见的,其实还有其它的”等等,总之就是任何一个点发生了偏差,都会让我上边做的这个说明变成废纸。。。所以大家要多去验证,比如把我只对www.baidu.com的测试多验证几次,还要把测试用到其它主机上,多次验证。

另外,我们可以通过这个返回的TTL猜测目标主机使用的操作系统,我些知识就不放在这篇文章里了,大家另外搜索吧。


reference (with thanks)

http://blog.163.com/zzy_85569381/blog/static/149518907201312114815772/

猜你喜欢

转载自blog.csdn.net/AlimSah/article/details/52439029
TTL