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猜測目標主機使用的操作系統,我些知識就不放在這篇文章裏了,大家另外搜索吧。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章