國際控制報文協議ICMP


國際控制報文協議ICMP

ICMP簡介

  • ICMP 用於主機或路由器報告差錯情況和提供有關異常情況的報告(檢測網絡錯誤)。
  • ICMP 不是高層協議,而是 IP 層的協議。

**ICMP 報文的格式 **

image-20200123084514046

ICMP 報文的類型

  • ICMP 報文的前 4 個字節是統一的格式,共有三個字段:即類型代碼檢驗和。接着的 4 個字節的內容與 ICMP 的類型有關。

  • ICMP報文可分為兩大類:一、有關信息采集和配置的ICMP報文(稱為查詢報文(query)或者信息類報文(information message)),二、有關IP數據報傳遞的ICMP報文(稱為差錯報文(error message)).

  • ICMP 差錯報告報文有許多種比如 :

    • 終點不可達;比如傳輸數據過程中,中間某一路由器不知道到目標地址怎么走,該路由器就會發回該報文。
    • 源點抑制(Source quench); 即反饋發包速度過快;
    • 時間超過 ;
    • 參數問題 ;
    • 改變路由(重定向)(Redirect) ;

    image-20200123085723392

    如圖三個網段: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 差錯報告報文的數據字段的內容 **

image-20200123090716797

如果網絡設備1與網絡設備2通信,圖中A表示網絡設備2收到的來自網絡設備1的數據報,該數據報並無有用數據,僅起詢問是否能通信作用;B表示該設備返回的數據報,圖中演示的是A-->B的過程。首先保留A的首部和數據字段中的前8字節,在IP數據報前面添加ICMP的前8字節形成ICMP差錯報告報文,再在ICMP差錯報告報文前面添加網絡層地址形成B數據報;

抓包演示

image-20200123093048459

我們嘗試與兩個地址建立通信並抓取通信過程中的數據報,其中一個不能通信的地址:207.226.141.205;另一個為能夠通信的地址:202.99.160.68 。抓包總覽如下圖所示:

image-20200123095329276

不能通信:

  • 172.26.105.78(本計算機IP地址)——>207.226.141.205時:

image-20200123100104739

Internet Control Message Protocol即表示網際控制報文協議ICMP

可以看到該ICMP報文的類型(Type)為8,對應代碼(Code)為0,表示Echo request——回顯請求(Ping請求),屬於查詢報文。

可以以看到后面還有檢驗和等字段,檢驗了上面討論的ICMP報文字段結構。

  • 207.226.141.205 ——> 172.26.105.78時:

image-20200123100713588

可以看到該ICMP報文的類型(Type)為11,對應代碼(Code)為0,表示Time-to-live exceeded——傳輸期間生存時間TTL為0,屬於差錯報告報文。

能夠通信:

  • 172.26.105.78(本計算機IP地址)——>202.99.160.68時:

image-20200123101151435

可以看到該ICMP報文的類型(Type)為8,對應代碼(Code)為0,表示Echo request——回顯請求(Ping請求),屬於查詢報文。

  • 202.99.160.68 ——> 172.26.105.78時:

image-20200123101327796

可以看到該ICMP報文的類型(Type)為0,對應代碼(Code)為0,表示Echo Reply——回顯應答(Ping應答),屬於查詢報文。

ping命令診斷網絡故障

  • PING(Packet Internet Grope),因特網包探索器,用於測試網絡連接量的程序。Ping發送一個ICMP回聲請求消息給目的地並報告是否收到所希望的ICMP回聲應答。

  • ping指的是端對端連通,通常用來作為可用性的檢查,但是某些病毒木馬會強行大量遠程執行ping命令搶占你的網絡資源,導致系統變慢,網速變慢。嚴禁ping入侵作為大多數防火牆的一個基本功能提供給用戶進行選擇。

  • 如果你打開IE瀏覽器訪問網站失敗,你可以通過ping命令測試到Internet的網絡連通,可以為你排除網絡故障提供線索,下面展示ping命令返回的信息以及分析其原因。

    • 目標主機不可到達

      image-20200123103812303

    • 目標網絡不可到達

      image-20200123104545575

    • 請求超時

      image-20200123104121166

      說明丟包了。

    • 通過延遲評估網絡帶寬

      image-20200123103759734

      可以看到最小延遲為54ms,最大延遲57ms,平均延遲55ms。

      當 ping 本計算機網關的時候延遲小,速度快:

      image-20200123104426513

    • 總結:ping命令只能檢測兩端口通或不通。

pathping命令跟蹤數據包路徑

image-20200123105829902

當PC0 ping PC1時不通,可能是1~4處某一處或多處斷了,也可能是PC1沒有開機。而使用PC0 pathping PC1時,從PC0到PC1,每經過一個路由器都會通過該路由器給PC0發回一個數據包說明PC0到該路由器的路徑是通的。即Router1給PC0發回一個數據包則表示1、 2通;Router2給PC0發回一個數據包表示1、 2、 3通。在網絡排錯中具有很強的實用意義。

  • 另一種情況

image-20200123110842189

PC0 pathping PC1時,數據包可以通過Router0,但是Router0設置了進入的數據包無法追蹤該路由器,則Router0不會給PC0返回一個數據包。

  • 演示

    輸入命令:

    pathping www.bilibili.com
    

    表示從本計算機訪問“www.bilibili.com”該網站的服務器,並追蹤途經的各個中轉路由器。

image-20200123111530338

同時pathping命令還會統計通信方到每個中轉路由器的丟包率,由此可以看出從哪到哪丟包嚴重,網絡延遲大,據此可以優化網絡。

相同類型的有trace route命令,該命令較為簡略不會統計丟包率,這里不做討論。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM