ICMP協(xié)議是一種面向連接的協(xié)議,用于傳輸出錯(cuò)報(bào)告控制信息。它是一個(gè)非常重要的協(xié)議,它對于網(wǎng)絡(luò)安全具有極其重要的意義。
它是TCP/IP協(xié)議族的一個(gè)子協(xié)議,屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機(jī)與路由器之間傳遞控制信息,包括報(bào)告錯(cuò)誤、交換受限控制和狀態(tài)信息等。當(dāng)遇到IP數(shù)據(jù)無法訪問目標(biāo)、IP路由器無法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時(shí),會(huì)自動(dòng)發(fā)送ICMP消息ICMP提供一致易懂的出錯(cuò)報(bào)告信息。發(fā)送的出錯(cuò)報(bào)文返回到發(fā)送原數(shù)據(jù)的設(shè)備,因?yàn)橹挥邪l(fā)送設(shè)備才是出錯(cuò)報(bào)文的邏輯接受者。發(fā)送設(shè)備隨后可根據(jù)ICMP報(bào)文確定發(fā)生錯(cuò)誤的類型,并確定如何才能更好地重發(fā)失敗的數(shù)據(jù)報(bào)。但是ICMP唯一的功能是報(bào)告問題而不是糾正錯(cuò)誤,糾正錯(cuò)誤的任務(wù)由發(fā)送方完成。
每個(gè)ICMP消息都是直接封裝在一個(gè)IP數(shù)據(jù)報(bào)中的,因此,和UDP一樣,ICMP是不可靠的。雖然ICMP是包含在IP數(shù)據(jù)報(bào)中的,但是對ICMP消息通常會(huì)特殊處理,會(huì)和一般IP數(shù)據(jù)報(bào)的處理不同,而不是作為IP的一個(gè)子協(xié)議來處理。在很多時(shí)候,需要去查看ICMP消息的內(nèi)容,然后發(fā)送適當(dāng)?shù)腻e(cuò)誤消息到那個(gè)原來產(chǎn)生IP數(shù)據(jù)包的程序,即那個(gè)導(dǎo)致ICMP訊息被傳送的IP數(shù)據(jù)包。
我們在網(wǎng)絡(luò)中經(jīng)常會(huì)使用到ICMP協(xié)議,比如我們經(jīng)常使用的用于檢查網(wǎng)絡(luò)通不通的Ping命令(Linux和Windows中均有),這個(gè)“Ping”的過程實(shí)際上就是ICMP協(xié)議工作的過程。還有其他的網(wǎng)絡(luò)命令如跟蹤路由的Tracert命令也是基于ICMP協(xié)議的。
ICMP協(xié)議對于網(wǎng)絡(luò)安全具有極其重要的意義。ICMP協(xié)議本身的特點(diǎn)決定了它非常容易被用于攻擊網(wǎng)絡(luò)上的路由器和主機(jī)。例如,在1999年8月海信集團(tuán)“懸賞”50萬元人民幣測試防火墻的過程中,其防火墻遭受到的ICMP攻擊達(dá)334050次之多,占整個(gè)攻擊總數(shù)的90%以上!可見,ICMP的重要性絕不可以忽視!
比如,可以利用操作系統(tǒng)規(guī)定的ICMP數(shù)據(jù)包最大尺寸不超過64KB這一規(guī)定,向主機(jī)發(fā)起“Ping of Death”(死亡之Ping)攻擊。“Ping of Death” 攻擊的原理是:如果ICMP數(shù)據(jù)包的尺寸超過64KB上限時(shí),主機(jī)就會(huì)出現(xiàn)內(nèi)存分配錯(cuò)誤,導(dǎo)致TCP/IP堆棧崩潰,致使主機(jī)死機(jī)。
此外,向目標(biāo)主機(jī)長時(shí)間、連續(xù)、大量地發(fā)送ICMP數(shù)據(jù)包,也會(huì)最終使系統(tǒng)癱瘓。大量的ICMP數(shù)據(jù)包會(huì)形成“ICMP風(fēng)暴”,使得目標(biāo)主機(jī)耗費(fèi)大量的CPU資源處理,疲于奔命。
從技術(shù)角度來說,ICMP就是一個(gè)“錯(cuò)誤偵測與回報(bào)機(jī)制”,其目的就是讓我們能夠檢測網(wǎng)路的連線狀況﹐也能確保連線的準(zhǔn)確性﹐其功能主要有:
· 偵測遠(yuǎn)端主機(jī)是否存在。