200709012043Ping指令與Destination host unreachable 和 Request time out"之區別

當中以"destination host unreachable"和"time out"為最常見的回應和障礙,但是兩者的差別卻也常存在混淆和困擾,到底兩者的差別在哪裡?

Ping的返回訊息有:

  Request Timed Out:這個訊息表示對方主機可以到達到TIME OUT,這種情況通常是為對方拒絕接收你發給它的數據包造成數據包丟失。大多數的原因可能是對方裝有防火牆或已下線。

  Destination host Unreachable:這個訊息表示對方主機不存在或者沒有跟對方建立連線。這裡要說明一下"destination host unreachable"和"time out"的區別,如果所經過的路由器的路由表中具有到達目標的路由,而目標因為其它原因不可到達,這時候會出現"time out",如果路由表中連到達目標的路由都沒有,那就會出現"destination host unreachable"。

  Bad IP address:這個訊息表示你可能沒有連線到DNS伺服器所以無法解析這個IP位址,也可能是IP位址不存在。

  Source quench received:訊息比較特殊,它出現的機率很少。它表示對方或中途的伺服器繁忙無法回應。

所以:

Request time out:當所經過的路由器的路由表中具有到達目標的路由(理論上可達),但是卻一直沒收到設備的回應,這時候會出現"Request time out"。也就是你ping傳送的封包理論上是能送達對方,卻沒收到回應的封包,有可能的障礙是:防火牆、設定不回應、回應的封包丟失(相關網路設定錯誤)等。(路是通的,只是沒回應)

Destination host unreachable:當路由表中連到達目標的路由都沒有時,ping這個設備就會出現"Destination host unreachable"。也就是:router上沒有到達對方的路徑資訊,不 知道在哪裡,封包該往哪裡送。(找不到抵達對方的)

不管是Destination host unreachable 和 Request time out可能原因都有很多,還有待整理和釐清。

-----------------------------------------------------------------------------

Ping是潛水艇人員的專用術語,表示回應的聲納脈衝,在網絡中Ping 是一個十分好用的TCP/IP工具,主要的功能是用來偵測網絡的連通情況和分析網絡速度。

  Ping的用途就是用來偵測網絡的連同情況和分析網絡速度,但它是通過什麼來顯示連通呢?這首先要瞭解Ping的一些參數和返回訊息。

  以下是PING的一些參數︰

  ping [-t] [-a] [-n count] [-l length] [-f] [-i ttl] [-v tos] [-r count] [-s count] [-j computer-list] | [-k computer-list] [-w timeout] destination-list

  -t  Ping 指定的計算機直到中斷。

  -a  將位址解析為計算機名。

  -n count  傳送 count 指定的 ECHO 數據包數。預設值為 4。

  -l length  傳送含有由 length 指定的數據量的 ECHO 數據包。預設為 32 位元組;最大值是65,527。

  -f  在數據包中傳送"不要分段"標誌。數據包就不會被路由上的閘道分段。

  -i ttl  將"生存時間"字段設定為 ttl 指定的值。

  -v tos  將"服務類型"字段設定為 tos 指定的值。

  -r count   在"記錄路由"字段中記錄傳出和返回數據包的路由。count 可以指定最少 1 台,最多 9 台計算機。

  -s count   指定 count 指定的躍點數的時間戳。

  -j computer-list   利用 computer-list 指定的計算機清單路由數據包。連續計算機可以被中間閘道分隔(路由稀疏源)IP 容許的最大數量為 9。

  -k computer-list   利用 computer-list 指定的計算機清單路由數據包。連續計算機不能被中間閘道分隔(路由嚴格源)IP 容許的最大數量為 9。

  -w timeout   指定逾時間隔,單位為毫秒。

  destination-list   指定要 ping 的遠端計算機。

  怎樣使用Ping這指令來測試網絡連通呢?

  連通問題是由許多原因引起的,如本地組態錯誤、遠端主機協定失效等,當然還含有設備等造成的故障。

  首先我們講一下使用Ping指令的步驟。

  使用Ping檢查連通性有五個步驟︰

  1. 使用ipconfig /all觀察本地網絡設定是否正確; 

  2. Ping 127.0.0.1,目的是檢查本地(網路卡)的TCP/IP協定是否正確設定。 

  3. Ping本機IP位址,這樣是為了檢查本機的IP位址是否設定有誤。 

  4. Ping本網閘道或本網IP位址,檢查硬體設備是否有問題,也可以檢查本機與本地網絡連線是否正常。到此正常可排除近端區網的問題。

  5. Ping遠端IP位址,這主要是檢查本網或本機與外部的連線是否正常。

  在檢查網絡連通的過程中可能出現一些錯誤,這些錯誤總的來說分為兩種最常見。

  1. Request Timed Out 

"request time out"這提示除了在《PING(一)》提到的對方可能裝有防火牆或已關機以外,還有就是本機的IP不正確和閘道設定錯誤。 

  1、IP不正確︰ 

IP不正確主要是IP位址設定錯誤或IP位址衝突,這可以利用ipconfig /all這指令來檢查。在WIN2000下IP衝突的情況很少發生,因為系統會自動偵測在網絡中是否有相同的IP位址并提醒你是否設定正確。在NT中不但會出現"request time out"這提示而且會出現"Hardware error"這提示訊息比較特殊不要給它的提示所迷惑。 

  2、閘道設定錯誤︰這個錯誤可能會在第四個步驟出現。閘道設定錯誤主要是閘道位址設定不正確或閘道沒有幫你轉信數據,還有就是可能遠端閘道失效。這裡主要是在你Ping外部網絡位址時出錯。錯誤表現為無法Ping外部主機返回訊息"Request timeout"。

  2. Destination Host Unreachable 

  當你在開始PING網絡計算機時如果網絡設備出錯它返回訊息會提示"destination host unreachable"。如果局網域網中使用DHCP指派IP時,而碰巧DHCP失效,這時使用 PING指令就會產生此錯誤。因為在DHCP失效時客戶機無法指派到IP系統只有自設IP,它往往會設為不同子網的IP。所以會出現"Destination Host Unreachable"。另外子網遮罩設定錯誤也會出現這錯誤。 

  還有一個比較特殊就是路由返回錯誤訊息,它一般都會在"Destination Host Unreachable"前加上IP位址說明哪個路由不能到達目標主機。這說明你的機器與外部網絡連線沒有問題,但與某台主機連線存在問題。

  【範例】

  有19台主機,連到一台100M集線器連線伺服器,使用DHCP動態指派IP位址。 

  有一次有位同事匆忙地告訴我"我的OUTLOOK打不開了",我到他機器檢查,首先我檢查了本地網絡設定,我用ipconfig /all看IP指派情況一切正常。接著我就開始PING網絡中的其中一台機器,第一次PING結果很正常,但OUTLOOK還是無法使用其它網絡軟體和Copy網絡文件都可以使用但網絡速度很慢,第二次PING我用了一個參數-t(-t可以不中斷地PING對方,當時我想PING一次可能發現不了問題)發現有time=30ms和request time out,從伺服器PING這台機就更有趣,request time out比正常量據還多,在局網域中竟然有time=30ms和request time out太不正常了。開始我認為是網卡的問題但換網卡后故障依舊,重做網線還是不能解決問題,這故障真有趣﹗最後我沒辦法了把它插在集線器連接埠上的另一端的網線換到另一個連接埠,哈﹗故障解決了。原來是集線器連接埠壞了。

如何用Ping指令來判斷一條鏈路的速度?

  Ping這個指令除了可以檢查網絡的連通和偵測故障以外,還有一個比較有趣的用途,那就是可以利用它的一些返回數據,來估算你跟某台主機之間的速度是多少位元組每秒

  我們先來看看它有那些返回數據。

  Pinging 202.105.136.105 with 32 bytes of data:

  Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 

  Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 

  Reply from 202.105.136.105: bytes=32 time=590ms TTL=114 

  Reply from 202.105.136.105: bytes=32 time=601ms TTL=114

 

  Ping statistics for 202.105.136.105: 

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 

  Approximate round trip times in milli-seconds: 

    Minimum = 590ms, Maximum = 601ms, Average = 593ms

  在例子中"bytes=32"表示ICMP報文中有32個位元組的測試數據(這是估算速度的關鍵數據),"time=590ms"是往返時間。

  怎樣估算鏈路的速度呢?舉個例子吧。我們把A和B之間設定為PPP鏈路。

  從上面的PING例子可以注意到,預設情況下傳送的ICMP報文有32個位元組。除了這32個位元組外再加上20個位元組的IP首部和8個位元組的ICMP首部,整個IP數據報文的總長度就是60個位元組(因為IP和ICMP是Ping指令的主要使用協定,所以整個數據報文要加上它們)。另外在使用Ping指令時還使用了另一個協定進行傳輸,那就是PPP協定(點對點協定),所以在數據的開始和結尾再加上8個位元組。在傳輸過程中,由於每個位元組含有8bit數據、1bit起始位和1bit離開位,因此傳輸速率是每個位元組2.98ms。由此我們可以估計需要405ms。即68*2.98*2(乘2是因為我們還要計算它的往返時間)。

  我們來測試一下33600 b/s的鏈路︰

  Pinging 202.105.36.125 with 32 bytes of data:

  Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 

  Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 

  Reply from 202.105.36.125: bytes=32 time=415ms TTL=114 

  Reply from 202.105.36.125: bytes=32 time=421ms TTL=114

 

  Ping statistics for 202.105.36.125: 

    Packets: Sent = 4, Received = 4, Lost = 0 (0% loss), 

  Approximate round trip times in milli-seconds: 

    Minimum = 415ms, Maximum = 421ms, Average = 417ms

  看是不是差不多啊。^_^

  這裡大家可能要注意到,這估算值跟實際值是有誤差的,為什麼呢?因為我們現在估算的是一個理論值,還有一些東西我們沒有考慮。比如在網絡中的其它干擾,這些干擾主要來之別的計算機。因為在你測試時不可能全部計算機停止使用網絡給你做測試,這是不實際的。另外就是傳輸設備,因為有某些設備如MODEM它在傳輸時會把數據壓縮后再傳送,這大大減少了傳輸時間。這些東西產生的誤差我們是不能避免的,但其數值大約在5%以內我們都可以接受(利用MODEM傳輸例外),但是可以減少誤差的產生。比如把MODEM的壓縮功能關閉和在網絡沒有那麼繁忙時進行測試。有時候誤差是無須消除的。因為我們需要這些誤差跟所求得的理論值進行比較分析,從而找出網絡的缺陷而進行最佳化。這時測試網絡的所有數據含有誤差都會成為我們最佳化的依據。

  還要注意,這種算法在局網域網並不適用,因為在局網域網中速度非常的快幾乎少於1ms,而Ping的最小時間解析度是1ms,所以根本不可使用Ping指令來偵測速度。如果想測試速度那就要用專門儀器來偵測。

  總的來說,Ping指令是一個在故障檢查方面很有用而且很便利的工具,你不應該忽視它的存在。

【來源】網路,佚名不可考

回應
即時新台幣匯率
COMMODITIES