ICMP是IP層的一個(gè)組成部分,它傳遞查詢報(bào)文和差錯(cuò)報(bào)文,ICMP報(bào)文通常被IP層或更高層協(xié)議(TCP或UDP)使用,它是在IP數(shù)據(jù)包內(nèi)被傳輸?shù)模鐖D1所示。

圖1:ICMP封裝在IP數(shù)據(jù)包內(nèi)部
ICMP報(bào)文格式
如圖2所示,所有報(bào)文的前4個(gè)字節(jié)都是一樣的,但是剩下的其他字節(jié)則互不相同。

圖2:ICMP報(bào)文格式
類型字段可以有15個(gè)不同的值,以描述特定類型的ICMP報(bào)文。某些ICMP報(bào)文還使用代
碼字段的值來進(jìn)一步描述不同的條件。
檢驗(yàn)和字段覆蓋整個(gè)ICMP報(bào)文。使用的算法與前面介紹的IP首部檢驗(yàn)和算法相同。ICMP的檢驗(yàn)和是必需的。
ICMP報(bào)文的類型
各種類型的ICMP報(bào)文如3所示,不同類型由報(bào)文中的類型字段和代碼字段來共同決定。
圖中的最后兩列表明ICMP報(bào)文是一份查詢報(bào)文還是一份差錯(cuò)報(bào)文。因?yàn)閷?duì)ICMP差錯(cuò)報(bào)
文有時(shí)需要作特殊處理,因此我們需要對(duì)它們進(jìn)行區(qū)分。例如,在對(duì)ICMP差錯(cuò)報(bào)文進(jìn)行響應(yīng)
時(shí),永遠(yuǎn)不會(huì)生成另一份ICMP差錯(cuò)報(bào)文(如果沒有這個(gè)限制規(guī)則,可能會(huì)遇到一個(gè)差錯(cuò)產(chǎn)生
另一個(gè)差錯(cuò)的情況,而差錯(cuò)再產(chǎn)生差錯(cuò),這樣會(huì)無休止地循環(huán)下去)。

圖3:ICMP報(bào)文類型
ICMP地址掩碼請(qǐng)求與應(yīng)答
ICMP地址掩碼請(qǐng)求用于無盤系統(tǒng)在引導(dǎo)過程中獲取自己的子網(wǎng)掩碼。系統(tǒng)廣播它的ICMP請(qǐng)求報(bào)文(這一過程與無盤系統(tǒng)在引導(dǎo)過程中用RARP獲取IP地址是類似的)。無盤
系統(tǒng)獲取子網(wǎng)掩碼的另一個(gè)方法是BOOTP協(xié)議。ICMP地址掩碼請(qǐng)求和應(yīng)答報(bào)文的格式如圖4所示。

圖4:ICMP地址掩碼請(qǐng)求與應(yīng)答報(bào)文
ICMP報(bào)文中的標(biāo)識(shí)符和序列號(hào)字段由發(fā)送端任意選擇設(shè)定,這些值在應(yīng)答中將被返回。這樣,發(fā)送端就可以把應(yīng)答與請(qǐng)求進(jìn)行匹配。
ICMP時(shí)間戳請(qǐng)求與應(yīng)答
ICMP時(shí)間戳請(qǐng)求允許系統(tǒng)向另一個(gè)系統(tǒng)查詢當(dāng)前的時(shí)間。返回的建議值是自午夜開始計(jì)
算的毫秒數(shù),協(xié)調(diào)的統(tǒng)一時(shí)間(Coordinated Universal Time, UTC)。
ICMP時(shí)間戳請(qǐng)求和應(yīng)答報(bào)文格式如圖5所示。

圖5:ICMP時(shí)間戳請(qǐng)求和應(yīng)答報(bào)文
請(qǐng)求端填寫發(fā)起時(shí)間戳,然后發(fā)送報(bào)文。應(yīng)答系統(tǒng)收到請(qǐng)求報(bào)文時(shí)填寫接收時(shí)間戳,在發(fā)送應(yīng)答時(shí)填寫發(fā)送時(shí)間戳。但是,實(shí)際上,大多數(shù)的實(shí)現(xiàn)把后面兩個(gè)字段都設(shè)成相同的值。
ICMP端口不可達(dá)差錯(cuò)
上面介紹了ICMP兩種查詢報(bào)文—地址掩碼和時(shí)間戳查詢及應(yīng)答。現(xiàn)在來分析一種ICMP差錯(cuò)報(bào)文,即端口不可達(dá)報(bào)文,它是ICMP目的不可到達(dá)報(bào)文中的一種,以此來看一看ICMP差錯(cuò)報(bào)文中所附加的信息。
我們使用采用UDP協(xié)議的TFTP服務(wù)(默認(rèn)端口號(hào)69),在客戶端使用TFTP客戶程序connect服務(wù)端的非69端口,這樣就會(huì)發(fā)生端口不可達(dá)錯(cuò)誤。完整的差錯(cuò)報(bào)文如圖6所示:

圖6:“UDP端口不可達(dá)”返回的ICMP報(bào)文
ICMP的一個(gè)規(guī)則是, ICMP差錯(cuò)報(bào)文必須包括生成該差錯(cuò)報(bào)文的數(shù)據(jù)報(bào)IP首部(包含任何選項(xiàng)),還必須至少包括跟在該IP首部后面的前8個(gè)字節(jié)(包含源端口和目的端口)。在我們的例子中,跟在IP首部后面的前8個(gè)字節(jié)包含UDP的首部。
posted on 2008-06-07 17:16
水 閱讀(3240)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
tcp/ip