福建廈門微思網絡始于2002年,面向全國招生!
主要課程:華為、思科、紅帽、Oracle、VMware、CISP安全系列、PMP.......
網絡工程師實用課程華為HCIA課程介紹
網絡工程師使用課程華為HCIP課程介紹
網絡工程師使用課程華為HCIE課程介紹
因特網控制報文協議ICMP(Internet Control Message Protocol)是一個差錯報告機制,是TCP/IP協議簇中的一個重要子協議,通常被IP層或更高層協議(TCP或UDP)使用,屬于網絡層協議,主要用于在IP主機和路由器之間傳遞控制消息,用于報告主機是否可達、路由是否可用等。這些控制消息雖然并不傳輸用戶數據,但是對于收集各種網絡信息、診斷和排除各種網絡故障以及用戶數據的傳遞具有至關重要的作用。
為什么需要ICMP?
在數據傳輸的過程中,IP提供盡力而為的服務,指為了把數據包發送到目的地址盡最大努力。它并不對目的主機是否收到數據包進行驗證,無法進行流量控制和差錯控制。因此在數據包傳輸過程中,產生各種錯誤在所難免。為了更有效地轉發IP數據包和提高數據包交付成功的機會,ICMP應運而生。使用ICMP,當網絡中數據包傳輸出現問題時,主機或設備就會向上層協議報告差錯情況和提供有關異常情況的報告,使得上層協議能夠通過自己的差錯控制程序來判斷通信是否正確,以進行流量控制和差錯控制,從而保證服務質量。
ICMP如何工作?
從技術角度來說,ICMP就是一個差錯報告機制,其工作機理也比較簡單,即當數據包處理過程出現差錯時,ICMP向數據包的源端設備報告這個差錯,它既不會糾正這個差錯,也不會通知中間的網絡設備。因為ICMP報文被封裝在IP數據包內部,作為IP數據包的數據部分通過互聯網傳遞。IP數據包中的字段包含源端和最終的目的端,并沒有記錄報文在網絡傳遞中的全部路徑(除非IP數據包中設置了路由記錄選項)。因此當設備檢測到差錯時,它無法通知中間的網絡設備,只能向源端發送差錯報告。
源端在收到差錯報告后,它雖然不能判斷差錯是由中間哪個網絡設備所引起的,但是卻可以根據ICMP報文確定發生錯誤的類型,并確定如何才能更好地重發傳遞失敗的數據包。
ICMP報文格式如圖所示,每一個ICMP消息都將包含引發這條ICMP消息的數據包的完全IP包頭,ICMP報文則作為IP數據包的數據部分封裝在IP數據包內部。ICMP包頭中包含的三個固定字段就是源端設備確定發生錯誤的類型的主要依據。
- Type字段表示ICMP消息的類型;
- Code字段表示ICMP消息類型細分的子類型;
- Checksum字段表示ICMP報文的校驗和。
不同的Type和Code值表示不同的ICMP報文類型,對應了數據包處理過程中可能出現的不同錯誤情況,不同類型的ICMP報文又分為差錯報文和查詢報文兩種,如ICMP報文分類表所示。
此外,我們還要認識到,ICMP協議在以下情況下不會產生ICMP差錯報文:
- ICMP差錯報文不會產生ICMP差錯報文(但ICMP查詢報文可能會產生ICMP差錯報文),此條規定主要為了防止ICMP消息的無限產生和傳遞;
- 目的地址是廣播地址或多播地址的IP數據報文;
- 作為鏈路層廣播的數據包;
- 不是IP分片的第一片;
- 源地址不是單個主機的數據包,也就是說,源地址不能為零地址、環回地址、廣播地址或多播地址。
ICMP報文格式
表1-1 ICMP報文分類
ICMP的典型應用
IP數據報及其他應用程序通過ICMP報文可以實現多種應用,其中Ping程序和Tracert(Traceroute)程序最為常見。此外,在網絡管理和監測中,網絡質量分析NQA(Network Quality Analysis)技術更加充分應用了ICMP。
Ping
Ping程序是最常見的用于檢測IPv4和IPv6網絡設備是否可達的調試手段,它使用ICMP的echo信息來確定:
- 遠程設備是否可達;
- 與遠程主機通信的來回旅程(round-trip)的延遲;
- 報文包的丟失情況。
Tracert
Tracert程序主要用于查看數據包從源端到目的端的路徑信息,從而檢查網絡連接是否可用。當網絡出現故障時,用戶可以使用該命令定位故障點。
Tracert利用ICMP超時信息和目的不可達信息來確定從一個主機到網絡上其他主機的路由,并顯示IP網絡中每一跳的延遲(這里的延遲是指:分組從信息源發送到目的地所需的時間,延遲也分為許多的種類——傳播延遲、傳輸延遲、處理延遲、排隊延遲等)。
NQA
網絡質量分析NQA(Network Quality Analysis)是一種實時的網絡性能探測和統計技術,可以對響應時間、網絡抖動、丟包率等網絡信息進行統計。NQA能夠實時監視網絡服務質量,在網絡發生故障時進行有效的故障診斷和定位。
利用不同類型的ICMP報文,NQA實現了Ping和Tracert功能的擴展和增強,可以實現對網絡運行狀況的準確測試,輸出統計信息。比如NQA的ICMP測試、ICMP Jitter測試和Trace測試等。
- ICMP測試ICMP測試是通過發送ICMP Echo請求報文和Echo響應報文來判斷目的地的可達性、計算網絡響應時間及丟包率,從而清晰地反映出網絡性能及暢通情況。ICMP測試提供類似于命令行下的Ping命令功能,但輸出信息更為豐富。
- ICMP Jitter測試ICMP Jitter測試是以ICMP報文為承載,通過記錄在報文中的時間戳信息來統計時延、抖動、丟包的一種測試方法。Jitter(抖動時間)是指相鄰兩個報文的接收時間間隔減去這兩個報文的發送時間間隔。
- Trace測試NQA的Trace測試用于檢測源端到目的端的轉發路徑,并沿該路徑記錄源設備到中間各個設備的時延等信息。Trace測試類似于Tracert命令功能,但輸出信息更為豐富。每一跳信息中能夠顯示平均時延、丟包、最后一個包接收時間等信息。
ICMP安全
ICMP對于網絡安全具有極為重要的意義。ICMP本身非常簡單,它并不具有驗證機制,這也導致它非常容易被用于攻擊交換機、路由器等網絡設備。
ICMP攻擊
目前ICMP攻擊絕大部分都可以歸類為拒絕服務攻擊(Denial of Service, DOS),其中最為常見的是ICMP泛洪攻擊,是指攻擊者在短時間內向目標設備發送大量的ICMP虛假報文,導致目標設備忙于應付無用報文,而無法為用戶提供正常服務,其過程如下圖所示。
ICMP泛洪攻擊
ICMP泛洪攻擊具體又可分為針對帶寬的DOS攻擊和端口掃描攻擊(針對連接的DOS攻擊)兩類:
- 針對帶寬的DOS攻擊攻擊者發送大量偽造的ICMP Echo請求報文,交換機、路由器等網絡設備的CPU需要響應這種報文,會占用大量的帶寬和CPU資源,這種DOS攻擊和其他DOS攻擊一樣,消耗設備的資源而使得設備無法提供正常服務。ICMP Echo響應報文具有較高的優先級,在一般情況下,網絡總是允許內部主機使用Ping命令。 這種攻擊僅限于攻擊網絡帶寬,單個攻擊者就能發起這種攻擊。更厲害的攻擊形式,如smurf,可以使整個子網內的主機對目標主機進行攻擊,從而擴大ICMP流量。
- 端口掃描攻擊(針對連接的DOS攻擊)端口掃描是指攻擊者發送大量的端口掃描報文,交換機需要回應大量的ICMP目的不可達報文,這種攻擊既消耗系統的資源,同時攻擊者能夠很輕易獲得設備開啟的端口,然后可以針對這些端口進行攻擊,可以影響所有IP設備的網絡連接。
此外,還有針對主機的DOS攻擊,又被稱為Ping-of-Death,主要是攻擊操作系統的漏洞。
由于在早期的階段,路由器對包的最大尺寸都有限制,許多操作系統在TCP/IP棧的實現中,對ICMP包的最大長度規定為64KB,并且在對ICMP包頭進行讀取之后,要根據該包頭里包含的信息來為有效載荷生成緩沖區。當收到畸形的、聲稱自己的尺寸超過ICMP報文最大長度的包,接收方設備根據這個信息將分配超過64KB的有效載荷,就會出現內存分配錯誤,導致TCP/IP堆棧崩潰,從而產生宕機。
根據這個原理,可以簡單通過發送一個非法的ICMP Echo請求報文,就可以使目標系統崩潰或重啟。許多系統包括Windows、Unix、Macintosh ,還有一些交換機、路由器和打印機,都容易遭受此類攻擊。如果用戶使用的操作系統的版本過于陳舊,請確保打好了補丁。
ICMP攻擊防范
ICMP協議在網絡數據傳輸和網絡管理與監測中具有極為重要的作用,同時其本身對于網絡安全也具有極為重要的意義。因此,為了減輕設備處理ICMP報文的壓力以及防范ICMP攻擊,ICMP攻擊防范技術尤為重要。目前主要采用ICMP報文限速、ICMP報文合法性檢查、丟棄不需要處理的ICMP報文和不響應不可達報文來防范攻擊,保護設備的CPU資源。
- 報文限速ICMP報文限速包括端口限速、VLAN限速和全局限速,同時也實現芯片的限速,通過多個維度來保證ICMP的洪泛攻擊。
- 合法性檢查&丟棄不需要處理的報文對于一些不合法的ICMP報文,比如TTL為0、ICMP類型為15、16、17的報文,都直接丟棄,同時可配置丟棄一些不常用或基本不使用的ICMP報文,包括TTL為1、帶選項、不可達的ICMP報文。
- 不響應不可達報文在用戶通過發送大量端口不可達或網絡不可達報文攻擊設備時,設備收到這些報文后可以不響應,直接丟棄,以保護CPU資源。