Ping程序由Mike Muuss編寫,目的是為了測試另一臺主機是否可達。該程序發送一份ICMP回顯請求報文給主機,并等待返回ICMP回顯應答。
Ping程序
我們稱發送回顯請求的Ping程序為客戶,而稱被Ping的主機為服務器。大多數的TCP/IP
實現都在內核中直接支持Ping服務器,這種服務器不是一個用戶進程。
ICMP回顯請求和回顯應答報文如圖1所示。

圖1:ICMP回顯請求和回顯應答報文格式
Unix系統在實現ping程序時是把ICMP報文中的標識符字段置成發送進程的ID號。這樣即使在同一臺主機上同時運行了多個ping程序實例, ping程序也可以識別出返回的信息。
序列號從0開始,每發送一次新的回顯請求就加1。ping程序打印出返回的每個分組的序
列號,允許我們查看是否有分組丟失、失序或重復。IP是一種最好的數據報傳遞服務,因此這三個條件都有可能發生。
IP記錄路由選項
ping程序為我們提供了查看IP記錄路由(RR)選項的機會。大多數不同版本的ping程序都提供-R選項,以提供記錄路由的功能。它使得ping程序在發送出去的IP數據報中設置IP
RR選項(該IP數據報包含ICMP回顯請求報文)。這樣,每個處理該數據報的路由器都把它的
IP地址放入選項字段中。當數據報到達目的端時, IP地址清單應該復制到ICMP回顯應答中,
這樣返回途中所經過的路由器地址也被加入清單中。當ping程序收到回顯應答時,它就打印
出這份IP地址清單。
最大的問題是IP首部中只有有限的空間來存放IP地址。IP首部中的首部長度字段只有4bit,因此整個IP首部最長只能包括15(4bit全為1,8+4+2+1=15)個32bit長的字(即60個字節)。由于IP首部固定長度為20字節(參加第三章的IP首部格式), RR選項用去3個字節,這樣只剩下37個字節(60-20-3)來存放IP地址清單,也就是說只能存放9(4×9)個IP地址。
IP數據報中的RR選項的一般格式如圖2所示。

圖2:IP首部中的記錄路由選項的一般格式
code是一個字節,指明IP選項的類型。對于RR選項來說,它的值為7。len是RR選項總字
節長度,在這種情況下為39(盡管可以為RR選項設置比最大長度小的長度,但是ping程序
總是提供39字節的選項字段,最多可以記錄9個IP地址。由于IP首部中留給選項的空間有限,
它一般情況都設置成最大長度)。
ptr稱作指針字段。它是一個基于1的指針,指向存放下一個IP地址的位置。它的最小值為4,指向存放第一個IP地址的位置。隨著每個IP地址存入清單, ptr的值分別為8,1 2,1 6,最大到36。當記錄下9個IP地址后,ptr的值為40,表示清單已滿。
IP時間戳選項
IP時間戳選項與記錄路由選項類似。IP時間戳選項的格式如圖3所示。

圖3:IP首部中時間戳選項的一般格式
時間戳選項的代碼為0x44。其他兩個字段len和ptr與記錄路由選項相同:選項的總長度
(一般為36或40)和指向下一個可用空間的指針( 5,9,13等)。接下來的兩個字段是4 bit的值:OF表示溢出字段,FL表示標志字段。
posted on 2008-06-10 23:17
水 閱讀(2807)
評論(5) 編輯 收藏 引用 所屬分類:
tcp/ip