1. 程式人生 > >TCP/IP詳解學習筆記(5)-- ICMP:internet 控制報文協議

TCP/IP詳解學習筆記(5)-- ICMP:internet 控制報文協議

1.概述

     ICMP是(Internet Control Message Protocol)Internet控制報文協議。它是TCP/IP協議族的一個子協議,用於在IP主機、路由器之間傳遞控制訊息。控制訊息是指網路通不通、主機是否可達、路由是否可用等網路本身的訊息。這些控制訊息雖然並不傳輸使用者資料,但是對於使用者資料的傳遞起著重要的作用。      ICMP報文是在IP資料報內部被傳輸的。      ICMP報文的格式如圖所示。      
  • 型別欄位:可以有15個不同的值,來描述特定型別的ICMP報文。
  • 程式碼:進一步描述型別的不同條件
  • 檢驗和:ICMP的檢驗和是必需的。
2.ICMP報文的型別      各種型別的ICMP報文如圖所示。
不同型別由報文中的型別欄位和程式碼欄位共同決定。圖中最後兩列表明ICMP報文是一份查詢報文還是一份差錯報文。 以下情況不會導致產生ICMP差錯報文:
  • ICMP差錯報文(避免無休止的迴圈下去,但是ICMP查詢報文有可能產生ICMP差錯報文)
  • 目的地址是廣播地址或者多博地址的IP資料報
  • 作為鏈路層廣播的資料報
  • 不是IP分片的第一片。
  • 源地址不是單個主機的資料報。這就是說,源地址不能為零地址,環回地址,廣播地址或者多博地址。
3.ICMP地址掩碼請求與應答      ICMP地址掩碼請求與應答用於無盤系統引導過程中獲取自己的子網掩碼。系統廣播它 ICMP請求報文,或者使用BOOTP協議。ICMP地址掩碼請求和應答報文如圖所示。      
     ICMP報文中的識別符號和序列號欄位由傳送端任意選擇指定。 4.ICMP時間戳請求與應答      ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的同一時間(UTC)。ICMP時間戳請求和應答報文如圖所示。 請求端填寫發起時間戳,然後傳送報文。應答系統收到請求報文時填寫接收時間戳。在傳送應答時填寫傳送時間戳。 5.ICMP埠不可達差錯      ICMP埠不可達差錯報文,是收到一個UDP資料報而目的埠與某個正在使用的程序不相符,則返回一個ICMP不可達報文。      ICMP報文是主機之間交換的,而不用目的埠號。      ICMP的一個規則是:ICMP差錯報文必須包括生成該差錯報文的資料報IP首部,還必須至少包括跟在該IP首部後面的前8個位元組。如圖所示。      
6.ICMP主機與網路不可達差錯      當路由器收到一份IP資料報但又不能轉發時候,就要傳送一份ICMP“主機不可達”差錯報文。 7.ICMP重定向差錯      當IP資料報應該被髮送到另一個路由器時,收到資料報的路由器就要傳送ICMP重定向差錯報文給IP資料報的傳送端。      重定向一般用來讓具有很少選路資訊的主機逐漸建立更完善的路由表。      ICMP重定向報文的格式如圖所示。      ICMP重定向報文的接收者必須檢視三個IP地址
  • 導致重定向的IP地址(即ICMP重定向報文的資料位於IP資料報的首部)
  • 傳送重定向報文的路由器的IP地址(包含重定向資訊的IP資料報中的源地址)
  • 應該採用的路由器IP地址。
     ICMP重定向不同程式碼值含義            ICMP重定向報文只能有路由器產生。 8.ICMP路由器發現報文      主機在引導以後要廣播或多播傳送一份路由請求報文。一臺或更多的路由器響應一份路由器通告報文。      ICMP路由器請求報文的格式如圖所示:      ICMP路由器通告報文格式:       主要用來更新路由表。