ICMP控制報文協議

引言

ICMP經常被認爲是IP層的一個組成部分。它傳遞差錯報文以及其他需要注意的信息。ICMP報文通常被IP層或更高層協議(TCP或UDP)使用。一些ICMP報文把差錯報文返回給用戶進程。

這裏寫圖片描述

ICMP報文的格式如圖所示。所有報文的前4個字節都是一樣的,但是剩下的其他字節則互不相同。類型字段可以有15個不同的值,以描述特定類型的ICMP報文。某些ICMP報文還使用代碼字段的值來進一步描述不同的條件。檢驗和字段覆蓋整個ICMP報文。

這裏寫圖片描述

ICMP報文的類型

當發送一份ICMP差錯報文時,報文始終包含IP的首部和產生ICMP差錯報文的IP數據報的前8個字節。這樣,接收ICMP差錯報文的模塊就會把它與某個特定的協議(根據IP數據報首部中的協議字段來判斷)和用戶進程(根據包含在IP數據報前8個字節中的TCP或UDP報文首部中的TCP或UDP端口號來判斷)聯繫起來。

這裏寫圖片描述

這裏寫圖片描述

下面各種情況都不會導致產生ICMP差錯報文:

  • ICMP差錯報文(但是,ICMP查詢報文可能會產生ICMP差錯報文)。
  • 目的地址是廣播地址或多播地址的IP數據報。
  • 作爲鏈路層廣播的數據報。
  • 不是IP分片的第一片。
  • 源地址不是單個主機的數據報。這就是說,源地址不能爲零地址、環回地址、廣播地址或多播地址。

這些規則是爲了防止過去允許ICMP差錯報文對廣播分組響應所帶來的廣播風暴。

ICMP時間戳請求與應答

ICMP時間戳請求允許系統向另一個系統查詢當前的時間。返回的建議值是自午夜開始計算的毫秒數,協調的統一時間(Coordinated Universal Time,UTC)(早期的參考手冊認爲UTC是格林尼治時間)。這種ICMP報文的好處是它提供了毫秒級的分辨率,而利用其他方法從別的主機獲取的時間(如某些Unix系統提供的date命令)只能提供秒級的分辨率。

這裏寫圖片描述

ICMP端口不可達差錯

這裏寫圖片描述


參考:《TCP/IP詳解》一書,推薦閱讀!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章