icmp通常被認為是ip層的一部分。它傳遞差錯報文以及其它需要注意的資訊。icmp報文在ip報文內部被傳輸,它們之間的關係如下圖:
icmp報文的格式如下圖所示,前4個位元組都是一樣的,但是剩下的其他位元組互不相同。
說明:①型別字段可以有15個不同的值,以描述特定型別的icmp報文。某些icmp報文還使用**欄位的值來進一步描述不同的條件。
②檢驗和字段覆蓋整個icmp報文。可以檢測整個icmp報文的正確性。
各種型別的icmp報文的格式如下圖所示,不同型別由報文中的型別欄位和**欄位來共同決定。圖中的最後兩列表明報文的查詢或者差錯型別。
當傳送乙份差錯報文的時候,報文始終包含ip首部和產生icmp差錯報文的ip資料報的前8個位元組(一般會包含埠資訊),這樣就可以將差錯報文和特定的協議、特定的使用者程序關聯起來。
過去曾執行icmp差錯報文響應廣播分組,這導致了嚴重的廣播風暴,如是定下了一些不產生icmp差錯報文的情況
①icmp差錯報文(但是,icmp查詢報文可能產生icmp差錯報文)
②目的位址是廣播位址或多播位址的ip資料報。
③作為鏈路層廣播的資料報(arp請求報文)。
④不是ip分片的第一片。因為只有ip分配的第一片有埠資訊,所以不是第一片的報文產生icmp差錯報文沒有應用程式處理。
⑤源位址不是單個主機的資料報。
icmp位址掩碼請求用於無盤系統在引導過程中獲取自己的子網掩碼。無盤系統還可以通過bootp協議獲取子網掩碼。下圖顯示了icmp位址掩碼請求和應答報文的格式:
icmp報文中的識別符號和序列號字段由傳送端任意選擇設定,這些值在應答中將被返回,傳送端可以把應答與請求進行匹配。
icmp時間戳請求與應答允許系統向另乙個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調統一時間。它可以提供毫秒級的解析度。下圖是icmp時間戳請求和應答報文的格式。
如果系統收到乙份udp資料報而目的埠與某個正在使用的程序不相符,那麼返回乙個icmp不可達報文。注意icmp報文是在主機間交換,而不用埠號,而udp資料報的互動是需要資料報的。下圖顯示了一般icmp差錯報文的格式:
icmp差錯報文必須包含產生差錯報文的ip首部和後面的8個位元組。跟在ip首部後面的8個位元組一般是udp首部,而udp首部中包含源埠和目的埠位址。使得icmp知道如何去解釋錯誤。
下圖是icmp埠不可達報文的格式:
我們在前面的圖中了解到不可達差錯的型別為3,**從0到15。儘管圖中顯示icmp報文中的第二個32bit字必須為0,但是當**為4時(「需要分片但設定了不分片位元」),路勁mtu發現機制允許路由器把外出介面的mtu填到這個32bit的低16bit上。
ping程式傳送乙份icmp回顯應答給主機,並等待icmp回顯應答,用來判斷主機是否可達。下圖顯示的icmp回顯請求與應答報文的格式:
ping程式一般是在核心中實現的,它不是乙個使用者程序。前面描述的icmp位址掩碼和icmp時間戳都是在核心中進行處理的。對於unix系統實現的ping程式會把icmp的識別符號設定成程序id,而序號從0開始,沒傳送一次回顯請求加1。允許我們檢視分組丟失、失序和重複。而windows系統則不同,它將識別符號設定成指定值,而序號是將本機上所有回顯請求一起排序的結果,也就是說,你開啟多個命令列視窗,執行ping程式,回顯請求的序號可能不是連續的。這兩種實現方式都可以完成目的。
ping程式為我們檢視ip記錄路由(rr)選項的機會。一般在ping後面加上-r即可實現。記錄路由選項可以讓每個處理資料報的路由器都將它們出口的ip位址放入ip首部的選項欄位中。當資料報到達目的端時,ip位址清單會被複製到icmp回顯應答中,這樣返回圖中所經過的路由器位址也會被放入清單中。
由於ip首部固定長度為20位元組,選項部分總共剩餘40位元組,rr選項用去3個位元組,這樣就剩下37個位元組來存放ip位址清單了,換算下來最多只能存放9個ip位址,這是非常有限的。現在我們要記錄路由一般會使用traceroute(非windows系統)這個命令。
下圖顯示了ip資料報中rr選項的一般格式:
①code欄位指明ip選項的型別。對於rr來說是7。len欄位是rr選擇總位元組長度,在這種情況下是39。
③後面的其它字段記錄的都是ip位址。
ip路由選項舉例
該例子是從svr4去ping主機slip,並設定了路由選項,可以看到rr選擇記錄的都是路由器的出口位址。
ip時間戳選項與記錄路由選項類似,其一般格式如下:
①code在時間戳選項中為0x44,len和ptr的作用與記錄路由選項相同。
②of欄位表示溢位,如果路由器由於ip資料報沒有空間而不能增加時間戳選項,那麼它將增加溢位欄位的值。
③fl表示標誌字段,標誌的描述如下:
時間戳的取值一般為自utc午夜開始計算的毫秒數,與icmp請求與應答型別。
icmp是網際網路的控制報文協議。icmp位址掩碼報文和icmp時間戳報文是兩種典型的請求-應答型報文。它們都可以通過識別符號和序列號來唯一識別乙個程序。icmp埠不可達報文是一種典型的icmp差錯報文,icmp差錯報文中一般攜帶ip資料報的首部和首部後的8個位元組,這樣就可以去定位唯一的程序,這樣使用者程式就能夠準確反應。
ping程式是乙個典型的使用icmp回顯請求和應答報文的程式。ping伺服器一般在核心中實現icmp的功能。ping的記錄路由和記錄時間戳的選項可以記錄資料報經過的路由和各個路由上的時間戳。
《TCP IP協議族》 ICMP協議
icmp協議是一種面向無連線的協議,用於傳輸出錯報告控制資訊。它是乙個非常重要的協議,它對於網路安全具有極其重要的意義。它是tcp ip協議 族的乙個子協議,屬於網路層協議,主要用於在ip主機與路由器之間傳遞控制資訊,包括報告錯誤 交換受限控制和狀態資訊等。當遇到ip資料無法訪問目標 ip路由器無法...
TCP IP協議之ICMP協議
一 ip缺點 1 無差錯報告和差錯糾正機制 2 缺少一種為主機和管理查詢的機制。icmp本身是網路層協議,但是,它的報文不是如設想的那樣傳給資料鏈路層,實際上,icmp報文首先封裝成ip資料報,然後再傳送給下一層 在ip資料報中的協議欄位是1就表示其ip資料是icmp報文 icmp封裝在ip的資料裡...
15 TCPIP協議族詳解 SNMP協議
本文主要介紹snmp 簡單網路管理協議 get request操作 從 程序提取乙個或多個引數值 get next request操作 從 程序提取乙個或多個引數值的下乙個引數值。set request操作 設定 程序的乙個或多個引數值。get response操作 返回乙個或多個引數值。這個操作是...