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