ping程序是用來測試另一台主機是否可達。該程序發送一份ICMP回顯請求報文給目的主機,并等待目的主機發送ICMP回顯應答給本機。
一般來說,若不能ping到某台主機,那麼這台主機不可達,便無法telnet,或者ftp到該主機。如果telnet或ftp不到目的主機,那麼往往可以使用ping程序來測試該目的主機的可達性。ping程序還能測出到這台主機的往返時間。
不過随着防火牆的普及,當ping不到一台主機時,卻有可能telnet上該主機。這是因為一台主機的可達性可能不隻取決于I P層是否可達,還取決于使用何種協議以及端口号。
6.2.ping程序我們稱發送回顯請求的ping程序為客戶,而被ping的主機為服務器。一般ping程序是在内核中實現,而不是一個應用程序。包括ICMP章節提到的地址掩碼請求與時間戳請求兩種ICMP查詢報文,都是在内核實現。
ICMP回顯請求與回顯應答報文如圖6-1.
6-1
對于其他類型的ICMP查詢報文,服務器必須響應标識符和序列号字段。另外,客戶發送的選項數據必須回顯,假設客戶對這些信息都會感興趣。
Unix系統在實現ping程序時是把ICMP報文中的标識符字段置成發送進程的ID号。這樣即使在同一台主機上同時運行了多個ping程序實例,ping程序也可以識别出返回的信息。序列号從0開始,每發送一次新的回顯請求就加1。ping程序打印出返回的每個分組的序列号,允許我們查看是否有分組丢失、失序或重複。IP是一種最好的數據報傳遞服務,因此這三個條件都有可能發生。
6.3.LAN輸出在局域網上運行ping程序的輸出一般格式如圖6-2:
6-2
當返回ICMP回顯應答時,要打印出序列号和TTL,并計算往返時間(TTL在IP首部)。可以觀察,回顯應答是按照發送的順序返回的1,2,3,4,5,6,7,8.
ping程序通過在ICMP報文數據中存放發送請求的時間值來計算往返時間。當應答返回時,用當前時間減去存放在ICMP報文中的時間值,即是往返時間。
6.4.WAN輸出在廣域網上運行ping程序輸出格式與局域網上有很大不同,圖6-3是在廣域網上運行ping程序的結果
6-3
顯然,序列号為1、2、3、4、6、1 0、11、1 2和1 3的回顯請求或回顯應答在某個地方丢失了。并且往返時間變大,這是因為目的主機離我們更“遠”了。通過廣域網還有可能看到重複的分組(即相同序列号的分組被打印兩次或更多次),失序的分組(序列号為N 1的分組在序列号為N的分組之前被打印)。
6.5.IP記錄路由選項ping程序為我們提供了查看I P記錄路由(RR)選項的機會。大多數不同版本的ping程序都提供-R選項,以提供記錄路由的功能。它使得p i n g程序在發送出去的I P數據報中設置I PR R選項(該I P數據報包含I C M P回顯請求報文)。這樣,每個處理該數據報的路由器都把它的I P地址放入選項字段中。當數據報到達目的端時,I P地址清單應該複制到I C M P回顯應答中,這樣返回途中所經過的路由器地址也被加入清單中。當p i n g程序收到回顯應答時,它就打印出這份IP地址清單。
IP數據報中的RR選項如圖6-4所示。
6-4
code是一個字節,指明I P選項的類型。對于R R選項來說,它的值為7。l e n是R R選項總字節長度,在這種情況下為39(盡管可以為RR選項設置比最大長度小的長度,但是ping程序總是提供39字節的選項字段,最多可以記錄9個IP地址。由于IP首部中留給選項的空間有限,它一般情況都設置成最大長度)。
IP記錄路由選項存在一些缺陷,現在一般情況下已經不再使用,有一個更好的traceroute程序實現了這個功能。
6.6.IP時間戳選項IP時間戳選項與記錄路由選項類似。IP時間戳選項的格式如圖6-5所示。
6-5
時間戳選項的代碼為0x44。其他兩個字段len和ptr與記錄路由選項相同:選項的總長度(一般為36或40)和指向下一個可用空間的指針(5,9,13等)。接下來的兩個字段是4 bit的值:OF表示溢出字段,FL表示标志字段。時間戳選項的操作根據标志字段來進行,如圖6-6所示。
6-6
時間戳的取值一般為自UTC午夜開始計的毫秒數,與I C M P時間戳請求和應答相類似。如果路由器不使用這種格式,它就可以插入任何它使用的時間表示格式,但是必須打開時間戳中的高位以表明為非标準值。
與我們遇到的記錄路由選項所受到的限制相比,時間戳選項遇到情況要更壞一些。如果我們要同時記錄IP地址和時間戳(标志位為1),那麼就可以同時存入其中的四對值。隻記錄時間戳是沒有用處的,因為我們沒有标明時間戳與路由器之間的對應關系(除非有一個永遠不變的拓撲結構)。标志值取3會更好一些,因為我們可以插入時間戳的路由器。一個更為基本的問題是,很可能無法控制任何給定路由器上時間戳的正确性。這使得試圖用IP選項來計算路由器之間的跳站數是徒勞的。
同樣traceroute程序提供了一種更好方式來記錄時間戳。
6.7.小結ping程序是對兩個TCP/IP系統連通性進行測試的基本工具。它隻利用ICMP回顯請求和回顯應答報文,而不用經過傳輸層(TCP/UDP)。Ping服務器一般在内核中實現ICMP的功能。我們分析了在LAN、WAN上運行ping程序的輸出結果。我們還讨論并使用了ping程序的IP記錄路由選項。利用該IP選項,可以看到它是如何頻繁使用默認路由的。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!