國際控制報文協議ICMP
ICMP簡介
- ICMP 用於主機或路由器報告差錯情況和提供有關異常情況的報告(檢測網絡錯誤)。
- ICMP 不是高層協議,而是 IP 層的協議。
**ICMP 報文的格式 **
ICMP 報文的類型
-
ICMP 報文的前 4 個字節是統一的格式,共有三個字段:即類型、代碼和檢驗和。接着的 4 個字節的內容與 ICMP 的類型有關。
-
ICMP報文可分為兩大類:一、有關信息采集和配置的ICMP報文(稱為查詢報文(query)或者信息類報文(information message)),二、有關IP數據報傳遞的ICMP報文(稱為差錯報文(error message)).
-
ICMP 差錯報告報文有許多種比如 :
- 終點不可達;比如傳輸數據過程中,中間某一路由器不知道到目標地址怎么走,該路由器就會發回該報文。
- 源點抑制(Source quench); 即反饋發包速度過快;
- 時間超過 ;
- 參數問題 ;
- 改變路由(重定向)(Redirect) ;
如圖三個網段:1,2,3,可以把網段1的網關設置在A處,那么PC0訪問PC2時,PC0把數據發送到網關A,經Router0轉發到達PC2;如果是PC0訪問PC1那么PC0同樣也會先把數據發送到網關A,Router再中轉到Router1再到PC1,而重定向就是,當PC0發數據給網關A時,Router0給PC0返回一個ICMP差錯報告報文,告訴PC0直接發到Router1處更快到達PC1。
-
報文類型字段(Type)及代碼字段(Code)含義對照:
類型TYPE | 代碼CODE | 用途|描述 Description | 查詢類Query | 差錯類Error |
---|---|---|---|---|
0 | 0 | Echo Reply——回顯應答(Ping應答) | √ | |
3 | 0 | Network Unreachable——網絡不可達 | √ | |
3 | 1 | Host Unreachable——主機不可達 | √ | |
3 | 2 | Protocol Unreachable——協議不可達 | √ | |
3 | 3 | Port Unreachable——端口不可達 | √ | |
3 | 4 | Fragmentation needed but no frag. bit set——需要進行分片但設置不分片比特 | √ | |
3 | 5 | Source routing failed——源站選路失敗 | √ | |
3 | 6 | Destination network unknown——目的網絡未知 | √ | |
3 | 7 | Destination host unknown——目的主機未知 | √ | |
3 | 8 | Source host isolated (obsolete)——源主機被隔離(作廢不用) | √ | |
3 | 9 | Destination network administratively prohibited——目的網絡被強制禁止 | √ | |
3 | 10 | Destination host administratively prohibited——目的主機被強制禁止 | √ | |
3 | 11 | Network unreachable for TOS——由於服務類型TOS,網絡不可達 | √ | |
3 | 12 | Host unreachable for TOS——由於服務類型TOS,主機不可達 | √ | |
3 | 13 | Communication administratively prohibited by filtering——由於過濾,通信被強制禁止 | √ | |
3 | 14 | Host precedence violation——主機越權 | √ | |
3 | 15 | Precedence cutoff in effect——優先中止生效 | √ | |
4 | 0 | Source quench——源端被關閉(基本流控制) | ||
5 | 0 | Redirect for network——對網絡重定向 | ||
5 | 1 | Redirect for host——對主機重定向 | ||
5 | 2 | Redirect for TOS and network——對服務類型和網絡重定向 | ||
5 | 3 | Redirect for TOS and host——對服務類型和主機重定向 | ||
8 | 0 | Echo request——回顯請求(Ping請求) | √ | |
9 | 0 | Router advertisement——路由器通告 | ||
10 | 0 | Route solicitation——路由器請求 | ||
11 | 0 | TTL equals 0 during transit——傳輸期間生存時間為0 | √ | |
11 | 1 | TTL equals 0 during reassembly——在數據報組裝期間生存時間為0 | √ | |
12 | 0 | IP header bad (catchall error)——壞的IP首部(包括各種差錯) | √ | |
12 | 1 | Required options missing——缺少必需的選項 | √ | |
13 | 0 | Timestamp request (obsolete)——時間戳請求(作廢不用) | √ | |
14 | Timestamp reply (obsolete)——時間戳應答(作廢不用) | √ | ||
15 | 0 | Information request (obsolete)——信息請求(作廢不用) | √ | |
16 | 0 | Information reply (obsolete)——信息應答(作廢不用) | √ | |
17 | 0 | Address mask request——地址掩碼請求 | √ | |
18 | 0 | Address mask reply——地址掩碼應答 |
**ICMP 差錯報告報文的數據字段的內容 **
如果網絡設備1與網絡設備2通信,圖中A表示網絡設備2收到的來自網絡設備1的數據報,該數據報並無有用數據,僅起詢問是否能通信作用;B表示該設備返回的數據報,圖中演示的是A-->B的過程。首先保留A的首部和數據字段中的前8字節,在IP數據報前面添加ICMP的前8字節形成ICMP差錯報告報文,再在ICMP差錯報告報文前面添加網絡層地址形成B數據報;
抓包演示
我們嘗試與兩個地址建立通信並抓取通信過程中的數據報,其中一個不能通信的地址:207.226.141.205;另一個為能夠通信的地址:202.99.160.68 。抓包總覽如下圖所示:
不能通信:
- 172.26.105.78(本計算機IP地址)——>207.226.141.205時:
Internet Control Message Protocol即表示網際控制報文協議ICMP。
可以看到該ICMP報文的類型(Type)為8,對應代碼(Code)為0,表示Echo request——回顯請求(Ping請求),屬於查詢報文。
可以以看到后面還有檢驗和等字段,檢驗了上面討論的ICMP報文字段結構。
- 207.226.141.205 ——> 172.26.105.78時:
可以看到該ICMP報文的類型(Type)為11,對應代碼(Code)為0,表示Time-to-live exceeded——傳輸期間生存時間TTL為0,屬於差錯報告報文。
能夠通信:
- 172.26.105.78(本計算機IP地址)——>202.99.160.68時:
可以看到該ICMP報文的類型(Type)為8,對應代碼(Code)為0,表示Echo request——回顯請求(Ping請求),屬於查詢報文。
- 202.99.160.68 ——> 172.26.105.78時:
可以看到該ICMP報文的類型(Type)為0,對應代碼(Code)為0,表示Echo Reply——回顯應答(Ping應答),屬於查詢報文。
ping命令診斷網絡故障
-
PING(Packet Internet Grope),因特網包探索器,用於測試網絡連接量的程序。Ping發送一個ICMP回聲請求消息給目的地並報告是否收到所希望的ICMP回聲應答。
-
ping指的是端對端連通,通常用來作為可用性的檢查,但是某些病毒木馬會強行大量遠程執行ping命令搶占你的網絡資源,導致系統變慢,網速變慢。嚴禁ping入侵作為大多數防火牆的一個基本功能提供給用戶進行選擇。
-
如果你打開IE瀏覽器訪問網站失敗,你可以通過ping命令測試到Internet的網絡連通,可以為你排除網絡故障提供線索,下面展示ping命令返回的信息以及分析其原因。
-
目標主機不可到達
-
目標網絡不可到達
-
請求超時
說明丟包了。
-
通過延遲評估網絡帶寬
可以看到最小延遲為54ms,最大延遲57ms,平均延遲55ms。
當 ping 本計算機網關的時候延遲小,速度快:
-
總結:ping命令只能檢測兩端口通或不通。
-
pathping命令跟蹤數據包路徑
當PC0 ping PC1時不通,可能是1~4處某一處或多處斷了,也可能是PC1沒有開機。而使用PC0 pathping PC1時,從PC0到PC1,每經過一個路由器都會通過該路由器給PC0發回一個數據包說明PC0到該路由器的路徑是通的。即Router1給PC0發回一個數據包則表示1、 2通;Router2給PC0發回一個數據包表示1、 2、 3通。在網絡排錯中具有很強的實用意義。
- 另一種情況
PC0 pathping PC1時,數據包可以通過Router0,但是Router0設置了進入的數據包無法追蹤該路由器,則Router0不會給PC0返回一個數據包。
-
演示
輸入命令:
pathping www.bilibili.com
表示從本計算機訪問“www.bilibili.com”該網站的服務器,並追蹤途經的各個中轉路由器。
同時pathping命令還會統計通信方到每個中轉路由器的丟包率,由此可以看出從哪到哪丟包嚴重,網絡延遲大,據此可以優化網絡。
相同類型的有trace route命令,該命令較為簡略不會統計丟包率,這里不做討論。