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