日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

文章主要脈絡如下。


 

我們之前的文章中了解過 TCP/IP 協議,我那時候碼了一句


 

原文鏈接見如下:

TCP/IP 基礎知識總結

下面我們就來真正認識一下 ICMP 協議

什么是 ICMP

ICMP 的全稱是 Inte.NET Control Message Protocol(互聯網控制協議),它是一種互聯網套件,它用于IP 協議中發送控制消息。也就是說,ICMP 是依靠 IP 協議來完成信息發送的,它是 IP 的主要部分,但是從體系結構上來講,它位于 IP 之上,因為 ICMP 報文是承載在 IP 分組中的,就和 TCP 與 UDP 報文段作為 IP 有效載荷被承載那樣。這也就是說,當主機收到一個指明上層協議為 ICMP 的 IP 數據報時,它會分解出該數據報的內容給 ICMP,就像分解數據報的內容給 TCP 和 UDP 一樣。

ICMP 協議和 TCP、UDP 等協議不同,它不用于傳輸數據,只是用來發送消息。因為 IP 協議現在有兩類版本:IPv4 和 IPv6 ,所以 ICMP 也有兩個版本:ICMPv4 和 ICMPv6

ICMP 的主要功能

對于 ICMP 的功能,主要分為兩個

 

  • ICMP 的第一個功能是確認 IP 包是否能夠成功到達目標地址,當兩個設備通過互聯網相連時,任意一個設備發送給另一個設備的 IP 包如果沒有到達,就會生成 ICMP 數據包發送給設備共享。
  • ICMP 的第二個功能是進行網絡診斷,經常使用 ICMP 數據包的兩個終端程序是 ping 和 traceroute,traceroute 程序用于顯示兩臺互聯網設備之間可能的路徑并測量數據包在 IP 網絡上的時延。ping 程序是 traceroute 的簡化版本,我們經常使用 ping 命令來測試兩臺設備之間是否互聯,ping 通常用來測試兩臺主機之間的連接速度,并準確報告數據包到達目的地并返回后所花費的時間。

 

現在我們知道了,如果在 IP 通信過程中由于某個 IP 包由于某種原因未能到達目標主機,那么這個具體的原因將由 ICMP 進行通知,下面是一個 ICMP 的通知示意圖


 

上面我們只是畫出了路由器 2 給主機 A 發送了一個 ICMP 數據包,而沒有畫出具體的通知類型,但實際情況是,上面發送的是目標不可達類型(Destination unreachable),ICMP 也是具有不同的通知類型的,下面我們匯總了 ICMP 數據包的具體通知類型。

通知類型(十進制數)具體內容0回送應答(Echo Reply)3目標不可達(Destination Unreachable)4原點抑制(Source Quench)5重定向或改變路由(Redirect)8回送請求(Echo Request)9路由器公告(Router Advertisement)10路由器請求(Router Solicitation)11ICMP 超時(Time Exceeded)17地址子網請求(Address Mask Request)18地址子網應答(Address Mask Reply)

上表顯示的 ICMP 通知類型主要分為兩類:有關 IP 數據報傳遞的 ICMP 報文,這類報文也叫做差錯報文(error message),以及有關信息采集和配置的 ICMP 報文,這類報文也被稱為查詢 query 或者信息類報文。

信息類報文包括回送請求和回送應答(類型 8 和 類型 0 ),路由器公告和路由器請求(類型 9 和 類型 0 )。最常見的差錯報文類型包括目標不可達(類型 3 )、重定向(類型 5)、超時(類型 11)。

ICMP 在 IPv4 和 IPv6 的封裝

我們知道,ICMP 是承載在 IP 內部的,而且 IPv4 和 IPv6 的封裝位置不同:

ICMP 在 IPv4 協議中的封裝


 

ICMP 在 IPv6 協議中的封裝


 

上面兩張圖顯示了 ICMPV4 和 ICMPv6 的報文格式。開頭的 4 個字節在所有的報文中都是一樣的。但是其余部分在不同的報文中卻不一樣。

ICMP 頭部包含了整個 ICMP 數據段的校驗和,具體格式如下


 

所有的 ICMP 報文都以 8 位的類型(Type) 和代碼(Code) 字段開始,其后的 16 位校驗和涵蓋了整個報文,ICMPv4 和 ICMPv6 種的類型和代碼字段是不同的。

ICMP 的主要消息 ICMP 目標不可達(類型 3)

我們知道,路由器無法將 IP 數據報發送給目標地址時,會給發送端主機返回一個目標不可達(Destination Unreachable Message) 的 ICMP 消息,并且會在消息中顯示不可達的具體原因。


 

實際通信過程中會顯示各種各樣的不可達信息,比如錯誤代碼時 1 表示主機不可達,它指的是路由表中沒有主機的信息,或者主機沒有連接到網絡的意思。一些 ICMP 不可達信息的具體原因如下


 

ICMP 重定向消息(類型 5)

如果路由器發現發送端主機使用了次優的路徑發送數據,那么它會返回一個 ICMP 重定向(ICMP Redirect Message) 的消息給這個主機。這個 ICMP 重定向消息包含了最合適的路由信息和源數據。這種情況會發生在路由器持有更好的路由信息的情況下。路由器會通過這樣的 ICMP 消息給發送端主機一個更合適的發送路由。


 

主機 Host 的 IP 地址為 10.0.0.100。主機的路由表中有一個默認路由條目,指向路由器 G1 的 IP 地址 10.0.0.1 作為默認網關。路由器 G1 在將數據包轉發到目的網絡 X 時,會使用路由器 G2 的 IP 地址 10.0.0.2 作為下一跳。

當主機向目的網絡 X 發送數據包時,會發生以下情況

 

  1. IP 地址為 10.0.0.1 的網關 G1 在其所連接的網絡上接收來自 10.0.0.100 的數據包。
  2. 網關 G1 檢查其路由表,并在通往數據包目的網絡 X 的路由中獲取下一個網關 G2 的 IP 地址 10.0.0.2。
  3. 如果 G2 和 IP 數據包的源地址標識的主機位于同一網絡中(也就是 Host 主機),那么 G1 會向主機發送 ICMP 重定向消息。ICMP 重定向消息建議主機直接將發送到網絡 X 的數據包發送至 G2,因為 Host - G2 這是通往目的地的較短路徑。
  4. 網關 G1 將原始數據包轉發到其目的地。

 

當然,根據主機的配置,Host 主機也可以選擇忽略 G1 給它發送的 ICMP 重定向消息。但是,這樣就享受不到 ICMP 重定向帶來的兩大好處,即

 

  • 優化數據在網絡中的轉發路徑;流量更快到達目的地
  • 降低網絡資源利用率,例如帶寬和路由器 CPU 負載

 

如果 Host 主機采用了 ICMP 提供的重定向路徑的話,那么 Host 就會直接把數據包發送至網絡 X,如下圖所示


 

在主機為 G2 作為下一跳的網絡 X 創建路由緩存條目后,這些優勢在網絡中可見:

 

  • 交換機和路由器 G1 之間鏈路的帶寬利用率在兩個方向上都會降低
  • 由于從主機到網絡 X 的流量不再流經此節點,因此路由器 G1 的 CPU 使用率降低
  • 主機和網絡 X 之間的端到端網絡延遲得到改善。

 

ICMP 重定向示例如下


 

ICMP 超時消息(類型 11)

在 IP 數據包中有一個叫做 TTL(Time To Live, 生存周期) ,它的值在每經過路由器一跳之后都會減 1,IP 數據包減為 0 時會被丟棄。此時,IP 路由器會發送一個 ICMP 超時消息(ICMP TIme Exceeded Message, 錯誤號 0)發送給主機,通知該包已經被丟棄。

設置生存周期的主要目的就是為了防止路由器控制遇到問題發生循環狀況時,避免 IP 包無休止的在網絡上轉發,如下圖所示


 

 

這里給大家推薦一款比較好用的追蹤超時消息的工具 traceroute,它可以顯示出由執行程序的主機到達特定主機之前需要經過多少路由器。traceroute 的官網如下 http://www.traceroute.org
ICMP 回送消息(類型 0 和 類型 8)

 

ICMP 回送消息用于判斷相互通信的主機之間是否連通,也就是判斷所發送的數據包是否能夠到達目標主機。可以向對端主機發送回送請求的消息(ICMP Echo Request Message,類型 8),也可以接收對端主機發送來的回送消息(ICMP Echo Reply Message, 類型 0 )。網絡上最常用的 ping 命令就是利用這個實現的。


 

其他 ICMP 消息 ICMP 原點抑制消息(類型 4)

在使用低速率網絡的情況下,網絡通信可能會遇到網絡擁堵的情況下,ICMP 的原點抑制就是為了應對這種情況的。當路由器向低速線路發送數據時,其發送隊列的殘存數據報變為 0 從而無法發送時,可以向 IP 數據報的源地址發送一個 ICMP 原點抑制(ICMP Source Quench Message) 消息,收到這個消息的主機了解到線路某處發生了擁堵,從而抑制 IP 數據報的發送。


 

不過這個 ICMP 消息可能會引起不公平的網絡通信,一般不被使用。

ICMP 路由器探索消息(類型 9、10)

ICMP 路由器探索消息主要用于路由器發現(Router Discovery, RD),它主要分為兩種,路由器請求(Router Solicitation, 類型 10) 和路由器響應(Router Advertisement, 類型 9)。主機會在任意路由連接組播的網絡上發送一個 RS 消息,想要選擇一個路由器進行學習,以此來作為默認路由,而相對應的該路由會發送一個 RA 消息來作為默認路由的響應。


 

ICMP 地址掩碼消息(類型 17、18)

主要用于主機或者路由器想要了解子網掩碼的情況。可以向那些目標主機或路由器發送 ICMP 地址掩碼請求消息(ICMP Address Mask Request, 類型 17) 和 ICMP 地址掩碼應答消息(ICMP Address Mask Reply, 類型 18) 獲取子網掩碼信息。

ICMPv6 ICMPv6 的作用

IPv4 中 ICMP 僅僅作為一個輔助作用支持 IPv4。也就是說,在 IPv4 時期,即使沒有 ICMP,也能進行正常的 IP 數據包的發送和接收,也就是 IP 通信。但是在 IPv6 中,ICMP 的作用被放大了,如果沒有 ICMP,則不能進行正常的 IP 通信。

尤其在 IPv6 中,從 IP 定位 mac 地址的協議從 ARP 轉為 ICMP 的鄰居探索消息(Neighbor Discovery) 。這種鄰居探索消息融合了 IPv4 的 ARP、ICMP 重定向以及 ICMP 的路由選擇等功能于一體。甚至還提供了自動設置 IP 的功能。

在 IPv6 中,ICMP 消息主要分為兩類:一類是錯誤消息,一類是信息消息。0 - 127 屬于錯誤消息;128 - 255 屬于信息消息。

RFC 2463 中描述了以下消息類型:

類型描述1目標不可達 Destination Unreachable2數據包太大 Packet Too Big3超時 Time Exceeded4參數問題 Parameter Problem128回送請求消息 Echo Request129回送應答消息 Echo Reply130多播監聽查詢 Multicast Listener Query131多播監聽報告 Multicast Listener Report132多播監聽結束 Multicast Listener Done133路由器請求消息 Router Solicitation134路由器公告消息 Router Advertisement135鄰居請求消息 Neighbor Solicitation136鄰居宣告消息 Neighbor Advertisement137重定向消息 Redirect Message138路由器重編號 Router Renumbering139信息查詢 ICMP Node Information Query140信息應答 ICMP Node Information Response141反鄰居探索請求消息 Inverse Neighbor Discovery Solicitation142反鄰居探索宣告消息 Inverse Neighbor Discovery Advertisement

ICMPv6 除了包含 ICMPv4 的所有功能外,還有兩個額外的功能。

ICMPv6 鄰居探索

鄰居探索是 ICMPv6 非常重要的功能,主要表示的類型是 133 - 137 之間的消息叫做鄰居探索消息。這種鄰居探索消息對于 IPv6 通信起到舉足輕重的作用。鄰居請求消息用于查詢 IPv6 地址于 MAC 地址的對應關系。鄰居請求消息利用 IPv6 的多播地址實現傳輸。


 

此外,由于 IPv6 實現了即插即用的功能,所以在沒有 DHCP 服務器的環境下也能實現 IP 地址的自動獲取。如果是一個沒有路由器的網絡,就使用 MAC 地址作為鏈路本地單播地址。如果在一個有路由器的網絡環境中,可以從路由器獲得 IPv6 地址的前面部分,后面部分使用 MAC 地址進行設置。此時可以利用路由器請求消息和路由器公告消息進行設置。


 

ICMPv6 的組播收聽發現協議

組播收聽發現協議(MLD,Multicast Listener Discovery)由子網內的組播成員管理。MLD 協議定義了3條ICMPv6 消息:

 

  • 組播收聽查詢消息:組播路由器向子網內的組播收聽者發送此消息,以獲取組播收聽者的狀態。
  • 組播收聽者報告消息:組播收聽者向組播路由器匯報當前狀態,包括離開某個組播組。
  • 組播收聽者。
與 ICMP 有關的攻擊

 

涉及 ICMP 攻擊主要分為 3 類:泛洪(flood)、炸彈(bomb) 和信息泄露(information disclsure)

 

  • 泛洪將會產生大量流量,導致針對一臺或者多臺計算機的有效 Dos 攻擊。
  • 炸彈指的是發送經過特殊構造的報文,這類報文能夠導致 IP 或者 ICMP 的處理失效或者崩潰。
  • 信息泄露本身不會造成危害,但是能夠幫助輔助其他攻擊。

 

針對 TCP 的 ICMP 攻擊已經記錄在了 RFC5927 中。

原文鏈接:ICMP 是個啥破玩意?

關注我,帶你更好的學習計算機網絡。

分享到:
標簽:ICMP
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定