? ICMP協議介紹
一、定義

- 網際控制報文協議ICMP(Internet Control Message Protocol),是一種面向無連接協議,用于傳輸出錯報告控制資訊;
- 在TCP/IP協議簇中是一個重要子協議,通常被IP層或者更高層協議(TCP/UDP)使用,屬于網路層協議;
- 主要用于IP主機和路由器之間傳遞控制訊息,包括網路通不通,主機是否可達,路由是否可用等網路狀態,
舉例:ping 和 tracert是兩個常用網路管理命令,ping 用來測驗網路可達性,tracert 用來顯示到達目的主機的路徑,ping和 tracert 都利用 ICMP 協議來實作網路功能,它們是把網路協議應用到日常網路管理的典型實體,
二、原因
- 由于IP協議資料傳輸天然存在不可靠、無連接等特點,為了解決資料傳輸出現的問題,引入了ICMP協議;
- 這些控制訊息并不傳輸用戶資料,但是對于收集各種網路資訊、診斷和排除各種網路故障以及用戶資料的傳遞具有直觀重要的作用;
- 在資料傳輸的程序中,IP提供盡力而為的服務,為了把資料包發送到目的地址盡最大努力,它并不對目的主機是否收到資料包進行驗證,無法進行流量控制和差錯控制,因此在資料包傳輸程序中,產生各種錯誤在所難免,為了更有效的轉發IP資料包,提供資料包交付成功寄回,ICMP應運而生,
思考1:ICMP協議介于傳輸層和網路層之間,通常被IP層或者更高層協議(TCP/UDP)使用,那為啥屬于網路層而不是傳輸層?
- ICMP 報文被封裝在IP資料報中,作為IP資料報的資料部分,通過互聯網傳遞
- 傳輸層協議關注從端到端發送資料并確保可靠性,而ICMP目的是確保將資料路由到正確的位置,實際上并不路由資料
三、ICMP資料幀

-
Type (型別):標識ICMP報文的型別;占用1位元組
-
Code(代碼):標識對應ICMP報文的代碼,它與型別欄位一起共同標識了ICMP報文的詳細型別;占用1位元組
-
Checksum(校驗和):對包括ICMP報文資料部分在內的整個ICMP資料報的校驗和,以檢驗報文在傳輸程序中是否出現了差錯,其計算方法和IP報頭中的校驗和計算方法一致;占用2位元組
-
Header Other(首部其他部分):根據不同的報文型別而有不同的格式,有的是全0,有的則有其他的特殊格式,占用4位元組,ICMP始終有8個位元組的頭部長度
-
Packet Content(資料部分):不同型別和子型別有不同的內容,占用4位元組
目前定義型別詳見下表,從型別值來看ICMP報文可以分為兩大類:第一類是差錯報文,第二類是查詢報文
Type
|
Code
|
描述
|
報文型別
|
|---|---|---|---|
0-Echo回應 |
0 |
Echo回應報文 |
查詢 |
3-目的不可達 |
0 |
目標網路不可達報文 |
差錯 |
1 |
目標主機不可達報文 |
差錯 |
|
2 |
目標協議不可達報文 |
差錯 |
|
3 |
目標埠不可達報文 |
差錯 |
|
4 |
要求分段并設定DF flag標志報文 |
差錯 |
|
5 |
源路由失敗報文 |
差錯 |
|
6 |
未知的目標網路報文 |
差錯 |
|
7 |
未知的目標主機報文 |
差錯 |
|
8 |
源主機隔離報文 |
差錯 |
|
9 |
禁止訪問的網路報文 |
差錯 |
|
10 |
禁止訪問的主機報文 |
差錯 |
|
11 |
對特定的TOS網路不可達報文 |
差錯 |
|
12 |
對特定的TOS主機不可達報文 |
差錯 |
|
13 |
由于過濾 網路流量被禁止報文 |
差錯 |
|
14 |
主機越權報文 |
差錯 |
|
15 |
優先權終止生效報文 |
差錯 |
|
5-重定向 |
0 |
重定向網路報文 |
差錯 |
1 |
重定向主機報文 |
差錯 |
|
2 |
基于TOS的網路重定向報文 |
差錯 |
|
3 |
基于TOS的主機重定向報文 |
差錯 |
|
8-Echo請求 |
0 |
Echo請求報文 |
查詢 |
9-路由器通告 |
0 |
路由通告報文 |
查詢 |
10-路由器請求 |
0 |
路由器的發現/選擇/請求報文 |
查詢 |
11-ICMP超時 |
0 |
TTL超時報文 |
差錯 |
1 |
分片重組超時報文 |
差錯 |
|
12-引數問題 |
0 |
IP報首部引數錯誤報文 |
差錯 |
1 |
丟失必要選項報文 |
差錯 |
|
2 |
不支持的長度報文 |
差錯 |
|
13-時間戳請求 |
0 |
時間戳請求報文 |
查詢 |
14-時間戳應答 |
0 |
時間戳應答報文 |
查詢 |
15-資訊請求 |
0 |
資訊請求報文 |
查詢 |
16-資訊應答 |
0 |
資訊應答報文 |
查詢 |
四、ICMP請求/應答幀格式

Type(型別):表示ICMP報文型別,8表示Echo(ping)request


0表示Echo(ping)reply


Code(代碼):標識對應ICMP報文的代碼,它與型別欄位一起共同標識了ICMP報文的詳細型別


Checksum(校驗和):對ICMP報文資料部分在內的整個ICMP資料報的校驗和


Identifier(識別符號):用于表示ICMP行程,占用2位元組(單行程內請求與應答報文Identifier欄位保持一致


Sequence Number(序列號):用于關聯請求報文和應答報文(對應請求和應答報文的序列號相同),占用2位元組


思考2:Identifier和Sequence number為何有BE、LE之分?
wireshark考慮到window系統與Linux系統發出的ping報文(主要指ping應用欄位而非包含IP頭的ping包)的位元組順序不一樣(windows為LE:little-endian byte order,Linux為BE:big-endian),為了體現wireshark的易用性,開發者將其分別顯示出來,
Packet Content(資料部分):標識ICMP的相關資料部分


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/548823.html
標籤:其他
上一篇:AIGC時代:未來已來
