白山有实装饰材料公司

排名推廣
排名推廣
發(fā)布信息
發(fā)布信息
會員中心
會員中心
 
 
當前位置: 首頁 » 資訊 » 網(wǎng)絡知識 » 正文

PING命令中TTL的具體含義

放大字體  縮小字體 發(fā)布日期:2012-04-26  作者:DXB2B  瀏覽次數(shù):1067

 PING命令中TTL的具體含義
  簡單來說,TTL全程Time to Live,意思就是生存周期。
  首先要說明ping命令是使用的網(wǎng)絡層協(xié)議ICMP,所以TTL指的是一個網(wǎng)絡層的網(wǎng)絡數(shù)據(jù)包(package)的生存周期,這句話不懂的先回去復習OSI7層協(xié)議去。

  第一個問題,為什么要有生存周期這個概念。

  很顯然,一個package從一臺機器到另一臺機器中間需要經(jīng)過很長的路徑,顯然這個路徑不是單一的,是很復雜的,并且很可能存在環(huán)路。如果一個數(shù)據(jù)包在傳輸過程中進入了環(huán)路,如果不終止它的話,它會一直循環(huán)下去,如果很多個數(shù)據(jù)包都這樣循環(huán)的話,那對于網(wǎng)絡來說這就是災難了。所以需要在包中設置這樣一個值,包在每經(jīng)過一個節(jié)點,將這個值減1,反復這樣操作,最終可能造成2個結(jié)果:包在這個值還為正數(shù)的時候到達了目的地,或者是在經(jīng)過一定數(shù)量的節(jié)點后,這個值減為了0。前者代表完成了一次正常的傳輸,后者代表包可能選擇了一條非常長的路徑甚至是進入了環(huán)路,這顯然不是我們期望的,所以在這個值為0的時候,網(wǎng)絡設備將不會再傳遞這個包而是直接將他拋棄,并發(fā)送一個通知給包的源地址,說這個包已死。
  其實TTL值這個東西本身并代表不了什么,對于使用者來說,關(guān)心的問題應該是包是否到達了目的地而不是經(jīng)過了幾個節(jié)點后到達。但是TTL值還是可以得到有意思的信息的。

  每個操作系統(tǒng)對TTL值得定義都不同,這個值甚至可以通過修改某些系統(tǒng)的網(wǎng)絡參數(shù)來修改,例如Win2000默認為128,通過注冊表也可以修改。而Linux大多定義為64。不過一般來說,很少有人會去修改自己機器的這個值的,這就給了我們機會可以通過ping的回顯TTL來大體判斷一臺機器是什么操作系統(tǒng)。

以我公司2臺機器為例
看如下命令
D:>ping 61.152.93.131

Pinging 61.152.93.131 with 32 bytes of data:

Reply from 61.152.93.131: bytes=32 time=21ms TTL=118
Reply from 61.152.93.131: bytes=32 time=19ms TTL=118
Reply from 61.152.93.131: bytes=32 time=18ms TTL=118
Reply from 61.152.93.131: bytes=32 time=22ms TTL=118

Ping statistics for 61.152.93.131:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 18ms, Maximum = 22ms, Average = 20ms

D:>ping 61.152.104.40

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.104.40: bytes=32 time=28ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=18ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss
Approximate round trip times in milli-seconds:
Minimum = 13ms, Maximum = 28ms, Average = 19ms


  第一臺TTL為118,則基本可以判斷這是一臺Windows機器,從我的機器到這臺機器經(jīng)過了10個節(jié)點,因為128-118=10。而第二臺應該是臺Linux,理由一樣64-54=10。


了解了上面的東西,可能有人會有一些疑問,例如以下:

1,不是說包可能走很多路徑嗎,為什么我看到的4個包TTL都是一樣的,沒有出現(xiàn)不同?

  這是由于包經(jīng)過的路徑是經(jīng)過了一些最優(yōu)選擇算法來定下來的,在網(wǎng)絡拓撲穩(wěn)定一段時間后,包的路由路徑也會相對穩(wěn)定在一個最短路徑上。具體怎么算出來的要去研究路由算法了,不在討論之列。

2,對于上面例子第二臺機器,為什么不認為它是經(jīng)過了74個節(jié)點的Windows機器?因為128-74=54。
  對于這個問題,我們要引入另外一個很好的ICMP協(xié)議工具。不過首先要聲明的是,一個包經(jīng)過74個節(jié)點這個有些恐怖,這樣的路徑還是不用為好。

  要介紹的這個工具是tracert(*nix下為traceroute),讓我們來看對上面的第二臺機器用這個命令的結(jié)果
D:>tracert 61.152.104.40

Tracing route to 61.152.104.40 over a maximum of 30 hops

1 13 ms 16 ms 9 ms 10.120.32.1
2 9 ms 9 ms 11 ms 219.233.244.105
3 12 ms 10 ms 10 ms 219.233.238.173
4 15 ms 15 ms 17 ms 219.233.238.13
5 14 ms 19 ms 19 ms 202.96.222.73
6 14 ms 17 ms 13 ms 202.96.222.121
7 14 ms 15 ms 14 ms 61.152.81.86
8 15 ms 14 ms 13 ms 61.152.87.162
9 16 ms 16 ms 28 ms 61.152.99.26
10 12 ms 13 ms 18 ms 61.152.99.94
11 14 ms 18 ms 16 ms 61.152.104.40

Trace complete.

從這個命令的結(jié)果能夠看到從我的機器到服務器所走的路由,確實是11個節(jié)點(上面說10個好像是我犯了忘了算0的錯誤了,應該是64-54+1,嘿嘿),而不是128的TTL經(jīng)過了70多個節(jié)點。
既然已經(jīng)說到這里了,不妨順便說說關(guān)于這兩個ICMP命令的高級一點的東西。
首先是ping命令,其實ping有這樣一個參數(shù),可以無視操作系統(tǒng)默認TTL值而使用自己定義的值來發(fā)送ICMP Request包。
例如還是用那臺Linux機器,用以下命令:
D:>ping 61.152.104.40 -i 11

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.104.40: bytes=32 time=10ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54
Reply from 61.152.104.40: bytes=32 time=10ms TTL=54
Reply from 61.152.104.40: bytes=32 time=13ms TTL=54

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 10ms, Maximum = 13ms, Average = 11ms

這個命令我們定義了發(fā)包的TTL為11,而前面我們知道,我到這臺服務器是要經(jīng)過11個節(jié)點的,所以這個輸出和以前沒什么不同?,F(xiàn)在再用這個試試看:
D:>ping 61.152.104.40 -i 10

Pinging 61.152.104.40 with 32 bytes of data:

Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.
Reply from 61.152.99.94: TTL expired in transit.

Ping statistics for 61.152.104.40:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0ms, Average = 0ms

  可以看到,結(jié)果不一樣了,我定義了TTL為10來發(fā)包,結(jié)果是TTL expired in transit.就是說在到達服務器之前這個包的生命周期就結(jié)束了。注意看這句話前面的ip,這個ip恰好是我們前面tracert結(jié)果到服務器之前的最后1個ip,包的TTL就是在這里減少到0了,根據(jù)我們前面的討論,當TTL減為0時設備會丟棄包并發(fā)送一個TTL過期的ICMP反饋給源地址,這里的結(jié)果就是最好的證明。
  通過這里再次又證明了從我機器到服務器是經(jīng)過了11個節(jié)點而不是70多個,呵呵。
  最后再鞏固一下知識,有人可能覺得tracer這個命令很神奇,可以發(fā)現(xiàn)一個包所經(jīng)過的路由路徑。其實這個命令的原理就在我們上面的討論中。

  想象一下,如果我給目的服務器發(fā)送一個TTL為1的包,結(jié)果會怎樣?
根據(jù)前面的討論,在包港出發(fā)的第一個節(jié)點,TTL就會減少為0,這時這個節(jié)點就會回應TTL失效的反饋,這個回應包含了設備本身的ip地址,這樣我們就得到了路由路徑的第一個節(jié)點的地址。
因此,我們繼續(xù)發(fā)送TTL=2的包,也就受到第二個節(jié)點的TTL失效回應

  依次類推,我們一個一個的發(fā)現(xiàn),當最終返回的結(jié)果不是TTL失效而是ICMP Response的時候,我們的tracert也就結(jié)束了,就是這么簡單。


  順便補一句ping命令還有個-n的參數(shù)指定要發(fā)包的數(shù)量,指定了這個數(shù)字就會按照你的要求來發(fā)包了而不是默認的4個包。如果使用-t參數(shù)的話,命令會一直發(fā)包直到你強行中止它。

 

 
 
[ 資訊搜索 ]  [ 加入收藏 ]  [ 告訴好友 ]  [ 打印本文 ]  [ 關(guān)閉窗口 ]

 
0條 [查看全部]  相關(guān)評論

 
推薦圖文
推薦資訊
點擊排行
 
網(wǎng)站首頁 | 招賢納士 | 關(guān)于我們 | 聯(lián)系方式 | 使用協(xié)議 | 版權(quán)隱私 | 網(wǎng)站地圖 | 排名推廣 | 廣告服務 | 網(wǎng)站留言 | RSS訂閱 | 粵ICP備10022894號-3