提起ICMP,一些人可能會感到陌生,實際上,ICMP與我們息息相關(guān)。在網(wǎng)絡(luò)體系結(jié)構(gòu)的各層次中,都需要控制,而不同的層次有不同的分工和控制內(nèi)容,IP層的控制功能是最復(fù)雜的,主要負(fù)責(zé)差錯控制、擁塞控制等,任何控制都是建立在信息的基礎(chǔ)之上的,在基于IP數(shù)據(jù)報的網(wǎng)絡(luò)體系中,網(wǎng)關(guān)必須自己處理數(shù)據(jù)報的傳輸工作,而IP協(xié)議自身沒有內(nèi)在機制來獲取差錯信息并處理。為了處理這些錯誤,TCP/IP設(shè)計了ICMP協(xié)議,當(dāng)某個網(wǎng)關(guān)發(fā)現(xiàn)傳輸錯誤時,立即向信源主機發(fā)送ICMP報文,報告出錯信息,讓信源主機采取相應(yīng)處理措施,它是一種差錯和控制報文協(xié)議,不僅用于傳輸差錯報文,還傳輸控制報文。
ICMP協(xié)議是什么?可能很多互聯(lián)網(wǎng)人士都不沒聽說過,其實ICMP協(xié)議和我們的網(wǎng)絡(luò)生活密切相關(guān),只是我們從未察覺而已。只要有網(wǎng)絡(luò)、路由器、IP等配置的地方,會有ICMP協(xié)議的存在,下面小編為大家介紹一下ICMP協(xié)議。
ICMP協(xié)議是一種面向無連接的協(xié)議,用于傳輸出錯報告控制信息。它是一個非常重要的協(xié)議,它對于網(wǎng)絡(luò)安全具有極其重要的意義。
它是TCP/IP協(xié)議族的一個子協(xié)議,屬于網(wǎng)絡(luò)層協(xié)議,主要用于在主機與路由器之間傳遞控制信息,包括報告錯誤、交換受限控制和狀態(tài)信息等。當(dāng)遇到IP數(shù)據(jù)無法訪問目標(biāo)、IP路由器無法按當(dāng)前的傳輸速率轉(zhuǎn)發(fā)數(shù)據(jù)包等情況時,會自動發(fā)送ICMP消息。ICMP報文在IP幀結(jié)構(gòu)的首部協(xié)議類型字段(Protocol 8bit)的值=1.
如下圖所示,ICMP包有一個8字節(jié)長的包頭,其中前4個字節(jié)是固定的格式,包含8位類型字段,8位代碼字段和16位的校驗和;后4個字節(jié)根據(jù)ICMP包的類型而取不同的值。
ICMP提供一致易懂的出錯報告信息。發(fā)送的出錯報文返回到發(fā)送原數(shù)據(jù)的設(shè)備,因為只有發(fā)送設(shè)備才是出錯報文的邏輯接受者。發(fā)送設(shè)備隨后可根據(jù)ICMP報文確定發(fā)生錯誤的類型,并確定如何才能更好地重發(fā)失敗的數(shù)據(jù)包。但是ICMP唯一的功能是報告問題而不是糾正錯誤,糾正錯誤的任務(wù)由發(fā)送方完成。
我們在網(wǎng)絡(luò)中經(jīng)常會使用到ICMP協(xié)議,比如我們經(jīng)常使用的用于檢查網(wǎng)絡(luò)通不通的Ping命令(Linux和Windows中均有),這個“Ping”的過程實際上就是ICMP協(xié)議工作的過程。還有其他的網(wǎng)絡(luò)命令如跟蹤路由的Tracert命令也是基于ICMP協(xié)議的。