icmp是什么協(xié)議?ICMP(Internet Control Message Protocol)是互聯(lián)網(wǎng)控制信息協(xié)議的英文縮寫,其作用是用于發(fā)送差錯和控制信息。
我們知道,互聯(lián)網(wǎng)絡(luò)由于其自身的復(fù)雜性,很容易出現(xiàn)傳輸錯誤。但不管是線路或設(shè)備問題,還是系統(tǒng)擁塞而造成的TTL值超時、目的主機(jī)不可達(dá),ICMP都可以在第一時間內(nèi)向數(shù)據(jù)包的發(fā)送方通告差錯報告。ICMP協(xié)議在誕生初期只是為了向IP層提供數(shù)據(jù)包在傳輸過程中所出現(xiàn)錯誤的及時報告。
隨著互聯(lián)網(wǎng)絡(luò)的發(fā)展,它已不僅僅局限于錯誤通告,在錯誤控制方面,也有了相應(yīng)的功能。ICMP協(xié)議的錯誤控制功能雖然不如TCP強(qiáng)大,但其也具有一定的實(shí)用性。ICMP協(xié)議的主要功能如下。
● 向發(fā)送方通告目的主機(jī)不可達(dá)。
● 數(shù)據(jù)包的流量控制。
● 確保路徑的最短性。
● 檢測環(huán)路。
● 通告錯誤的IP包頭。
ICMP提供不可靠傳輸。ICMP雖然不是高層協(xié)議,但是它產(chǎn)生的數(shù)據(jù)卻以IP包為載體進(jìn)行封裝,并在網(wǎng)絡(luò)中傳輸。
ICMP協(xié)議的基本功能是網(wǎng)絡(luò)錯誤通告,但是卻不提供解決差錯的處理方法。IP包的發(fā)送方收到一個ICMP網(wǎng)絡(luò)錯誤通告后,必須與應(yīng)用程序結(jié)合起來對通告的錯誤進(jìn)行解決和處理。
ICMP網(wǎng)絡(luò)錯誤通告的數(shù)據(jù)包包括目的端不可達(dá)通告、超時通告、參數(shù)錯誤通告等。
● 目的端不可達(dá)通告
路由器的主要功能是對IP數(shù)據(jù)包進(jìn)行路由和轉(zhuǎn)發(fā),在操作過程中存在著失敗的可能。失敗的原因是多種多樣的,如目的端硬件故障、路由器沒有達(dá)到目的端的路徑、目的端不存在等。
如果發(fā)生這些情況,路由器會向IP數(shù)據(jù)包的源端發(fā)送目的端不可達(dá)通告消息數(shù)據(jù)包,并丟棄出錯的IP數(shù)據(jù)包。實(shí)際引起目的不可達(dá)錯誤的原因會以代碼的形式通知發(fā)送數(shù)據(jù)的源端,如表1所示。
表1 目的端不可達(dá)通告代碼字段對應(yīng)表
網(wǎng)絡(luò)不可達(dá)說明路由器選路出現(xiàn)了錯誤或數(shù)據(jù)包受到限制。主機(jī)不可達(dá)說明是目的主機(jī)的硬件錯誤或主機(jī)受到限制等,也有可能是目的主機(jī)的默認(rèn)網(wǎng)關(guān)出現(xiàn)問題。協(xié)議、端口不可達(dá)說明協(xié)議錯誤和端口訪問受到限制。
● 超時通告
路由器選路如果出現(xiàn)錯誤,會導(dǎo)致路由環(huán)路的產(chǎn)生,從而引起TTL值遞減為0和定時器超時。若定時器到時,路由器或目的主機(jī)會將IP數(shù)據(jù)包丟棄,并向源端發(fā)送超時通告。
● 參數(shù)錯誤通告
如果IP數(shù)據(jù)包中某些字段出現(xiàn)錯誤,且錯誤非常嚴(yán)重,路由器會將其拋棄,并向源端發(fā)送參數(shù)錯誤通告。
ICMP控制信息包括擁塞控制和路徑控制,通過它們可以實(shí)現(xiàn)IP層的控制功能。
● 擁塞控制
實(shí)際環(huán)境中,造成擁塞的原因一般是路由器的處理速度太慢,或者數(shù)據(jù)包的輸入速度大于輸出速度。擁塞不僅會使部分?jǐn)?shù)據(jù)被路由器丟棄掉,還可能造成路由器系統(tǒng)的崩潰。
擁塞現(xiàn)象可能出現(xiàn)在互聯(lián)網(wǎng)絡(luò)中的一臺路由器上,也可能出現(xiàn)在幾臺路由器上,甚至可能影響全網(wǎng)絡(luò)的數(shù)據(jù)傳輸。TCP/IP協(xié)議通過發(fā)送ICMP源抑制信息包抑制源端主機(jī)的數(shù)據(jù)包的發(fā)送速率,從而使擁塞得到比較有效的控制。
擁塞控制是一項(xiàng)互聯(lián)網(wǎng)絡(luò)中的設(shè)備共同合作并完成的工作。擁塞控制功能對于無連接協(xié)議本身來說是一種強(qiáng)化和完善,而對于數(shù)據(jù)來說則是在不可靠傳輸?shù)沫h(huán)境下提供了一種相對可靠的保障。
● 主機(jī)路徑控制
互聯(lián)網(wǎng)絡(luò)中的一臺主機(jī)是通過默認(rèn)網(wǎng)關(guān)與其他IP網(wǎng)段上的主機(jī)或網(wǎng)絡(luò)進(jìn)行通信的。當(dāng)源端主機(jī)以非最佳路徑向初始網(wǎng)關(guān)發(fā)送數(shù)據(jù)包時,收到數(shù)據(jù)包的路由器會將其進(jìn)行路由轉(zhuǎn)發(fā),同時會向源端主機(jī)發(fā)送ICMP重定向信息包,用來將最佳路徑通告給源端主機(jī)。源端主機(jī)下一次發(fā)送數(shù)據(jù)時會以最佳路徑進(jìn)行數(shù)據(jù)傳輸。
以上講述的幾種類型的ICMP信息都是用于錯誤通告和擁塞控制的單向報文,ICMP還可以發(fā)送響應(yīng)請求與應(yīng)答消息、時鐘請求與應(yīng)答消息、子網(wǎng)掩碼請求與應(yīng)答消息等雙向信息包實(shí)現(xiàn)一些基本的功能。響應(yīng)請求與應(yīng)答消息用于測試目的端是否可達(dá);時鐘請求與應(yīng)答消息用于通信雙方進(jìn)行同步;子網(wǎng)掩碼請求與應(yīng)答消息用于相應(yīng)的子網(wǎng)掩碼確定不同子網(wǎng)。
ICMP在實(shí)際應(yīng)用中主要完成以下幾個任務(wù)。
● 通告目的端可達(dá)性
如果一臺路由器不能轉(zhuǎn)發(fā)數(shù)據(jù)包,它就會發(fā)送目的端不可達(dá)消息通告給發(fā)送數(shù)據(jù)包的一方。
● 通告緩沖區(qū)已滿
如果路由器內(nèi)存中的緩沖區(qū)已滿,它就會發(fā)送源抑制消息控制擁塞的加劇。
● 通告跳數(shù)
一個數(shù)據(jù)包在發(fā)送出去時,會被分配一個跳數(shù),來限制數(shù)據(jù)包經(jīng)過的路由器數(shù)。如果在到達(dá)目的端之前跳數(shù)就超過了限制數(shù),那么路由器會將其丟棄,同時會發(fā)送參數(shù)錯誤消息通告發(fā)送方數(shù)據(jù)包已被丟棄。
● ping命令的使用
當(dāng)我們使用ping命令測試與目的主機(jī)的連通性時,路由器可以發(fā)送ICMP請求與應(yīng)答消息檢測互聯(lián)網(wǎng)絡(luò)上通信雙方的連接性。
● traceroute命令的使用
使用traceroute可以尋找一個數(shù)據(jù)包經(jīng)過互聯(lián)網(wǎng)絡(luò)時的路徑,它同樣是使用目的不可達(dá)消息。