我們稱發送回顯請求的ping程序為客戶,而稱被ping的主機為服務器。大多數的TCP/IP實現都在內核中直接支持Ping服務器—這種服務器不是一個用戶進程(在第6章中描述的兩種ICMP查詢服務,地址掩碼和時間戳請求,也都是直接在內核中進行處理的)。
ICMP回顯請求和回顯應答報文如圖1所示。
圖1 ICMP回顯請求和回顯應答報文格式
對于其他類型的I C M P查詢報文,服務器必須響應標識符和序列號字段。另外,客戶發送的選項數據必須回顯,假設客戶對這些信息都會感興趣。
U n i x系統在實現p i n g程序時是把I C M P報文中的標識符字段置成發送進程的I D號。這樣即使在同一臺主機上同時運行了多個p i n g程序實例,p i n g程序也可以識別出返回的信息。
序列號從0開始,每發送一次新的回顯請求就加1.p i n g程序打印出返回的每個分組的序列號,允許我們查看是否有分組丟失、失序或重復。I P是一種最好的數據報傳遞服務,因此這三個條件都有可能發生。
舊版本的p i n g程序曾經以這種模式運行,即每秒發送一個回顯請求,并打印出返回的每個回顯應答。但是,新版本的實現需要加上-s選項才能以這種模式運行。默認情況下,新版本的p i n g程序只發送一個回顯請求。如果收到回顯應答,則輸出“host is alive ”;否則,在2 0秒內沒有收到應答就輸出“no answer(沒有回答)”。