什麼是ICMP?了解 Internet 控制消息協議

什麼是ICMP?了解 Internet 控制消息協議

您可能聽說過 ICMP,如果您只是一個精通技術的人,您可能會(至少)知道它與 Internet 有關係。

ICMP 實際上是一種協議,很像 IP、TCP 和 UDP(我們之前討論過並解釋過),因此它在我們的 Internet 連接的良好運行中起著非常重要的作用。

ICMP 更多地與檢測和處理連接問題的方式有關,但我們不要過多地破壞我們的講座。如果您想了解什麼是 ICMP 以及它如何幫助我們保持連接以最佳水平運行,請繼續閱讀。

什麼是ICMP?了解 Internet 控制消息協議

什麼是ICMP?

Internet 控制消息協議以其更友好的首字母縮寫詞 ICMP 而聞名,它是解決各種與連接相關問題的基礎的協議。

該協議被各種網絡設備使用,包括但不限於路由器、調製解調器和服務器,以通知其他網絡參與者有關潛在連接問題的信息。

我們在上面提到過,ICMP 是一種類似於 TCP 和 UDP 的協議,但與這兩者不同的是,ICMP 通常不用於促進系統之間的數據交換。此外,它並不經常用於最終用戶網絡應用程序,除非它們是診斷工具。

ICMP 最初的定義由Jon Postel草擬,他為 Internet 的發展做出了大量和多次貢獻,ICMP 的第一個標準於19814 月RFC 777 中發布

顯然,最初的定義經歷了很多變化,才達到我們今天熟悉的形式。該協議的穩定形式在 1981 年 9 月的 RFC 792 中比其最初定義晚 5 個月發布,並且也是由 Postel 編寫的。

ICMP 是如何工作的?

簡而言之,ICMP 用於通過確定數據是否相對較快地到達其預定目的地來報告錯誤。

在基本場景中,兩個設備通過 Internet 連接並通過我們稱為數據包或數據報的方式交換信息。ICMP 所做的是生成錯誤並將它們與發送原始數據的設備共享,以防數據包永遠無法到達目的地。

例如,如果您發送的數據包太大而路由器無法處理,路由器將首先丟棄該數據包,然後它會生成一條錯誤消息,讓發送方設備知道其數據包從未到達其目的地。

然而,這就是我們所說的被動技能,因為您完全不需要做任何事情來接收這些錯誤消息(如果需要的話)。您很快就會發現,ICMP 還有一個更活躍的實用程序,您可以依靠它來執行各種網絡故障排除操作。

與 TCP 和 UDP 不同,ICMP 不需要連接設備即可發送消息。例如,在 TCP 連接中,連接的設備需要執行多步握手,然後才能傳輸數據。

使用 ICMP,無需建立連接;可以簡單地發送消息來代替連接。此外,與 TCP 和 UDP 相比,ICMP 消息不需要將消息定向到的端口,TCP 和 UDP 都使用特定端口來路由信息。ICMP 不僅不需要端口,而且實際上不允許針對特定端口。

ICMP 消息由 IP 數據包攜帶,但不包含在其中。相反,它們會搭載這些數據包,因為它們僅在其運營商(即 IP 數據包)從未到達其目的地時才會生成。通常情況下,允許 ICMP 數據包產生的情況源於失敗數據包的 IP 標頭中的可用數據。

由於ICMP 包含失敗數據包的IP 報頭數據,因此可以使用網絡分析工具來準確確定哪些IP 數據包未能傳送。然而,IP 報頭並不是 ICMP 數據包攜帶的唯一信息類型。

ICMP 數據包包含 IP 標頭,然後是 ICMP 標頭,以及有效載荷的前八個字節。

  • IP 標頭– 包含有關 IP 版本、源和目標 IP 地址、發送的數據包數量、使用的協議、數據包長度、生存時間 (TTL)、同步數據以及特定數據包的 ID 號的詳細信息
  • ICMP 標頭– 包含有助於對錯誤進行分類的代碼、通過提供描述來促進錯誤識別的子代碼以及校驗和
  • 傳輸層標頭– 有效載荷的前八個字節(通過 TCP 或 UDP 傳輸)

ICMP 控制消息

正如我們上面提到的,當發生錯誤時,可以使用 ICMP 頭的第一個字段中的值來識別它。這些錯誤類型及其標識符如下:

  • 0 – Echo Reply – 用於 ping 目的
  • 3 – 目的地不可達
  • 5 – 重定向消息 – 用於指示選擇不同的路由
  • 8 – Echo Request – 用於 ping 目的
  • 9 – Router Advertisement – 路由器用來宣布它們的 IP 地址可用於路由
  • 10 – 路由器請求 – 路由器發現、請求或選擇
  • 11 – Time Exceeded – TTL 到期或重組時間超過
  • 12 – 參數問題:錯誤的 IP 標頭 – 錯誤的長度、所需的選項丟失或指針指示的錯誤
  • 13 - 時間戳
  • 14 - 時間戳回复
  • 41 – 用於實驗性移動協議
  • 42 – 擴展迴聲請求 – 請求擴展迴聲
  • 43 – Extended Echo Reply – 回复 42 擴展的 Echo 請求
  • 253254 – 實驗

TTL(生存時間)字段

TTL 字段是可以(並且經常會)生成 ICMP 錯誤的 IP 報頭字段之一。它包含一個值,該值是發送的數據包在到達其最終目的地之前可以通過的最大路由器數。

數據包被路由器處理後,這個值減一,這個過程一直持續下去,直到發生以下兩種情況之一:數據包到達目的地,或者值達到零,這通常是路由器丟棄包並向原始發送方發送 ICMP 消息。

所以不用說,如果一個數據包因為它的 TTL 達到零而被丟棄,這不是因為頭部中的數據損壞或路由器特定的問題。TTL 實際上旨在阻止惡意數據包阻止連接,並導致創建了一個對網絡故障排除至關重要的工具:Traceroute。

ICMP 在網絡診斷中的使用

如上所述,ICMP 可與診斷工具一起使用,以確定網絡連接是否正常運行。在閱讀我們的指南之前,您可能不知道 ICMP 是什麼,但我們確信您至少聽說過 ping,這是一種著名的網絡實用程序,可以讓您知道主機是否可訪問。

嗯,ping實際上是一個重要的工具,它使用 ICMP 作為其主幹。Traceroute是幫助我們診斷和解決網絡連接問題的工具的另一個很好的例子。Pathping是 ping 和 traceroute 的組合,是另一個很棒的基於 ICMP 的工具。

Ping是 Windows 內置工具,可通過 CMD 訪問,是使用 ICMP 解決潛在網絡錯誤的最重要工具之一。Ping使用上面列表中的兩個代碼,8(迴聲請求)和0(迴聲回复),更具體。

下面是兩個ping命令示例的樣子:

ping 168.10.26.7
ping TipsWebTech360.com

當你運行它時,ping會發送一個類型字段為 8 的 ICMP 數據包,並會耐心等待類型 0 的回复。回復到達後,ping將確定請求 (8) 與其回复 (0) 之間的時間,並將返回以毫秒錶示的往返值。

我們已經確定,ICMP 數據包通常是由於錯誤而生成和發送的。但是,請求(類型 8)數據包不需要錯誤才能發送,因此ping也可以在不觸發錯誤的情況下收到回复 (0)。

正如您可能從上面的示例中發現的那樣,您可以 ping 一個 IP 地址或一個主機。此外,ping有大量附加選項,您只需將選項附加到命令即可用於更高級的故障排除。

例如,使用-4選項將強制 ping 只使用IPv4,而-6將只使用IPv6地址。查看下面的屏幕截圖,了解可以附加到ping命令的完整選項列表。

什麼是ICMP?了解 Internet 控制消息協議

關於 ping 的一個常見誤解是,您可以使用它來測試目標系統上某些端口的可用性。長話短說,你不能這樣做,因為 ICMP 不像 TCP 或 UDP 那樣在主機之間進行任何真正的消息交換,並且不需要端口使用。

端口掃描器應用程序使用 TCP 或 UDP 數據包來確定特定端口是否開放和可訪問。如果該端口未處於活動狀態,這些工具將 TCP 或 UDP 數據包發送到特定端口,並生成類型 3(主機不可達)子類型 3(目標端口不可達)ICMP 消息。

跟踪路由

與 ping 非常相似,traceroute是另一種網絡故障排除工具,每個網絡管理員不僅應該在其工具帶中擁有,而且還應該掌握它。什麼traceroute的作用是幫助您完成,直到達到其指定的目的地地圖的所有設備的連接顛簸的路線。

因此,如果您有興趣查找您和另一台機器之間的完整路徑,traceroute可以為您提供準確的信息。此工具還可用於確定您的連接所遵循的路線是否有問題。

例如,如果連接路徑上的某個設備很難將您的數據包轉發到預期目的地,traceroute將讓您知道哪個路由器給了您延遲響應(或根本沒有響應)。

traceroute 的工作方式是發送一個TTL生存時間)值為 0的數據包,它將被它遇到的第一個路由器自動丟棄,正如我們在上面的 TTL 部分中所解釋的。丟棄數據包後,路由器生成一個 ICMP 數據包並將其發送回traceroute。

該程序提取數據包的源地址,以及數據包返回所用的時間,然後發送另一個 TTL 值為1 的數據包。在第二個數據包通過網關後,其 TTL 減1(變為0)並前往第二個路由器,後者在檢測到零 TTL 值時丟棄該數據包並將 ICMP 數據包發送回traceroute。

每次traceroute收到一個 ICMP 數據包時,它都會將 TTL 增加 1 並將其發送回它的軌道,這個操作會一直持續下去,直到到達指定的目的地,或者 traceroute 用完跳數。默認情況下,Windows 分配的最大數量為30跳,但您可以通過在命令語法中指定來增加該數量。

以下是如何在 CMD 中運行traceroute的示例:

tracert TipsWebTech360.com

與 ping 非常相似,traceroute有一系列選項,如果您想更具體,可以將其附加到語法中。您可以強制使用IPv4IPv6,但也可以跳過將地址解析為主機名並增加搜索目標的最大躍點數。查看下面的屏幕截圖以獲取traceroute使用示例以及您可以使用它的所有選項的列表。

什麼是ICMP?了解 Internet 控制消息協議

不過值得一提的是,traceroute只能為您提供實時信息。因此,如果您遇到連接速度變慢並想使用此工具進行調查,您可能會收到誤導性結果,​​因為在此期間路線可能已更改。

雖然可以通過使用-j選項並手動添加路由器地址來強制 traceroute 遵循特定路徑,但這樣做意味著您已經知道錯誤路徑。這有點自相矛盾,因為首先發現路徑要求您使用不帶-j選項的traceroute 。

如果您不完全喜歡使用CLI(命令行界面)工具,而是更喜歡GUI(圖形用戶界面)方法,那麼有許多用於 traceroute 的第三方軟件解決方案。SolarWinds 的 Traceroute NG 是我們能想到的最好的例子之一。我們有沒有提到它是完全免費的

路徑

正如我們在上面簡要提到的,路徑完成了不可或缺的網絡故障排除工具的三重作用。從功能的角度來看,patphing是 ping 和 traceroute 的組合,因為它利用了上述二人組利用的所有三種消息類型:迴聲請求(8)、迴聲回复(0)以及超時(11)。

大多數情況下,路徑用於識別受高延遲和數據包丟失影響的連接節點。當然,您可以使用 traceroute 然後 ping 來獲取這些詳細信息,但是對於網絡管理員來說,在一個命令下同時使用這兩個工具的功能要方便得多。

使用路徑的缺點之一是完成查詢可能需要很長時間(每跳 25 秒才能產生 ping 統計信息)。Pathping 將顯示到指定目的地的路線和往返時間。

與 ping 和 traceroute 不同,pathping將重複 ping 其路徑中的每個路由器,從而提高其整體效率。但是,如果遇到禁用了 ICMP 功能的路由器,pathping將停止其對信息的請求,而 ping 仍然可以到達沒有 ICMP 功能的路由器,traceroute 將跳轉到其路徑中的下一個路由器並顯示一串星號對於任何非 ICMP 路由器。

Pathping是 Windows 內置工具,自 Windows NT 以來一直如此,因此您可以像使用 ping 或tracert一樣使用它通過命令行。

以下是如何使用路徑的示例

pathping TipsWebTech360.com -h 40 -w 2 -4

上面的命令將顯示到我們網站的路由,以及連接路徑中每個路由器的往返時間。此外,我們在示例中使用的選項會將默認最大躍點值從 30 增加到 40,為每個回复添加 2 毫秒的超時值並強制使用 IPv4。

查看下面的屏幕截圖,獲取路徑使用快速指南以及可以添加到命令語法中的選項列表。

什麼是ICMP?了解 Internet 控制消息協議

ICMP 在網絡攻擊中的適用性

儘管 ICMP 的範圍促進了許多連接故障排除操作,但該協議也可用於執行各種網絡攻擊。如果您在 Internet 上的時間夠長,您可能聽說過 ping 泛洪、DDoS、Ping of Death、Smurf 攻擊或 ICMP 隧道。

雖然其中一些攻擊現在用作PoC(概念證明),但其他攻擊仍被惡意代理用來損害啟用 Internet 的系統或被安全專家用來測試漏洞。

我們將從最流行的一個開始,它是 ping flood(順便說一下,仍然被廣泛使用),並解釋它如何使用 ICMP 來作惡。

平洪

使用 ping 發送迴聲請求並等待迴聲回复似乎是無害的。但是,如果不是等待回复,ping 只是發送大量的 ICMP 回顯請求呢?在這種經典的DoS (拒絕服務)攻擊場景中,如果攻擊成功,目標設備將經歷嚴重的滯後,甚至連接斷開。

如果攻擊者擁有比受害者多的帶寬,並且受害者向其收到的大量請求發送 ICMP 回顯回复,則此攻擊最有效,從而消耗傳入和傳出帶寬。

攻擊者可以為 ping 命令指定“洪水”選項,但此選項非常少見,並且未嵌入操作系統的內置工具中。例如,Windows 的 ping 沒有“洪水”選項,但有一些第三方工具集成了此功能。

如果 Ping Flood 攻擊變成DDoS (分佈式拒絕服務)攻擊,它真的會變成災難性的。DDoS 攻擊使用多個系統來針對單個系統,從而同時用來自多個位置的數據包來淹沒它。

保護自己免受 ping 泛洪攻擊的一種可靠方法是禁用路由器上的 ICMP 功能。如果您需要保護 Web 服務器免受此類攻擊,您還可以安裝Web 應用程序防火牆

死亡之平

此攻擊涉及向目標計算機發送格式錯誤的 ping。在這種類型的攻擊中,發送的數據包將在有效載荷中包含大量填充物,這些填充物太大而無法一次處理。

然而,在發送之前,這個惡意 ping 將被分割成更小的部分,因為Internet 協議處理器不可能以其原始的、組合的形式傳輸它。

Ping of Death 所針對的計算機將接收數據塊並嘗試重新組合它們,然後再將惡意數據包發送到其目標應用程序。這就是損害發生的地方:如果組裝的數據包比目標計算機中的可用內存長,重新組裝它可能會導致緩衝區溢出、系統崩潰,甚至可能允許將惡意代碼注入受影響的機器。

好的一面是,Ping of Death 不再是新鮮事物,因為許多安全系統都能毫不費力地識別它並成功阻止它。

藍精靈攻擊

與前兩種攻擊類型相反,Smurf 攻擊不直接攻擊設備,而是利用同一網絡上的其他設備來協調對單個機器的分佈式 DoS 攻擊(DDoS)。

攻擊者需要其目標的 IP 地址和目標網絡的 IP 廣播地址。攻擊者將受害者的 IP 地址添加到 ICMP 數據包中(欺騙它),然後使用IP 廣播地址將它們廣播到目標網絡。

作為響應,連接到同一網絡的大多數設備都會向源 IP 地址發送回复(被替換以反映目標機器),如果網絡足夠大(有大量連接的設備),則可能會被流量淹沒。

因此,如果攻擊足夠嚴重,目標的計算機可能會變慢,甚至在給定的時間內無法使用。

和以前一樣,您只需關閉網關路由器的 ICMP 功能即可避免 Smurf 攻擊。另一種實現保護的方法是將來自網絡廣播 IP 地址的請求列入黑名單。

刺痛攻擊

Twinge 攻擊由發送大量欺騙性 ICMP 數據包以損害系統的程序引導。ICMP 數據包是假的,因為它們都使用隨機的假 IP 地址,但實際上,數據包來自單一來源(攻擊者的機器)。

據報導,ICMP 數據包包含一個簽名,可以表明攻擊並非來自多個來源,而是在 Twinge 的幫助下進行了協調。

儘管如果計劃得當,這種攻擊可能是災難性的,但關閉網關路由器上的 ICMP 並安裝防火牆或入侵檢測系統可以幫助您保護自己免受攻擊。

ICMP隧道

默認情況下,路由器僅掃描 ICMP 數據包的標頭,這使得實際上包含大量附加數據的數據包可以輕鬆繞過檢測,只要它們包含 ICMP 部分。這種類型的攻擊稱為 ping 或 ICMP 隧道。幸運的是,標準的 ping 實用程序不能通過防火牆和網關進行隧道傳輸,因為 ICMP 隧道需要仔細適應它們打算使用的網絡。

另一方面,攻擊者可以使用和模擬大量在線資源來模擬這樣的隧道,讓他們可以自由通過專用網絡和連接到它的機器。和以前一樣,關閉網關路由器上的 ICMP 功能、使用防火牆和執行嚴格的黑名單規則對於避免此類攻擊至關重要。

ICMP – 結論

考慮到所有因素,儘管 ICMP 不像 TCP 和 UDP 那樣用於在給定網絡上的連接設備之間交換信息,但它仍然具有巨大的適用範圍。事實上,ICMP 是最靈活的基礎協議之一,有助於保持 Internet 以我們所知的方式運行。

除了讓一個系統知道它與另一個系統的連接何時出現阻塞的基本目的之外,ICMP 還是眾多故障排除工具(例如 ping、pathping 和 traceroute)的支柱。不幸的是,它還幫助惡意代理向易受攻擊的機器提供廣泛的 DoS 和滲透攻擊。


6 個跟踪性能的最佳網絡管理工具

6 個跟踪性能的最佳網絡管理工具

網絡管理軟件市場非常擁擠。按照我們推薦的最佳網絡管理工具來縮短您的搜索。

10 個最佳 Ping 掃描工具,讓您了解更多有關網絡的信息

10 個最佳 Ping 掃描工具,讓您了解更多有關網絡的信息

Ping 掃描可以通過多種方式為您帶來好處。請繼續閱讀,我們將討論如何操作並介紹您能找到的 10 種最佳 Ping 掃描工具。

6 個最佳網站監控工具

6 個最佳網站監控工具

網站很重要,必須不斷密切監控以獲得足夠的性能。以下是一些用於監控網站的最佳工具。

2022 年開發團隊最佳軟件部署工具

2022 年開發團隊最佳軟件部署工具

以下是一些最好的軟件部署工具,可以減輕管理任意數量機器的痛苦

HIPAA 合規檢查表和使用工具

HIPAA 合規檢查表和使用工具

如果您從事健康行業或以某種方式參與該行業的 IT,您很有可能聽說過 HIPAA。健康保險的便攜性

2021 年審查的最佳免費 sFlow 收集器和分析器

2021 年審查的最佳免費 sFlow 收集器和分析器

sFlow 是一種內置於眾多網絡設備中的流分析協議。我們回顧了前五名的最佳免費 sFlow 收集器和分析器。

2021 年最佳無代理基礎設施監控工具和軟件

2021 年最佳無代理基礎設施監控工具和軟件

為了幫助您選擇合適的工具,我們引入了最好的無代理基礎設施監控工具,並讓您快速查看每個工具。

在 Linux 上監控帶寬:2021 年排名前 5 的工具

在 Linux 上監控帶寬:2021 年排名前 5 的工具

隨著 Linux 在數據中心變得越來越流行,他們正在研究 Linux 上的帶寬監控,同時也在審查最佳工具。

SolarWinds Mail Assure – 2021 年回顧

SolarWinds Mail Assure – 2021 年回顧

電子郵件安全是託管服務提供商的一項重要任務。正在審查 SolarWinds Mail Assure,這是為此目的的最佳工具之一。

Windows PowerShell 命令備忘單 - 您需要的終極指南

Windows PowerShell 命令備忘單 - 您需要的終極指南

如果您是 Windows 高級用戶,您可能知道並了解如何在您的 PC 上執行各種操作可以有不止一種方法和