一.含義
“TTL”是生存時間(Time To Live)的意思
關於時間與跳的討論,
https://www.zhihu.com/question/61007907
一開始理解為time to leap,wiki上是hop limit
順便復習了個單詞,hop是類似青蛙跳,兔子跳連續的,正符合。
leap是大步跳,並沒有連續的意思。
這里把time理解成次數也可以。
首先我們了解一下“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。
二.路由器是什么?
通過路由表到達目的地,路由表每一條路由對應兩個信息
(目的網絡地址,下一跳地址)
詳見《計算機網絡第七版》4.2.6
從 Tracert 命令了解
上面提到發送數據包要經過多少個路由器,那么路由器是什么意思?這就不得不說到 Tracert 命令了。
Tracert的寫法如下:
tracert [目標]
意思是得到你的主機到目標主機經過路由器的ip。
如圖:
tracert百度服務器
在這里我們可以看到達到目標我們經過了9個路由器(不算終點),跟上面Ping百度服務器返回的“TTL”值(56)是相關的,64-56=9。
注意一下有的值為“請求超時” ,原因是有的路由器是禁止Ping的(所以不會返回信息)。
三.TTL從哪來的
http://searchnetworking.techtarget.com/definition/time-to-live
An IP TTL is set initially by the system sending the packet. It can be set to any value between 1 and 255; different operating systems set different defaults.
ttl是發送的時候便攜帶的,有空用wireshark抓包看看。
也就是說,如果你設置ttl為5,然后hop了5下還沒到目標地址,那就扔掉。具體返回什么信息沒試
如果設置ttl設置為100,返回跳了9下,到了目的地址,是linux服務器,獲得ttl為64,64-9=55,返回ttl 55