計算機網絡:ICMP協議(Internet控制消息協議)
今天和大家聊聊ICMP協議相關的知識,感興趣的可以一起了解一下!
一、簡介
圖片
ICMP(Internet Control Message Protocol,互聯網控制消息協議)是TCP/IP協議族中的一個重要子協議,該協議位于網絡層。主要用于在IP主機和路由器之間傳遞控制消息,報告網絡通信中的各種問題。雖然這些控制消息雖然不傳輸實際的用戶數據,但對于數據的準確、可靠傳遞起著重要作用。ICMP協議的主要目的是提高IP數據報的成功傳輸率,確保數據通信的穩定性和可靠性。
二、為什么要有ICMP協議?
因為IP協議本身并不提供可靠的傳輸機制,也不具備差錯報告和控制功能。所以當數據包在網絡傳輸過程中出現問題時,IP協議無法及時通知發送方。為了解決這個問題,ICMP協議應運而生。ICMP協議的主要作用包括:
圖片
差錯報告:當數據包在網絡傳輸過程中遇到問題時,ICMP協議可以向發送方報告錯誤信息,幫助發送方采取相應的措施。
網絡診斷:提供了多種查詢報文,用于診斷網絡連接和路徑信息,最常用的工具有ping和traceroute。
流量控制:可以通過源抑制報文通知發送方降低數據發送速率,以緩解網絡擁塞。
路由重定向:可以通知主機或路由器更優的路由路徑,提高網絡傳輸效率。
三、ICMP協議報文格式
ICMP報文封裝在IP數據報中,IP報頭在ICMP報文的最前面。ICMP報文的基本格式如下:
圖片
● Type:1字節,表示ICMP報文的類型。
● Code:1字節,表示ICMP報文的代碼,對類型進行進一步說明。
● Checksum:2字節,用于校驗整個ICMP報文的完整性。
● Data:可變長度,包含具體的控制信息或數據。
四、ICMP報文的類型
ICMP報文主要分為兩大類:差錯報文和查詢報文。
圖片
4.1 差錯報文
差錯報文用于報告網絡通信中的錯誤情況,常見的差錯報文類型包括:
● 目的地不可達(Type 3):當數據包無法到達目標設備時,發送端會收到目的地不可達報文。具體代碼如下:
● 0:網絡不可達
● 1:主機不可達
● 2:協議不可達
● 3:端口不可達
● 4:需要分片但設置了不分片標志
● 5:源路由失敗
● 6:目的網絡未知
● 7:目的主機未知
● 9:目的網絡被禁止
● 10:目的主機被禁止
● 11:由于TOS網絡不可達
● 12:由于TOS主機不可達
● 13:由于過濾通信被禁止
● 14:主機越權
● 15:優先級截止生效
● 超時(Type 11):當數據包的TTL值為0時,路由器會丟棄該數據包并發送超時報文。具體代碼如下:
● 0:生存時間超時
● 1:數據報重組超時
● 參數問題(Type 12):當數據包的IP頭字段值不正確時,接收方會發送參數問題報文。具體代碼如下:
● 0:IP頭字段值錯誤
● 1:必需的選項缺失
● 2:不支持的長度
● 源抑制(Type 4):當路由器或主機因網絡擁塞而丟棄數據包時,會發送源抑制報文,請求發送方降低發送速率。
● 重定向(Type 5):當路由器發現更優的路由路徑時,會發送重定向報文,通知發送方使用新的路由。具體代碼如下:
● 0:網絡重定向
● 1:主機重定向
● 2:TOS和網絡重定向
● 3:TOS和主機重定向
4.2 查詢報文
查詢報文用于在不同網絡設備之間傳遞控制信息,常用的查詢報文類型包括:
● 回顯請求和應答(Type 8和Type 0):用于測試網絡連通性,常見的工具是ping。發送方發送回顯請求報文(Type 8),接收方收到后回復回顯應答報文(Type 0)。
● 時間戳請求和應答(Type 13和Type 14):用于測量網絡延遲,發送方發送時間戳請求報文(Type 13),接收方收到后回復時間戳應答報文(Type 14)。
● 地址掩碼請求和應答(Type 17和Type 18):用于獲取子網掩碼信息,主機啟動時可以使用這些報文來確定自身的子網掩碼。
● 路由器請求和通告(Type 9和Type 10):用于發現和選擇路由器,主機可以發送路由器請求報文(Type 9),路由器收到后回復路由器通告報文(Type 10)。
五、ICMP報文的實際案例
5.1 Ping命令
Ping命令是基于ICMP協議的常用網絡診斷工具,用于測試網絡連通性。以下是Ping命令的工作流程:
1. 發送回顯請求報文:發送方主機構造一個ICMP回顯請求報文(Type 8),并將其封裝在IP數據報中發送給目標主機。
2. 接收回顯應答報文:目標主機收到回顯請求報文后,構造一個ICMP回顯應答報文(Type 0),并將其封裝在IP數據報中發送回發送方主機。
3. 顯示結果:發送方主機收到回顯應答報文后,顯示目標主機的IP地址、數據大小和往返時間。
示例:
ping 192.168.2.17
輸出:
圖片
5.2 Traceroute命令
Traceroute命令用于顯示數據包從源主機到目標主機的路徑信息,常用于診斷網絡連接問題。以下是Traceroute命令的工作流程:
1. 發送ICMP報文:發送方主機發送一個帶有TTL值為1的ICMP報文(通常是回顯請求報文),當該報文到達第一個路由器時,TTL值減為0,路由器丟棄該報文并發送一個超時報文(Type 11)回給發送方。
2. 記錄路徑信息:發送方記錄第一個路由器的IP地址,然后發送一個帶有TTL值為2的ICMP報文,重復上述過程,直到數據包到達目標主機或達到最大TTL值。
3. 顯示結果:發送方主機顯示從源主機到目標主機的每一步路徑信息,包括每個路由器的IP地址和響應時間。
示例:
traceroute 8.8.8.8
輸出:
圖片
總結
以上內容就是Internet控制消息協議相關的知識介紹,希望對大家理解ICMP協議提供一些幫助!