我们在使用Ping命令的时候,通常关注的是“时间”这个值,忽略“TTL”这个值。但是细心的人会发现,TTL的值不是每次Ping都一样,也不是Ping每个域名都一样,这是什么原因呢?“TTL”又是什么意思呢?可能不少人认为,“TTL”的值越小越好,就像“时间”这个值一样。我以前也是这么认为,只笼统知道“TTL”是“生存时间”(Time To Live)的意思,认为这个值越小越好。事实上是怎样的呢?本文将为你解开疑惑。
“TTL”是生存时间(Time To Live)的意思
首先我们了解一下“TTL”的意思,“TTL”是 Time To Live 的缩写,该字段指定IP包被路由器丢弃之前允许通过的最大网段数量。这样说可能比较抽象。下面我们看一下Ping命令的数据,如图:
Ping百度服务器
上图,我ping了百度的服务器(windows下默认ping 4次)。
字节代表数据包的大小,时间顾名思义就是返回时间,“TTL”的意思就是数据包的生存时间,当然你得到的这个就是剩余的生存时间。TTL用来计算数据包在路由器的消耗时间,因为现在绝大多数路由器的消耗时间都小于1s,而时间小于1s就当1s计算,所以数据包没经过一个路由器节点TTL都减一。
那么TTL的值一开始是什么呢?不同的操作系统默认下TTL是不同的。默认情况下,Linux系统的TTL值为64或255,Windows NT/2000/XP系统的TTL值为128,Windows 98系统的TTL值为32,UNIX主机的TTL值为255。
上图看到Ping百度服务器返回的数据包的TTL值为56(一般都是找2^n且离返回值最近的那个值),那么途中则经过了64-56=9个路由器。
再比如,我Ping自己的ip,结果如下图:
Ping本地计算器
可以看到我得到的时候TTL为128,那么途中则经过了128-128=0个路由器,也就是我自己给自己发送数据包不需要经过任何路由器,所以TTL值为128,即是说我的数据包生存时间为128。
Ping TTL 越小越好?不对!
通过上述例子的分析,说“TTL”的值越小越好显然是不对的,相反,应该说是“TTL”的值越大越好才对,因为“TTL”的值越大,说明发送数据包经过路由器越少,而经过路由器越少,说明越快到达目的地,速度当然也就越快。
路由器是什么?从 Tracert 命令了解
上面提到发送数据包要经过多少个路由器,那么路由器是什么意思?这就不得不说到 Tracert 命令了。
Tracert的写法如下:
tracert [目标]
意思是得到你的主机到目标主机经过路由器的ip。
如图:
tracert百度服务器
在这里我们可以看到达到目标我们经过了9个路由器(不算终点),跟上面Ping百度服务器返回的“TTL”值(56)是相关的,64-56=9。
注意一下有的值为“请求超时” ,原因是有的路由器是禁止Ping的(所以不会返回信息)。