簡介
TTL是IP協定包中的一個值,它告訴網路路由器包在網路中的時間是否太長而應被丟棄。有很多原因使包在一定時間內不能被傳遞到目的地。例如,不正確的路由表可能導致包的無限循環。一個解決方法就是在一段時間後丟棄這個包,然後給傳送者一個報文,由傳送者決定是否要重發。TTL的初值通常是系統預設值,是包頭中的8位的域。TTL的最初構想是確定一個時間範圍,超過此時間就把包丟棄。由於每個路由器都至少要把TTL域減一,TTL通常表示包在被丟棄前最多能經過的路由器個數。當記數到0時,路由器決定丟棄該包,並傳送一個ICMP報文給最初的傳送者。指定數據報被路由器丟棄之前允許通過的網段數量。
TTL 是由傳送主機設定的,以防止數據包不斷在 IP 網際網路上永不終止地循環。轉發 IP 數據包時,要求路由器至少將 TTL 減小 1。
使用PING時涉及到的 ICMP 報文類型
一個為ICMP請求回顯(ICMP Echo Request)
一個為ICMP回顯應答(ICMP Echo Reply)
TTL 欄位值可以幫助我們識別作業系統類型。
UNIX 及類 UNIX 作業系統 ICMP 回顯應答的 TTL 欄位值為 255
Compaq Tru64 5.0 ICMP 回顯應答的 TTL 欄位值為 64
微軟 Windows NT/2K作業系統 ICMP 回顯應答的 TTL 欄位值為 128
微軟 Windows 95 作業系統 ICMP 回顯應答的 TTL 欄位值為 32
當然,返回的TTL值是相同的
但有些情況下有所特殊
LINUX Kernel 2.2.x & 2.4.x ICMP 回顯應答的 TTL 欄位值為 64
FreeBSD 4.1, 4.0, 3.4;
Sun Solaris 2.5.1, 2.6, 2.7, 2.8;
OpenBSD 2.6, 2.7,
NetBSD
HP UX 10.20
ICMP 回顯應答的 TTL 欄位值為 255
Windows 95/98/98SE
Windows ME
ICMP 回顯應答的 TTL 欄位值為 32
Windows NT4 WRKS
Windows NT4 Server
Windows 2000
ICMP 回顯應答的 TTL 欄位值為 128
這樣,我們就可以通過這種方法來辨別作業系統
TTL(邏輯門電路)
全稱Transistor-Transistor Logic,即BJT-BJT邏輯門電路,是數字電子技術中常用的一種邏輯門電路,套用較早,技術已比較成熟。TTL主要有BJT(Bipolar Junction Transistor 即雙極結型電晶體,晶體三極體)和電阻構成,具有速度快的特點。最早的TTL門電路是74系列,後來出現了74H系列,74L系列,74LS,74AS,74ALS等系列。但是由於TTL功耗大等缺點,正逐漸被CMOS電路取代。
Ping中的TTL
舉例來說:
以下是ping曙光部落格的返回值:
C:\Documents and Settings\user>ping www.hinn.cn
Pinging www.hinn.cn [66.235.202.42] with 32 bytes of data:
Reply from 66.235.202.42: bytes=32 time=254ms TTL=51
Reply from 66.235.202.42: bytes=32 time=256ms TTL=51
Request timed out.
Reply from 66.235.202.42: bytes=32 time=260ms TTL=51
Ping statistics for 66.235.202.42:
Packets: Sent = 4, Received = 3, Lost = 1 (25% loss),
Approximate round trip times in milli-seconds:
Minimum = 254ms, Maximum = 260ms, Average = 256ms
從結果中可以看出曙光部落格伺服器的IP位址是:66.235.202.42,所用的時間是256ms等,那TTL等與51是什麼意思呢?
TTL是生存時間的意思,就是說這個ping的數據包能在網路上存在多少時間。當對網路上的主機進行ping操作的時候,本地機器會發出一個數據包,數據包經過一定數量的路由器傳送到目的主機,但是由於很多的原因,一些數據包不能正常傳送到目的主機,那如果不給這些數據包一個生存時間的話,這些數據包會一直在網路上傳送,導致網路開銷的增大。當數據包傳送到一個路由器之後,TTL就自動減1,如果減到0了還是沒有傳送到目的主機,那么就自動丟失。就像上面ping曙光部落格的時候第三次那樣,出現Request timed out的情況,增加TTL來減少網路資源的消耗。默認情況下,Linux系統的TTL值為64或255,Windows NT/2000/XP系統的TTL值為128,Windows 98系統的TTL值為32,UNIX主機的TTL值為255。(這個是從網路上找到的),曙光部落格的目的主機是採用FreeBSD系統的(可能已經更換),在這裡可能TTL值是64,而不是UNIX主機的255,所以在從這裡到目的主機經過了64-51=13個路由。當不知道目的主機的作業系統的時候我們可以根據TTL來猜測,但是不一定100%準確,如果目的主機是windows,但是經過了比如75個路由器,那么TTL的返回值是128-75=53,那么你可能認為這個目的主機是Linux系統,但是一般不會經過那么多的路由器,所以通過TTL來判斷目的主機的作業系統還是有一定的依據的。
示例
生存時間,簡單的說它表示DNS記錄在DNS伺服器上快取時間。要理解它的值,請先看下面的一個例子:
假設,有這樣一個域名myhost.baiwan-han.com(其實,這就是一條DNS記錄,通常表示在baiwan-han.com域中有一台名為myhost的主機)對應IP位址為1.1.1.1,它的TTL為10分鐘。這個域名或稱這條記錄存儲在一台名為-ns.baiwan-han.com的DNS伺服器上。
此時如果有一個用戶在瀏覽器中鍵入一下地址(又稱URL):myhost.baiwan-han.com那么會發生些什麼呢?
該訪問者指定的DNS伺服器(或是他的ISP,網際網路服務商,動態分配給他的)8.8.8.8就會試圖為他解釋myhost.baiwan-han.com,當然8.8.8.8這台DNS伺服器由於沒有包含myhost.baiwan-han.com這條信息,因此無法立即解析,但是通過全球DNS的遞歸查詢後,最終定位到-ns.baiwan-han.com這台DNS伺服器,-ns.baiwan-han.com這台DNS伺服器將myhost.baiwan-han.com對應的IP位址1.1.1.1告訴8.8.8.8這台DNS伺服器,然有再由8.8.8.8告訴用戶結果。8.8.8.8為了以後加快對myhost.baiwan-han.com這條記錄的解析,就將剛才的1.1.1.1結果保留一段時間,這就是TTL時間,在這段時間內如果用戶又有對myhost.baiwan-han.com這條記錄的解析請求,它就直接告訴用戶1.1.1.1,當TTL到期則又會重複上面的過程。