1、引言
何爲ICMP協議? ICMP即互聯網控制消息協議(Internal Control Message Protocol),與IP協議同樣同屬TCP/IP模型中的網絡層,而且ICMP數據包是包裹在IP數據包中的。他的做用是報告一些網絡傳輸過程當中的錯誤與作一些同步工做。ICMP數據包有許多類型。每個數據包只有前4個字節是相同域的,剩餘的字段有不一樣的數據包類型的不一樣而不一樣。ICMP數據包的格式以下:微信
類型字段:指明該數據包屬於什麼類型(大分類),長度1個字節。
代碼字段:指明數據包屬於大類裏面的哪一個小類,長度1個字節。類型字段與代碼字段共同決定ICMP數據包類型,以及後續字段含義。
校驗和 : 指明該數據包的校驗和,長度2個字節。該校驗和覆蓋整個ICMP數據包。
2、ICMP數據包類型
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,代碼字段爲0~15。後面數據部分包含4字節的0數據已經,IP首部與運輸層首部(TCP/UDP首部)。經過抓包,來一個實際的例子:
類型:3
代碼:1,主機不可達
校驗碼:0x4e45
未使用的字段:0填充的4字節。
IP頭部
傳輸層頭部
2. ICMP地址掩碼請求與應答
該數據包一般用於無盤站系統中獲取本身的子網掩碼的。
系統廣播他的該ICMP請求數據包(相似於經過RARP獲取IP地址)。
該數據包中的標識符和序列號字段由發送端任意選擇設定,這些值在應答中將被返回。這樣,發送端就能夠把應答與請求進行匹配。
都看到這裏了,要不要掃二維碼關注一下微信公衆號林灣村龍貓 。 blog