1. 程式人生 > >TCP-IP詳解卷1:協議 學習筆記(6) Ping

TCP-IP詳解卷1:協議 學習筆記(6) Ping

參考:TCP-IP詳解卷1:協議

Ping程式的目的是為了測試另一臺主機是否可達。該程式傳送一份ICMP回顯請求報文給主機,並等待返回ICMP回顯應答。

一般來說,如果不能Ping到某臺主機,那麼久不能Telnet或者FTP到那臺主機。反過來,如果不能Telnet到某臺主機,可以使用Ping程式來確定問題在哪裡。Ping程式還能測出這臺主機的往返時間,以表明該主機離我們多遠。

稱傳送回顯請求的ping程式為客戶,而稱被ping的主機為伺服器。大多數的TCP/IP實現都在核心中直接支援Ping伺服器,這種伺服器不是一個使用者程序。

ICMP回顯請求和回顯應答報文:

對於其他型別的ICMP查詢報文,伺服器必須響應標識符合序列號欄位。另外,客戶傳送的選項資料必須回顯,假設客戶對這些資訊都會感興趣。

Unix系統在實現ping程式時是把ICMP報文中的識別符號欄位設定成傳送程序的ID號,這樣即使在同一臺主機上同時運行了多個ping程式例項,ping程式也可以識別出返回的資訊。

序列號從0開始,每傳送一次新的回顯請求就加1.ping程式打印出返回的每個分組的序列號,允許我們檢視是否有分組丟失、失序或重複。

當返回ICMP回顯應答時,要打印出序列號和TTL,並計算往返時間。

ping程式通過在ICMP報文資料中存放傳送請求的時間值來計算往返時間。當應答返回時,用當前時間減去存放在ICMP報文中的時間值。

ping程式提供了檢視IP記錄路由(RR)選項的機會。大多數不同版本的ping程式都提供-R選項,以提供記錄路由的功能。使得ping程式在傳送出去的IP資料報中設定IPRR選項(該IP資料報包含ICMP回顯請求報文)。這樣每個處理該資料報的路由器都把它的IP地址放入選項欄位中。當資料包到達目的端時,IP地址清單應該複製到ICMP回顯應答中,這樣返回途中所經過的路由器地址也被加入清單中。當ping程式收到回顯應答時,就打印出這份IP地址清單。

這個過程聽起來簡單,但存在一些缺陷。源端主機生成RR選項,中間路由器對RR選項的處理,以及把ICMP回顯請求中的RR清單複製到ICMP回顯應答中,所有這些都是選項功能。幸運的是,大多數系統都支援這些選項功能,只是有一些系統不把ICMP請求中的IP清單複製到ICMP應答中。

但是,最大的問題是IP首部中只有有限的空間來存放IP地址。IP首部中的首部長度欄位只有4bit,因此整個IP首部最長只能包括15個32bit長的字(即60個位元組)。由於IP首部固定長度為20位元組,RR選項用去3個位元組,這樣只剩下37個位元組來存放IP低脂清淡,也就是說只能存放9個IP地址。

IP資料報中的RR選項的一般格式:

code是一個位元組,指明IP選項的型別,對於RR選項來說,它的值是7.len是RR選項總位元組長度,在這種情況下為39。

ptr為指標欄位,是一個基於1的指標,指向存放下一個IP地址的位置。它的最小值為4,指向存放第一個IP地址的位置,隨著每個IP地址存入清單,ptr的值分別為8,12,16,最大到36.當記錄了9個IP地址之後,ptr的值為40,表示清單已滿。

IP時間戳選項與記錄路由選項類似。

時間戳選項的程式碼為0x44.

其他兩個欄位len與ptr與記錄路由選項相同。選項的總長度一般為36或40和指向下一個可用空間的指標(5,9,13等)。

接下來兩個欄位是4bit的值:OF表示溢位欄位,FL表示標誌欄位。時間戳選項的操作根據標誌欄位來進行: