本版主站首页上有两篇文章《PING是如何工作的》,技术文章类;《ping命令判断远程主机系统》,本站原创类。第一篇文章是比较好的,但是不是很全面(关于TTL的值的部分),第二篇文章,我个人认为不正确,把我的意思贴出来供大家参考,希望得到指正,hehe
以下是我在man ping (debian)中看到的解释:
一个IP包ttl的值代表在这个包在被扔掉之前可以经过的最大的IP路由器的数目
在现在的系统中,你可以认为该包每经过一个路由器,ttl的值就减掉1
tcp/ip规范把这个值(ttl)设为60,但是有很多系统用更小的值,例如
4.3bsd 用30,4.2bsd用15
ttl的最大的可能值是255,大多数unix系统把ICMP ECHO_REQUEST包
(我不知道该如何翻译)的值就设为255,这就是为什么你可以ping 一些站点,
但是用ftp(1) 或telnet(1)却不能到达的原因了。
正常情况下,ping会打印出它收到的包的ttl的值。当一个远程系统收到了一个
ping包时,它通常对ttl的值进行以下三种的某一种处理:
1)不改变它的值:这是4.3BSD-Tahoe release以前的Berkeley Unix系统所做的处理。在这种情况下,返回包的ttl值就等于255-这个回路中路由器的个数。
2)设置ttl的值为255:这是现在的Berkeley Unix系统所做的处理。在此种情况下,返回包的ttl值就等于255-从远程主机到本地所经过的路由器的数目(单程的)。
3)设置ttl的值为别的数:一些机器使用TCP包的值作为ICMP包的,例如,30 或60.还有一些系统用别的值,这就无从得知了
|