系列TCP/IP協議-ICMP協議

1、引言

何爲ICMP協議? ICMP即互聯網控制消息協議(Internal Control Message Protocol),與IP協議同樣同屬TCP/IP模型中的網絡層,而且ICMP數據包是包裹在IP數據包中的。他的做用是報告一些網絡傳輸過程當中的錯誤與作一些同步工做。ICMP數據包有許多類型。每個數據包只有前4個字節是相同域的,剩餘的字段有不一樣的數據包類型的不一樣而不一樣。ICMP數據包的格式以下:微信

圖1. ICMP協議數據包

  • 類型字段:指明該數據包屬於什麼類型(大分類),長度1個字節。
  • 代碼字段:指明數據包屬於大類裏面的哪一個小類,長度1個字節。類型字段與代碼字段共同決定ICMP數據包類型,以及後續字段含義。
  • 校驗和 : 指明該數據包的校驗和,長度2個字節。該校驗和覆蓋整個ICMP數據包。

2、ICMP數據包類型

ICMP數據包經過類型字段與代碼字段來共同決定該數據包類型,下面列出各類類型對應關係: 網絡

圖2. ICMP數據包類型與字段對應關係

  • 最後兩列代表該數據包是查詢ICMP數據包仍是差錯數據包。通常的須要對差錯數據包作一些特殊處理。
  • 在有些時候是不會產生ICMP差錯數據包的:
    • ICMP差錯數據包(ICMP查詢數據包可能會產生ICMP差錯數據包)
    • 目的地址爲廣播/多播的IP數據包
    • 鏈路層廣播的數據包(如ARP)
    • 非IP分片的第一片
    • 源地址不是個單播地址。

這些規則是爲了防止過去容許 I C M P差錯報文對廣播分組響應所帶來的廣播風暴。3d

3、常見的ICMP數據包

當前章節,介紹三種常見的ICMP數據包:ICMP端口不可達差錯、ICMP地址請求與應答。其中第1種爲ICMP差錯數據包;第2種是ICMP查詢數據包。一般查詢數據包是成對出現的(請求與應答)。cdn

1. ICMP端口/主機不可達差錯

圖3. ICMP不可達數據包
  一般該數據包指明類型字段爲3,代碼字段爲0~15。後面數據部分包含4字節的0數據已經,IP首部與運輸層首部(TCP/UDP首部)。經過抓包,來一個實際的例子:
圖4. ICMP不可達數據包

  • 類型:3
  • 代碼:1,主機不可達
  • 校驗碼:0x4e45
  • 未使用的字段:0填充的4字節。
  • IP頭部
  • 傳輸層頭部

2. ICMP地址掩碼請求與應答

圖5. ICMP地址輕易與應答數據包

  • 該數據包一般用於無盤站系統中獲取本身的子網掩碼的。
  • 系統廣播他的該ICMP請求數據包(相似於經過RARP獲取IP地址)。
  • 該數據包中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就能夠把應答與請求進行匹配。

都看到這裏了,要不要掃二維碼關注一下微信公衆號林灣村龍貓blog

微信公衆號rudy_tan_home
相關文章
相關標籤/搜索