ICMP協(xié)議結(jié)構(gòu)全解
很多網(wǎng)絡(luò)協(xié)議中,都有不穩(wěn)定的因素。這里我們所說的不穩(wěn)定因素,就是其中包括一些不可靠的協(xié)議。但是,我們通常會使用其他協(xié)議來進(jìn)行彌補(bǔ)。這里我們就講述一下ICMP協(xié)議進(jìn)行IP協(xié)議的差錯控制。下面我們來詳細(xì)說明一下。
ICMP協(xié)議概述
IP協(xié)議是一種不可靠的協(xié)議,無法進(jìn)行差錯控制。但I(xiàn)P協(xié)議可以借助其他協(xié)議來實(shí)現(xiàn)這一功能,如ICMP。
ICMP(Internet Control Messages Protocol, 網(wǎng)間控制報(bào)文協(xié)議)允許主機(jī)或路由器報(bào)告差錯情況和提供有關(guān)異常情況的報(bào)告。
一般來說,ICMP報(bào)文提供針對網(wǎng)絡(luò)層的錯誤診斷、擁塞控制、路徑控制和查詢服務(wù)四項(xiàng)大的功能。如,當(dāng)一個分組無法到達(dá)目的站點(diǎn)或TTL超時(shí)后,路由器就會丟棄此分組,并向源站點(diǎn)返回一個目的站點(diǎn)不可到達(dá)的ICMP報(bào)文。
ICMP報(bào)文類型
1 ICMP報(bào)文類型
ICMP報(bào)文大體可以分為兩種類型,即ICMP差錯報(bào)文和ICMP協(xié)議詢問報(bào)文。但細(xì)分又可分為很多類型,如表1所示。
表1 ICMP報(bào)文類型
#p#
2 ICMP回射請求和應(yīng)答報(bào)文頭部格式
ICMP報(bào)文被封裝在IP數(shù)據(jù)報(bào)內(nèi)部傳輸。如圖1所示,是ICMP協(xié)議回射請求和應(yīng)答報(bào)文頭部格式。
圖1 ICMP回射請求和應(yīng)答報(bào)文頭部格式
各種ICMP報(bào)文的前32bits都一樣,它們是:
8bits類型和8bits代碼字段:一起決定了ICMP報(bào)文的類型。常見的有:
類型8、代碼0:回射請求。
類型0、代碼0:回射應(yīng)答。
類型11、代碼0:超時(shí)。
16bits校驗(yàn)和字段:包括數(shù)據(jù)在內(nèi)的整個ICMP協(xié)議數(shù)據(jù)包的校驗(yàn)和,其計(jì)算方法和IP頭部校驗(yàn)和的計(jì)算方法是一樣的。
對于ICMP回射請求和應(yīng)答報(bào)文來說,接下來是16bits標(biāo)識符字段:用于標(biāo)識本ICMP進(jìn)程。
最后是16bits序列號字段:用于判斷回射應(yīng)答數(shù)據(jù)報(bào)。
3 ICMP目標(biāo)不可達(dá)報(bào)文
如圖2所示,是ICMP目標(biāo)不可達(dá)報(bào)文頭部格式。
圖2 ICMP目標(biāo)不可達(dá)報(bào)文頭部格式
其中代碼字段的不同值又代表不同的含義,如,0代表網(wǎng)絡(luò)不可達(dá)、1代表主機(jī)不可達(dá)等,見表1。
4 ICMP超時(shí)報(bào)文頭部格式
如圖3所示,是ICMP超時(shí)報(bào)文頭部格式。
圖3 ICMP超時(shí)報(bào)文頭部格式
其中:
類型11+代碼0:表示傳輸期間生存時(shí)間為0。
類型11+代碼1:表示數(shù)據(jù)報(bào)組裝期間生存時(shí)間為0。
由于篇幅有限,這里不再分析其他類型ICMP協(xié)議數(shù)據(jù)包的格式。