2009年1月10日 星期六

[TCP/IP Illustrated] Ping

簡介

ping 通常是我們用來驗證主機之間的通訊是否有連通的第一個手段。然而隨著網路技術越趨進步與複雜,光用 ping 已經不足以判斷兩台主機之間是否可以互相進行通訊了,但由於 ping 已經是一個歷史悠久的網路工具程式,因此還是很值得拿來探討一下。


ping 是如何運作的 ?

ping 的實作是使用 ICMP echo/reply 來達成的,其中發送 echo 的主機稱為 client,回應 reply 的主機稱為 server,而由於 ping 都已經實作在各 OS 的 kernel 中,因此也不必為了啟用這個功能而安裝特定的軟體或是服務。

以下是 ICMP echo/reply 的封包格式圖:
封包的欄位說明:
  • type
    echo 為 8;reply 為 0。

  • code
    echo/reply 皆為 0。

  • identifier
    此欄位儲存 ping client 的 process number,如此一來當收到 reply 後,就可以知道由哪一個 process 來處理。

  • sequence number
    紀錄 ping client 所送出的第幾個封包,從 0 開始依次遞增。


以下是從 Linux server ping 到 google 的範例:


IP Record Route Option

使用 ping 時可以透過「-R」參數將 record route 選項開啟,如此一來就可以知道封包所經過的路徑與節點,但由於目前大部分主機都關閉對此功能的支援,因此使用這個參數都不會有相關的回應。

不過雖然 ping 支援紀錄路徑的功能,但還是有最多僅能紀錄 9 組 ip 的限制(即使來回經過的相同節點都要包含),在目前網路環境下,實用性似乎不足。

不過以下還是放一下 IP record route 封包存放資料的格式:


IP Timestamp Option

這個就跟 record route option 蠻類似的,只是紀錄的是封包到達每個 hop 的 timstamp 而非 ip address,封包格式如下圖:

沒有留言:

張貼留言