先大概介紹一下TTL(Time To Live)吧!
TTL翻譯過來就是網絡生存時間,說的是一個網絡數據包,它在網絡設備中轉發的跳數(網絡設備這里一般指的是路由器),默認值為64,也有很多設置為了128,或者可以設置為255以下,所以有時候看到一些TTL值大於64也不用驚訝。每經過一次路由,一般TTL值就會-1,比如原來是64,經過一層路由后,就會變成了63。
TTL的主要作用是避免IP包數據包在網絡中的無限循環和收發,並能使IP包的發送者能收到告警消息(這個不是本文的重點,就不具體介紹了,網絡上很多,可以自己搜一下)。
TTL字段存在於IP層協議中,所以我們可以在IP層的數據包中查找到該字段,看下圖(圖中的數據包是我隨手在網絡上下載的一個)
看到上圖的Time To Live是64,說明目標主機和源主機在同一個網段,沒有經過路由轉發,甚至就是本機。
上面的數據包的Time To Live是251,說明源主機的TTL應該設置為了255.(我想應該沒有人故意設一個奇葩值251,253吧。。。)
那基本介紹就到這里了,現在來說說TTL的玩法,怎么看它來排除網絡問題。
首先一般在一些專業的網絡里面,都會有對應的網絡拓撲圖。但是當你拿到了網絡拓撲圖,里面的網絡情況是不是真的和拓撲圖上的一致?這就需要驗證了,這時候我們就可以通過ping(有些主機上設置了一些策略,不會回復ping消息)或者根據兩台主機間的數據包中的TTL來觀察是否和拓撲圖中主機的分布情況一致。
下圖是ping時候出現的TTL值:
至於數據包的TTL在上面已經有例子,就不給出了。
有時候會發現,TTL和它的網絡拓撲會不一致,特別是在網絡復雜的情況下,和網絡時間很久了,其中又經過了后人對網絡的修改,往往會出現各種奇怪的問題。
還有在一些沒有網絡拓撲的網絡上,剛開始網絡可能很簡單,不需要,但是慢慢地增加了很多網絡設備,也改變了網絡的結構,這時候,我們也可以使用TTL來驗證網絡是否正確。說一個題外話,如果感覺這樣觀察不清晰,在Linux下可以使用traceroute命令和windows下使用tracert命令來打印出清晰的網絡路徑,如下圖:
另外會出現一種情況,就是抓的一個網絡數據包,比如下圖:
在圖中是10.0.0.1和10.0.0.2通信,TTL 是255,有可能你會發現有些數據包照樣是10.0.0.2發出的,但是TTL差別很大,那有可能網絡路徑被重新導向,訪問了另外一個服務器,或者被其他服務器給劫持了。所以在分析網絡數據時候,我們也有必要觀察一下TTL值是否異常。