網絡網絡層之(6)ICMPv4協議

網絡網絡層之(6)ICMPv4協議


Author: Once Day Date: 2024年6月2日

一位熱衷于Linux學習和開發的菜鳥,試圖譜寫一場冒險之旅,也許終點只是一場白日夢…

漫漫長路,有人對你微笑過嘛…

全系列文章可參考專欄: 通信網絡技術_Once-Day的博客-CSDN博客。

參考文章:

  • 《TCP/IP詳解卷一》
  • RFC 792 - Internet Control Message Protocol (ietf.org)
  • RFC 4884 - Extended ICMP to Support Multi-Part Messages (ietf.org)
  • TCP/IP 筆記 - ICMPv4和ICMPv6 : Internet控制報文協議 - 野獸’ - 博客園 (cnblogs.com)
  • 5.ICMPv4協議分析與實踐_icmp v4-CSDN博客
  • ICMP Echo Request/Reply消息格式 - IP報文格式大全(html) - 華為 (huawei.com)
  • TCP/IP卷一:44—ICMP之(ICMP(控制報文協議)簡介、ICMPv4、ICMPv6報文格式/報文處理)_大量的icmpv6報文-CSDN博客

文章目錄

  • 網絡網絡層之(6)ICMPv4協議
        • 1. 概述
          • 1.1 ICMPv4介紹
          • 1.2 相關RFC文檔
        • 2. 報文格式
          • 2.1 ICMPv4首部
          • 2.2 ICMPv4報文類型
          • 2.3 ICMPv4常見代碼
          • 2.4 ICMPv4差錯報文限制
          • 2.5 ICMPv4目的不可達(類型3)
          • 2.6 ICMPv4重定向(類型5)
          • 2.7 ICMPv4超時(類型11)
          • 2.8 ICMPv4參數問題(類型12)
          • 2.9 ICMPv4回顯請求/應答(類型0/8)
          • 2.10 ICMPv4路由器請求和通告(類型9/10)
        • 3. ICMP攻擊
          • 3.1 洪泛攻擊

1. 概述
1.1 ICMPv4介紹

ICMPv4是IPv4協議族中的一個重要協議,它主要用于傳遞網絡層的控制和錯誤信息。與IP數據報不同,ICMPv4報文并不直接用于傳輸用戶數據,而是輔助IP協議更好地完成數據傳輸任務

ICMPv4報文封裝在IP數據報中進行傳輸。報文主要由兩部分組成:報頭和數據部分。報頭包含了類型、代碼和校驗和等重要信息,用于識別報文的類型和檢測傳輸錯誤,數據部分攜帶了與具體報文類型相關的信息。

根據功能,ICMPv4報文可以分為兩大類:差錯報告報文和查詢報文。

(1) 差錯報告報文用于告知源主機在數據傳輸過程中遇到的各種錯誤情況:

  • 目標不可達,數據包無法送達目標地址。
  • 超時,數據包在網絡中存在的時間超過限制。
  • 重定向,通知源主機有更優的路由路徑。

(2) 查詢報文則用于網絡探測和管理:

  • 回顯請求和應答,對應ping工具,用于連通性測試。
  • 時間戳請求和應答,用于進行時間同步。

常用的網絡診斷工具如ping、traceroute都是基于ICMPv4實現的,可以利用它們快速判斷網絡狀態,定位故障點。

1.2 相關RFC文檔

以下是與ICMPv4相關的主要RFC文檔列表:

  • RFC 792 - Internet Control Message Protocol (1981),定義了ICMPv4協議的基本規范,包括報文格式、類型和代碼等。
  • RFC 950 - Internet Standard Subnetting Procedure (1985),引入了子網編址的概念,通過子網掩碼實現IP地址的劃分。
  • RFC 1122 - Requirements for Internet Hosts – Communication Layers (1989),定義了互聯網主機在實現TCP/IP協議棧時需要遵循的各項要求。
  • RFC 1191 - Path MTU Discovery (1990),提出了路徑MTU發現機制,用于確定到達目標主機路徑上的最小MTU。
  • RFC 1256 - ICMP Router Discovery Messages (1991),引入了ICMPv4路由器發現報文,用于主機動態地發現本地網絡上的路由器。
  • RFC 1393 - Traceroute Using an IP Option (1993),描述了使用IP選項實現traceroute的方法。
  • RFC 1812 - Requirements for IP Version 4 Routers (1995),定義了IPv4路由器的各項需求,其中包括對ICMPv4的處理要求。
  • RFC 2463 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification (1998),定義了ICMPv6協議,作為IPv6協議族中與ICMPv4相對應的協議。
  • RFC 4443 - Internet Control Message Protocol (ICMPv6) for the Internet Protocol Version 6 (IPv6) Specification (2006),更新了ICMPv6協議的規范,取代了RFC 2463。
  • RFC 4884 - Extended ICMP to Support Multi-Part Messages (2007),擴展了ICMPv4和ICMPv6,支持多部分消息,增加了對大型診斷消息的傳輸能力。
  • RFC 5837 - ICMP Extensions for Multiprotocol Label Switching (2010),定義了用于MPLS的ICMPv4和ICMPv6擴展,支持MPLS網絡的錯誤報告和診斷。
  • RFC 5508 - NAT Behavioral Requirements for ICMP (2009),定義了網絡地址轉換(NAT)設備處理ICMPv4報文的行為要求,以保證NAT環境下ICMP的正確工作。
2. 報文格式
2.1 ICMPv4首部

ICMPv4報文格式由類型、代碼和校驗和三個固定字段組成,后面緊跟與具體報文類型相關的數據部分

在這里插入圖片描述

字段說明:

  • IPv4報文首部協議(proto)字段值為1,表示其攜帶了ICMPv4報文數據。

  • Type(類型,8位)標識ICMPv4報文的類型,不同的類型對應不同的報文格式和用途,如0表示回顯應答,8表示回顯請求等。

  • Code(代碼,8位)與類型字段一起標識ICMPv4報文的具體含義,同一類型的報文可能有多個代碼值,表示不同的錯誤原因或附加信息。

  • Checksum(校驗和,16位)用于檢測報文在傳輸過程中是否出現錯誤,計算時需要將校驗和字段置零,然后對整個ICMP報文進行16位二進制反碼求和

  • Message Body(消息體,長度可變)攜帶與具體報文類型相關的數據,如錯誤信息、回顯數據等,不同類型的報文有不同的消息體格式。

2.2 ICMPv4報文類型

常見的ICMPv4報文類型如下:

類型名稱RFC文檔差錯or查詢用途描述
0Echo ReplyRFC792查詢響應Echo Request,用于確認連通性和RTT測量
3Destination UnreachableRFC792差錯通知源主機目標不可達,具體原因在Code字段中說明
4Source QuenchRFC792差錯通知源主機降低發送速率,避免擁塞(已廢棄)
5RedirectRFC792差錯通知源主機有更好的路由,優化路由路徑
8Echo RequestRFC792查詢請求目標主機回應,用于確認連通性和RTT測量
9Router AdvertisementRFC1256查詢路由器定期或應請求發送,公告自身作為默認網關的可用性
10Router SolicitationRFC1256查詢主機發送該報文,請求路由器立即發送Router Advertisement
11Time ExceededRFC792差錯當TTL耗盡或分片重組超時時,告知源主機
12Parameter ProblemRFC792差錯IP首部存在問題導致無法處理時,告知源主機
13TimestampRFC792查詢請求目標主機回送時間戳,用于時間同步(已廢棄)
14Timestamp ReplyRFC792查詢Timestamp查詢的應答報文(已廢棄)
15Information RequestRFC792查詢請求目標主機提供IP地址信息(已廢棄)
16Information ReplyRFC792查詢Information Request的應答報文(已廢棄)
17Address Mask RequestRFC1256查詢請求子網掩碼信息(已廢棄)
18Address Mask ReplyRFC1256查詢Address Mask Request的應答報文(已廢棄)

類型3、4、5、11、12屬于差錯報文,用于通知源主機存在的問題。

類型0、8、13、14、15、16屬于查詢報文,用于診斷連通性、測量時延等。

有些類型如Source Quench、Timestamp等已經被廢棄不再使用。

2.3 ICMPv4常見代碼

ICMPv4中類型3、5、9、11、12的常見代碼號如下:

類型代碼名稱描述
30Net Unreachable目標網絡不可達
31Host Unreachable目標主機不可達
32Protocol Unreachable目標協議不可達
33Port Unreachable目標端口不可達
34Fragmentation Needed and Don’t Fragment was Set需要分片但設置了不分片位
35Source Route Failed源路由失敗
36Destination Network Unknown目標網絡未知
37Destination Host Unknown目標主機未知
38Source Host Isolated源主機被隔離
39Communication with Destination Network is Administratively Prohibited與目標網絡的通信被管理員禁止
310Communication with Destination Host is Administratively Prohibited與目標主機的通信被管理員禁止
311Destination Network Unreachable for Type of Service對于此類服務,目標網絡不可達
312Destination Host Unreachable for Type of Service對于此類服務,目標主機不可達
313管理禁止通信被過濾策略禁止的通信
314違反主機優先級src/dest/port不準許的優先級
315優先級終止生效在最小Tos之下(RFC1812)
50Redirect Datagram for the Network對特定網絡重定向
51Redirect Datagram for the Host對特定主機重定向
52Redirect Datagram for the Type of Service and Network對特定類型服務和網絡重定向
53Redirect Datagram for the Type of Service and Host對特定類型服務和主機重定向
90Normal Router Advertisement正常路由器通告
916Does Not Route Common Traffic不路由普通流量
110Time to Live exceeded in Transit傳輸過程中超過生存時間
111Fragment Reassembly Time Exceeded分片重組超時
120Pointer indicates the error參數問題,錯誤由指針指出
121Missing a Required Option缺少必需的選項
122Bad Length長度錯誤
2.4 ICMPv4差錯報文限制

在某些情況下,網絡設備不會產生ICMPv4差錯報文,以避免網絡擁塞、安全問題或無用的錯誤報告:

  • 廣播或組播地址,當IP數據報的目標地址是廣播或組播地址時,通常不會產生ICMPv4差錯報文,如"目標不可達"或"超時"等。

  • 分片,當接收到IP分片時,如果出現錯誤(如超時、目標不可達等),通常不會為每個分片生成單獨的ICMPv4差錯報文,而是等到全部分片到達后再生成一個差錯報文。

  • ICMP差錯報文,為了避免無限循環,當一個ICMP差錯報文觸發另一個差錯時,通常不會再生成新的ICMP差錯報文。

  • 源地址不可達,當源IP地址不可達時(零地址、環回地址、廣播地址或組播地址),通常不會生成ICMPv4差錯報文,以避免網絡擁塞和廣播風暴。

  • 作為鏈路層廣播的數據報,避免產生大量的差錯報文。

  • 安全策略,根據網絡管理員的安全策略,某些類型的ICMPv4報文可能會被禁用或過濾,如ping請求、重定向等。

2.5 ICMPv4目的不可達(類型3)

ICMPv4的目的不可達報文(Destination Unreachable Message)是類型3的差錯報文,用于在數據包無法送達目標時,由路由器或主機向源端發送,告知其發生了不可達的情況。

RFC 792報文的格式如下:

			Destination Unreachable Message(RFC 792)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                             unused                            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|      Internet Header + 64 bits of Original Data Datagram      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段說明如下:

  • Type(8位),值為3,表示目的不可達報文。
  • Code(8位),表示不可達的具體原因,取值范圍0~15。
  • Checksum(16位),ICMPv4頭部和數據部分的校驗和。
  • unused(32位),未使用字段,必須置0。
  • Internet Header + 64 bits of Original Data Datagram,數據部分,包含引發差錯報文的原始IP數據報的IP頭部和至少64位數據。在不超過576字節的情況下,應盡量的多包涵原始數據。

RFC 4884報文格式如下(支持擴展數據結構):

			Destination Unreachable Message(RFC 4884)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     unused    |    Length     |         Next-Hop MTU*         |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|      Internet Header + leading octets of original datagram    ||                                                               ||                           //                                  ||                                                               |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|             ICMP擴展頭部以及零個或多個關聯對象                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type、Code、Checksum、unused字段與原有格式相同。
  • Original IPv4 Header + data,數據部分,包含引發差錯報文的原始IP數據報的IP頭部和數據。與原有格式不同,該字段長度可變,不再限于64位,至少應包含128字節。
  • Length,指示Original IPv4 Header + data字段的長度,單位為4字節(IPv4和IPv6單位不一樣)。
  • 代碼為4(報文太大)時,Next-Hop MTU字段用于記錄下一跳的MTU,并被PMTUD使用。

當路由器或主機無法轉發或處理接收到的數據包時,就會向源端發送一個相應的目的不可達報文。源端收到該報文后,可以根據Code值判斷具體的不可達原因,并結合數據部分攜帶的原始報文信息進行問題的定位和調整。

Code字段表示不可達的具體原因,常見取值如下:

  • Net Unreachable(0),網絡不可達。
  • Host Unreachable(1),主機不可達。
  • Protocol Unreachable(2),協議不可達。
  • Port Unreachable(3),端口不可達。
  • Fragmentation Needed and Don’t Fragment was Set(4),需要分片但禁止分片。
  • Source Route Failed(5),源路由失敗。
  • Destination Network Unknown(6),目標網絡未知。
  • Destination Host Unknown(7),目標主機未知。
  • Source Host Isolated(8),源主機被隔離。
  • Communication with Destination Network Administratively Prohibited(9),目標網絡通信被管理員禁止。
  • Communication with Destination Host Administratively Prohibited(10),目標主機通信被管理員禁止。
  • Destination Network Unreachable for Type of Service(11),對于當前服務類型,目標網絡不可達。
  • Destination Host Unreachable for Type of Service(12),對于當前服務類型,目標主機不可達。

數據部分包含了引發該差錯報文的原始IP數據報的IP頭部和前64位數據,用于幫助源端定位和診斷問題。如果原始數據報小于64位,則截斷后填充0。

ICMPv4定義了"Packet Too Big"(PTB)報文,用于在網絡中發現和調整數據包的大小,以適應不同鏈路的MTU限制,這種機制稱為"Path MTU Discovery"(PMTUD),對于優化網絡性能和避免分片非常重要

在ICMPv4中,PTB報文屬于目的不可達報文(類型3)的一種特例,使用代碼4表示。當一個路由器收到一個數據包,其大小超過了下一跳鏈路的MTU,且該數據包設置了"Don’t Fragment"(DF)標志時,路由器會丟棄該數據包,并向源主機發送一個PTB報文。

PTB報文的格式與普通的目的不可達報文類似,但在未使用字段中攜帶了下一跳鏈路的MTU值。源主機收到PTB報文后,會將該報文中指示的MTU值作為目標地址的Path MTU(PMTU),并據此調整后續數據包的大小。

如果源主機無法縮減數據包大小,則會中止發送并向上層應用報告錯誤。

2.6 ICMPv4重定向(類型5)

ICMPv4的重定向報文(Redirect Message)是一種特殊的ICMP報文,用于通知主機更優的路由路徑。當主機發送數據包時,如果路由器發現主機使用了次優的路由路徑,則會向主機發送重定向報文,建議主機更新其路由表,以便后續數據包可以直接發送到更優的下一跳路由器。

						Redirect Message(5)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                 Gateway Internet Address                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|      Internet Header + 64 bits of Original Data Datagram      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
  • Type(8位),值為5,表示重定向報文。
  • Code(8位),表示重定向的具體原因,取值范圍0~3。
  • Checksum(16位),ICMP報文的校驗和。
  • Gateway Internet Address(32位),建議的更優下一跳路由器的IP地址。
  • Internet Header + 64 bits of Original Data Datagram,觸發重定向報文的原始IP數據報的IP頭部和前64位數據。

重定向類型(Code):

  • Network Redirect(0),表示對特定網絡的重定向。
  • Host Redirect(1),表示對特定主機的重定向。
  • Network Redirect for TOS(2),表示對特定網絡和服務類型(TOS)的重定向。
  • Host Redirect for TOS(3),表示對特定主機和服務類型(TOS)的重定向。
2.7 ICMPv4超時(類型11)

ICMPv4的超時報文(Time Exceeded Message)是一種重要的差錯報文,用于通知源主機在數據包傳輸過程中發生了超時。這種超時通常分為兩種情況:

  • 傳輸過程中超過了IP頭部中的生存時間(TTL)。
  • 分片重組超時,相當于整個數據報被丟棄。

下面是ICMPv4超時報文的格式:

						Time Exceeded Message(11)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                             unused                            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|      Internet Header + 64 bits of Original Data Datagram      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段說明:

  • Type(8位),值為11,表示超時報文。
  • Code(8位),表示超時的具體原因,取值范圍0~1。
  • Checksum(16位),ICMP報文的校驗和。
  • unused(32位),未使用字段,置0。
  • Internet Header + 64 bits of Original Data Datagram,觸發超時報文的原始IP數據報的IP頭部和前64位數據。

超時代碼(Code):

  • Time to Live exceeded in Transit(0),表示數據包在傳輸過程中超過了IP頭部中的TTL值。每經過一個路由器,IP頭部的TTL值就會減1,當TTL減為0時,路由器會丟棄該數據包,并向源主機發送一個Code 0的超時報文。
  • Fragment Reassembly Time Exceeded(1),表示分片重組超時。當一個數據包被分片傳輸時,目標主機需要在一定時間內收到所有分片并重組,如果超過了設定的時間閾值,就會觸發Code 1的超時報文。

超時報文用于通知源主機在數據包傳輸過程中發生了異常,幫助源主機診斷和調試網絡問題:

  • Code 0的超時報文通常表明網絡路徑過長或存在路由環路,源主機可以據此調整TTL值或檢查路由配置。Code 0的超時報文也被用于traceroute等網絡診斷工具,以發現網絡路徑上的路由器。
  • Code 1的超時報文提示分片重組過程出現了問題,可能是因為網絡擁塞、分片丟失或目標主機資源不足等原因。
2.8 ICMPv4參數問題(類型12)

ICMPv4的參數問題報文(Parameter Problem Message)是一種重要的差錯報文,用于通知源主機在數據包的首部中發現了錯誤或不完整的信息。當路由器或主機在處理數據包時檢測到頭部字段存在問題,無法正確解析或處理時,就會向源主機發送參數問題報文。

					Parameter Problem Message(12)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|    Pointer    |                   unused                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|      Internet Header + 64 bits of Original Data Datagram      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

字段說明:

  • Type(8位),值為12,表示參數問題報文。
  • Code(8位),表示錯誤的具體原因,取值范圍0~2。
  • Checksum(16位),ICMP報文的校驗和。
  • Pointer(8位),指向數據包首部中發生錯誤的字節位置。
  • unused(24位),未使用字段,置0。
  • Internet Header + 64 bits of Original Data Datagram,觸發參數問題報文的原始IP數據報的IP頭部和前64位數據。

錯誤代碼(Code):

  • Pointer indicates the error(0),表示Pointer字段指向了數據包首部中發生錯誤的具體位置。
  • Missing a Required Option(1),表示數據包缺少了某個必需的選項。
  • Bad Length(2),表示數據包的長度存在問題,可能是總長度與首部長度和數據長度之和不一致,或者超過了網絡的MTU限制。

參數問題報文用于通知源主機在發送數據包時出現了首部錯誤,幫助源主機診斷和調試網絡問題

  • Code 0的參數問題報文通常表明數據包的某個首部字段存在無法識別或不合法的值,Pointer字段會指明具體的錯誤位置,源主機可以據此檢查和修正數據包的構造過程。
  • Code 1的參數問題報文提示數據包缺少了某個必需的首部選項,例如安全選項、源路由選項等,源主機需要檢查上層協議和應用的設置,確保包含所有必需的選項。
  • Code 2的參數問題報文表示數據包的長度字段存在問題,可能是上層協議計算錯誤或者數據包在傳輸過程中被截斷,源主機需要檢查數據包的封裝和傳輸過程。
2.9 ICMPv4回顯請求/應答(類型0/8)

ICMP回顯請求和應答是我們日常網絡應用中最常見的兩種ICMP報文。它們構成了Ping程序的基礎,讓我們能夠方便地檢測網絡的連通性和延遲。

			  Echo(8) or Echo Reply(0) Message0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |          Checksum             |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|           Identifier          |        Sequence Number        |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Data ...+-+-+-+-+-

一個完整的ICMP回顯請求或應答報文由以下幾個字段依次組成:

  • 類型(Type,8位),回顯請求的類型值為8,而回顯應答的類型值則為0
  • 代碼(Code,8位),對于回顯請求和應答報文,代碼字段的值通常都為0,表示這是一個標準的查詢和響應過程。
  • 校驗和(Checksum,16位),ICMP報文的前4個字節和數據部分一起被用于計算校驗和。
  • 標識符(Identifier)和序號(Sequence Number),這兩個字段各占2字節,它們的值由發送方任意指定,但在請求和應答報文中必須保持一致。
  • 數據部分,在回顯請求和應答中,這部分內容是完全一樣的。數據的具體內容由請求方定義,應答方只需原封不動地返回即可。

最常見的應用莫過于Ping程序了。當我們在命令行中輸入"ping 目標IP地址"時,源主機就會構造一系列ICMP回顯請求報文,填入適當的標識符和序號,然后連續發送給目標主機。

目標主機收到請求后,會提取報文中的標識符和序號,構造對應的ICMP回顯應答報文,再發送回源主機。源主機根據收到的ICMP應答,計算往返時間和丟包率,評估與目標主機之間的網絡質量。

另一個常見的應用是traceroute程序,它通過逐步增加IP包的生存時間(TTL),結合ICMP超時錯誤和到達目標時的ICMP端口不可達錯誤,一跳一跳地探測到目標主機的網絡路徑。

2.10 ICMPv4路由器請求和通告(類型9/10)

ICMPv4 路由器請求和通告報文幫助主機自動發現附近的路由器,獲取必要的配置信息。

路由器請求報文的ICMP類型值為 9,當一臺主機希望自動獲取路由器的信息時,它會在本地網絡上廣播一個路由器請求報文。這個報文的目標地址通常為受限廣播地址255.255.255.255或本地網段的廣播地址

路由器請求報文的格式非常簡潔,除了公共的 ICMP 報頭外,沒有其他特殊字段:

				ICMP Router Solicitation Message(9)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |           Checksum            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                           Reserved                            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

路由器通告報文的ICMP類型值為10,當路由器收到一個路由器請求報文或者自身的通告時間間隔到期時,它就會主動向本地網絡發送一個路由器通告報文。這個報文通常以組播的形式發送,目標地址為 224.0.0.1

				ICMP Router Advertisement Message(10)0                   1                   2                   30 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|     Type      |     Code      |           Checksum            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|   Num Addrs   |Addr Entry Size|           Lifetime            |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                       Router Address[1]                       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Preference Level[1]                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                       Router Address[2]                       |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                      Preference Level[2]                      |+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+|                               .                               ||                               .                               ||                               .                               |

相比請求報文,通告報文的內容就豐富多了,除了ICMP報頭,它還包含以下重要信息:

  • 地址數(Num Addrs),表示通告報文中包含的路由地址條目數量,每個塊包含一個IPv4地址和相應的優先水平(Preference level)。
  • 地址條目大小(Addr Entry Size),說明每個地址條目的大小,以 32 位字為單位。
  • 生存周期(Lifetime),告知主機在收到下一個通告報文之前,本報文中的信息有效的時間,單位為秒。
  • 路由器地址(Router Address),路由器擁有的一個或多個 IP 地址。
  • 優先水平(Preference level),一個32位的有符號二進制補碼整數,其值越大代表優先級越高。默認的優先水平是0,特殊值0x80000000表示這個地址不應該作為有效的默認路由。

主機收到路由器通告報文后,會提取出路由器的IP地址,并根據報文中的生存時間設置老化定時器。在定時器到期之前,主機就可以使用通告的路由器地址作為默認網關,將目標不在本地網段的數據報文轉發給路由器處理。

3. ICMP攻擊
3.1 洪泛攻擊

ICMP協議作為網絡層的重要協議之一,在網絡管理、故障診斷等方面發揮著關鍵作用。然而,由于其設計的開放性和靈活性,ICMP也常常被惡意利用,成為網絡攻擊的工具。

(1) ICMP洪泛攻擊(ICMP Flood)是一種典型的拒絕服務(DoS)攻擊方式。攻擊者通過向目標主機或網絡發送大量的ICMP請求報文(如Echo請求、時間戳請求等),耗盡目標的網絡帶寬和系統資源,導致其無法正常提供服務。

攻擊者通常采用偽造源IP地址的方式,隱藏自己的真實身份,并利用僵尸網絡放大攻擊流量。當大量的ICMP請求同時到達目標時,網絡設備的處理能力和帶寬很快被耗盡,合法用戶的請求無法得到及時響應,網絡服務質量嚴重下降。

(2) **ICMP路由重定向攻擊(ICMP Redirect)**用于路由器通知主機更優的路由路徑。然而,惡意攻擊者可以偽造ICMP重定向報文,引誘主機將數據報文發送到錯誤的路由器或惡意主機,造成數據泄露或中間人攻擊。

攻擊者通常在與目標主機相同的本地網絡內,偽裝成合法的路由器,向目標主機發送虛假的ICMP重定向報文。如果主機沒有對報文來源進行嚴格驗證,就可能誤認為攻擊者是可信的路由器,從而將敏感數據發送給攻擊者,或者陷入惡意主機設置的"陷阱"。

(3) **ICMP目的不可達攻擊(ICMP Destination Unreachable)**用于告知源主機目標主機或端口無法到達。攻擊者可以利用這一機制,向目標主機發送偽造的目的不可達報文,導致目標主機錯誤地中斷與合法主機的通信。

例如,攻擊者監聽到目標主機與某個合法服務器之間的通信后,就偽造一個源IP為該服務器、目標IP為目標主機的ICMP目的不可達報文,并聲稱服務器的某個端口不可達。目標主機收到報文后,可能會誤認為服務器主動斷開了連接,從而中斷與服務器的通信。當攻擊者持續發送這類報文時,目標主機與合法服務器之間的通信就會不斷受到干擾。

(4) Ping of Death攻擊,早期的一些操作系統和網絡設備在處理超大的ICMP回顯請求報文時存在緩沖區溢出漏洞。攻擊者利用這一漏洞,構造一個超過最大允許長度(65535字節)的ICMP請求報文,在目標主機上引發系統崩潰或重啟,造成拒絕服務。

為了防范ICMP報文攻擊,網絡管理員可以采取以下措施:

  • 在網絡邊界和主機上啟用ICMP報文過濾,僅允許必要的ICMP報文通過。
  • 對ICMP報文進行速率限制,避免少量主機占用過多網絡資源。
  • 對ICMP報文的合法性進行驗證,丟棄可疑的偽造報文。
  • 及時更新系統和設備,修復已知的ICMP相關漏洞。
  • 部署抗DDoS設備,實時監測和清洗惡意ICMP流量。

ICMP報文攻擊是網絡安全領域的一大挑戰,攻擊者利用ICMP的開放性和靈活性,通過多種手段破壞網絡通信和服務。







Alt

Once Day

也信美人終作土,不堪幽夢太匆匆......

如果這篇文章為您帶來了幫助或啟發,不妨點個贊👍和關注,再加上一個小小的收藏?!

(。???。)感謝您的閱讀與支持~~~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/21888.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/21888.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/21888.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

華為OD刷題C卷 - 每日刷題 7(字符串分隔(二)、歡樂的周末)

兩段代碼分別解決了兩個不同的問題,下面是對它們的概述: 1、(字符串分隔(二)): 這段代碼是解決“字符串分隔(二)”的問題。它提供了一個Java類Main,其中包含…

Java面試題-Tomcat高級面試題

Tomcat 9相較于之前的版本有哪些主要的新特性? Tomcat 9相較于之前的版本,主要有以下幾個新特性: HTTP/2支持:Tomcat 9引入了對HTTP/2協議的支持,這可以顯著提高網站的性能和安全性。HTTP/2協議允許單個連接上進行多…

多語言for循環遍歷總結

多語言for循環遍歷總結 工作中經常需要遍歷對象,但不同編程語言之間存在一些細微差別。為了便于比較和參考,這里對一些常用的遍歷方法進行了總結。 JAVA 數組遍歷 Test void ArrayForTest() {String[] array {"劉備","關羽", &…

大模型備案項目補貼政策一覽【保持更新】

大模型項目、AI類項目、大模型備案通過后等一籃子財政補貼政策 上海市 加快創新體系構建 1. 提升自主創新水平:對引領大模型發展或取得顛覆性突破的項目,最高給予1000萬元補貼支持。 2. 加強算力資源保障:實施算力伙伴計劃,對…

力扣174題動態規劃:地下城游戲(含模擬面試)

?????? 歡迎來到我的博客。希望您能在這里找到既有價值又有趣的內容,和我一起探索、學習和成長。歡迎評論區暢所欲言、享受知識的樂趣! 推薦:數據分析螺絲釘的首頁 關注微信公眾號 數據分析螺絲釘 免費領取價值萬元的python/java/商業…

Java進階學習筆記36——算法

什么是算法? 解決某個實際問題的過程和方法。 1)導航; 2)滴滴打車; 3)抖音; 不同的算法,效率高、性能好! 在Java中,代碼已經幫我們寫好了,但為…

雪花算法詳解及源碼分析

雪花算法的簡介: 雪花算法用來實現全局唯一ID的業務主鍵,解決分庫分表之后主鍵的唯一性問題,所以就單從全局唯一性來說,其實有很多的解決方法,比如說UUID、數據庫的全局表的自增ID 但是在實際的開發過程中&#xff0…

離散點云擬合三維平面參數推導(基于最小二乘)

1、背景介紹 實際中,很多人工構造物是由平面結構構造而成,如下圖所示,為一典型的由多個平面組成的人工構筑物。因此,根據離散點擬合成平面,獲取擬合平面方程,是點云數據處理中非常常見的數據處理操作。 2、…

鴻蒙Ability Kit(程序框架服務)【ExtensionAbility組件】

ExtensionAbility組件 ExtensionAbility組件是基于特定場景(例如服務卡片、輸入法等)提供的應用組件,以便滿足更多的使用場景。 每一個具體場景對應一個[ExtensionAbilityType],開發者只能使用(包括實現和訪問&#…

WPS的excel表格設置了編輯權限,要怎么取消?

在日常生活和工作中,我們經常會使用WPS Office辦公軟件來處理各種文檔,其中WPS Excel表格是我們進行數據處理和分析的重要工具。為了保護表格中的數據不被隨意修改,我們有時會設置編輯權限。然而,隨著時間的推移或需求的變更&…

基于FPGA的SystemVerilog練習

文章目錄 一、認識SystemVerilogSystemVerilog的語言特性SystemVerilog的應用領域SystemVerilog的優勢SystemVerilog的未來發展方向 二、流水燈代碼流水燈部分testbench仿真文件 三、用systemVerilog實現超聲波測距計時器測距部分led部分數碼管部分采樣部分頂層文件引腳綁定效果…

魯教版七年級數學下冊-筆記

文章目錄 第七章 二元一次方程組1 二元一次方程組2 解二元一次方程組3 二元一次方程組的應用4 二元一次方程與一次函數5 三元一次方程組 第八章 平行線的有關證明1 定義與命題2 證明的必要性3 基本事實與定理4 平行線的判定定理5 平行限的性質定理6 三角形內角和定理 第九章 概…

dpdk uio整體分析及網卡加載

參考:https://zhuanlan.zhihu.com/p/477600165 一、Linux內核知識點 1. __attribute__ constructor/destructor (1)若函數被設定為constructor屬性,則該函數會在 main()函數執行之前被自動的執行。 (2)若函數被設定為destructor屬性,則該函數會在main()函數執…

開發和滲透偷懶利器utools

目錄 1.前言 1.1 工具簡介 1.2 核心特性 1.3 使用場景 1.4 安裝與使用 1.4.1 下載: 1.4.2 安裝: 1.4.3 配置: 1.4.4 插件市場: 2.懶狗插件介紹 基本介紹 2.1 數據模擬 2.2 隨機生成虛假數據 2.3 API市場 2.4 Hoppscot…

【十二】圖解mybatis日志模塊之設計模式

圖解mybatis日志模塊之設計模式 概述 最近經常在思考研發工程師初、中、高級工程師以及系統架構師各個級別的工程師有什么區別,隨著年齡增加我們的技術級別也在提升,但是很多人到了高級別反而更加憂慮,因為it行業35歲年齡是個坎這是行業里的共…

一文讀懂數據庫中的DB、DBMS、DBS、DBAS

目前數據庫的應用非常廣泛,幾乎各行各業都在直接或間接地與數據庫打交道,例如網上購物、銀行業務、鐵路購票和酒店住宿等。在實際應用中,數據庫、數據庫管理系統、數據庫系統和數據庫應用系統經常被統稱為數據庫,而實質上這4個概念是不一樣的,它們具有不同的定義和含義。下…

暴力數據結構之排序大雜燴

1. 冒泡排序:O(N^2) 邏輯解析: 冒泡排序并沒有什么實際意義,但是有教學意義,相信大部分小白在學習的初期第一個接觸的排序就是冒泡排序。那么接下來我們了解一下他的底層邏輯: 冒泡排序顧名思義就是將最大&#xff08…

PID——調參的步驟

第一步:確定比例增益P 確定比例增益 P 時,首先去掉 PID 的積分項和微分項,一般是令 Ti0、 Td0(具體見PID 的參數設定說明),使PID 為純比例調節。 輸入設定為系統允許的最大值60%~70%,由0逐漸加…

idea項目maven下載依賴報錯

報錯: 1、Failure to find bad.robot:simple-excel:jar:1.0 in https://maven.aliyun.com/repository/public was cached in the local repository, resolution will not be reattempted until the update interval of aliyunmaven has elapsed or updates are forc…

python的while循環與for循環總結

前兩章中,我們跟著海綿寶寶的故事,掌握了 while 循環和 for 循環,這兩種不同的循環模式。while 循環和 for 循環都需要有 循環體 和 縮進,我們來復習一下它倆的語法規則: while 循環與 for 循環辨析 學到這里&#x…