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
這里表示,我們發出的ICMP報文從自己主機到目標主機一共經過12跳,這里可以想成我們發過去的和對方返回的路由路徑是一樣的(其實網絡很復雜的,這樣說是在基本理論上簡化問題——一般網絡情況不變化就是這樣的),也就是目標主機它預設的報文TTL要減掉12。現在,按照剛才說的“被ping主機那里返回的報文,到了你這里,從它自己預設的TTL減小到還剩下多少。”,我們可以計算ping www.baidu.com時的TTL了。 TTL = 目標主機預設報文TTL - 12 現在等式中有兩個未知數,但是“目標主機預設報文TTL”其實比較容易知道。并且有一個前提:一般有64、128等幾個值(這些東西大家另外去查資料吧) 我們先來ping www.baidu.com
這里我們看到 TTL = 52。一般就可以推斷目標主機預設的報文TTL為64,因為它比較接近(一般啦)。然后對比一下上邊的等式,代入數值: 52 = 64 - 12……bingo~
因為上邊的說明中涉及到的網絡原理中其它挺多的內容,比如“網絡的拓撲或者網絡的流量情況會影響路由路徑”、“TTL其實是可以修改的”、“64與128等TTL值也只是一般常見的,其實還有其它的”等等,總之就是任何一個點發生了偏差,都會讓我上邊做的這個說明變成廢紙。。。所以大家要多去驗證,比如把我只對www.baidu.com的測試多驗證幾次,還要把測試用到其它主機上,多次驗證。 |