信息產(chǎn)業(yè)部數(shù)據(jù)通信所 馬光星
摘要:本文說(shuō)明了ICMP消息的格式,差錯(cuò)類(lèi)型和返回消息。
關(guān)鍵詞:IPV6,ICMP
1.ICMPV6[1]
IPV6節(jié)點(diǎn)用ICMP(Internet Control Message Protocol)報(bào)告在包處理時(shí)遇到的差錯(cuò)和執(zhí)行另一個(gè)因特網(wǎng)層的功能,如診斷(ICMPV6“ping")。ICMPV6是IPV6不可缺少的部分并必須由每個(gè)IPV6節(jié)點(diǎn)完全實(shí)現(xiàn)。
1.1消息的一般格式
ICMPV6消息分成兩級(jí):差錯(cuò)消息和信息。由消息類(lèi)型字段的高級(jí)比特為0標(biāo)識(shí)差錯(cuò)消息。因此,差錯(cuò)消息的消息類(lèi)型從0到127;信息的類(lèi)型從128到255。
下面是ICMPV6消息的格式:
ICMPV6差錯(cuò)消息:
1.目的地不可到達(dá)
2.包太大
3.超時(shí)
4.參數(shù)有問(wèn)題
ICMPV6信息:
128 返回請(qǐng)求
129 返回答案
每個(gè)ICMPV6消息優(yōu)先于IPV6首部和IPV6擴(kuò)展首部。ICMPV6首部由緊接前面首部的下一首部字段的值58標(biāo)識(shí)ICMPV6首部。ICMPV6消息有下列形式:
類(lèi)型字段表示消息的類(lèi)型。它的值確定其它數(shù)據(jù)的形式。編碼字段取決于消息的類(lèi)型。它用于建立消息的附加等級(jí)。校驗(yàn)和用于檢測(cè)ICMPV6消息和IPV6首部中的數(shù)據(jù)的損壞。
1.2.消息源地址的確定
發(fā)送ICMPV6消息的節(jié)點(diǎn),必須在計(jì)算校驗(yàn)和之前,在IPV6首部中確定IPV6的源和目的地址。如果節(jié)點(diǎn)有一個(gè)以上的獨(dú)播地址,它必須選擇消息的源地址如下:
(a) 如果消息是發(fā)送到節(jié)點(diǎn)獨(dú)播地址之一的響應(yīng)消息,答案的源地址必須與節(jié)點(diǎn)獨(dú)播地址是同一地址。
(b) 如果消息是發(fā)送到節(jié)點(diǎn)的組播或任播組之一的響應(yīng)消息。答案的源地址必須屬于接收包的組播或任播接口上的獨(dú)播地址。
(c) 如果消息是發(fā)送到不屬于該節(jié)點(diǎn)地址的響應(yīng)消息,源地址應(yīng)該屬于在差錯(cuò)診斷中最有幫助的節(jié)點(diǎn)獨(dú)播地址。例如,如果消息是不能成功完成傳送動(dòng)作的響應(yīng)包,源地址應(yīng)該屬于包傳送失敗接口上的獨(dú)播地址。
(d) 否則,必須檢驗(yàn)節(jié)點(diǎn)的路由表,確定用于發(fā)送消息到目的地的接口,獨(dú)播地址屬于必須用于作為消息源地址的接口。
1.3 消息的校驗(yàn)和計(jì)算
校驗(yàn)和為16比特,開(kāi)始用ICMPV6消息的類(lèi)型字段,預(yù)計(jì)用IPV6首部字段的"偽首部"[2] 。在偽首部中下一首部的值是58。為了計(jì)算校驗(yàn)和,校驗(yàn)和字段置0。
1.4 消息處理規(guī)則
在處理ICMPV6消息時(shí),必須觀察下列規(guī)則:
(a) 如果接收到未知類(lèi)型的ICMPV6差錯(cuò)消息,必須傳送到上層。
(b) 如果接收到未知類(lèi)型的ICMPV6信息,必須丟棄它。
(c) 每個(gè)ICMPV6差錯(cuò)消息(類(lèi)型∠128)包括很多IPV6討厭的(請(qǐng)求)包(這些包引起差錯(cuò))將適合不使差錯(cuò)消息超過(guò)最小IPV6的MTU(Maximum Transmission Unit)。
(d) 在那種情況下,要求因特網(wǎng)協(xié)議傳送ICMPV6差錯(cuò)消息到上層處理,上層協(xié)議類(lèi)型從原包提取(包含在ICMPV6差錯(cuò)消息體中)并選擇適合的上層處理差錯(cuò)過(guò)程。如果原包有大量的擴(kuò)展首部,在ICMPV6消息中可能不出現(xiàn)上層協(xié)議類(lèi)型,由于原包的截短滿(mǎn)足最小IPV6 MTU限制。在此情況下,在任何上層處理后,丟棄差錯(cuò)消息。
(e) ICMPV6差錯(cuò)消息不必作為接收的結(jié)果發(fā)送:
(e.1)ICMPV6差錯(cuò)消息或
(e.2)指向IPV6組播地址的包(這個(gè)規(guī)則有兩個(gè)例外:(1)包太大消息,對(duì)IPV6組播,允許路徑MTU發(fā)現(xiàn)和(2)參數(shù)有問(wèn)題消息,編碼2,報(bào)告不能識(shí)別的IPV6選項(xiàng),選項(xiàng)類(lèi)型的最高兩比特置10),或(e.3)作為鏈路層組播發(fā)送的包,(e.2 中的例外也用于此情況),或(e.4)作為鏈路層廣播發(fā)送的包,(e.2 中的例外也用于此情況),或(e.5)包的源地址不能獨(dú)立識(shí)別單個(gè)節(jié)點(diǎn),例如,IPV6未規(guī)定地址,IPV6組播地址或ICMPV6消息發(fā)送者知道的地址是IPV6任播地址。
(f)最后,為了限制帶寬和發(fā)送成本,引起發(fā)送ICMPV6差錯(cuò)消息,IPV6節(jié)點(diǎn)必須限制發(fā)送ICMPV6消息的比率。當(dāng)源發(fā)送差錯(cuò)包流失敗時(shí),這種情況可能出現(xiàn),注意得到的ICMPV6差錯(cuò)消息。實(shí)現(xiàn)比率限制功能的方法很多,例如:
(f.1)基于定時(shí)器,如,限制差錯(cuò)消息傳送到給定源或任意源的比率,最大每次T毫秒。(f.2)基于帶寬,例如,限制從特定接口發(fā)送差錯(cuò)消息占用鏈路帶寬的比率F。節(jié)點(diǎn)一定可以配置限制參數(shù)(例如,在上例中的T或F),用保守的缺省值(例如,T=1秒,非0秒,或F=2%,非100%)。
2.ICMPV6差錯(cuò)消息
2.1.目的地不可到達(dá)消息
IPV6字段:
目的地址
從請(qǐng)求包的源地址字段拷貝。
ICMPV6字段:
類(lèi)型 1
編碼 0--不選擇到達(dá)目的地的路由
1--禁止與目的地通信
2--(未分配)
3--地址不可到達(dá)
4--口不可到達(dá)
不用這個(gè)字段對(duì)于所有的編碼值都不用。必須由發(fā)送者初始化為0和接受者忽略。
說(shuō)明
目的地不可到達(dá)消息應(yīng)該由路由器或原節(jié)點(diǎn)的IPV6層產(chǎn)生,在響應(yīng)中,不是由于擁塞不能傳送包到它的目的地址。(如果,由于擁塞丟棄包,不必產(chǎn)生ICMPV6消息)。如果傳送失敗的理由是在傳送節(jié)點(diǎn)的路由表中沒(méi)有匹配的項(xiàng),編碼字段置0。(注意:只有在節(jié)點(diǎn)的路由表中沒(méi)有保持“缺省路由”時(shí),才能夠發(fā)生這種錯(cuò)誤)。如果傳輸失敗的理由是管理者禁止,例如“防火墻過(guò)濾器”,編碼字段置1。如果傳輸失敗是其他原因,例如,沒(méi)有能力把IPV6目的地址轉(zhuǎn)換為相應(yīng)的鏈路地址或其它類(lèi)型的鏈路問(wèn)題,則編碼字段置3。如果傳送協(xié)議沒(méi)有辦法通知發(fā)送者,傳送協(xié)議(如,UDP)的響應(yīng)包沒(méi)有接收者,目的節(jié)點(diǎn)應(yīng)該發(fā)送編碼為4的目的地不可到達(dá)消息。
上層通知
接收ICMPV6目的地不可到達(dá)消息的節(jié)點(diǎn)必須通知上層處理。
2.2 包太大消息
IPV6字段:
目的地址
從請(qǐng)求包的源地址字段拷貝。
ICMPV6字段:
類(lèi)型2
編碼由發(fā)送者置0和接受者忽略。
MTU下一跳鏈路的最大傳輸單元
說(shuō)明
由于包大于出局鏈路的MTU不能傳送響應(yīng)包,路由器必須發(fā)送包太大消息。在這個(gè)消息中的信息用于作為路徑MTU發(fā)現(xiàn)過(guò)程的部分。發(fā)送包太大消息成為發(fā)送其他ICMPV6差錯(cuò)消息的特例,不象其他消息,用IPV6組播目的地址或鏈路層組播或鏈路層廣播地址發(fā)送接收包的響應(yīng)。
上層協(xié)議通知
進(jìn)來(lái)的包太大消息必須傳到上層處理。
2.3 超時(shí)消息
IPV6字段:
目的地址
從請(qǐng)求包的源地址字段拷貝。
ICMPV6字段
類(lèi)型 3
編碼 0--在傳送中超過(guò)跳數(shù)限制
1--分段重組超時(shí)
不用 這個(gè)字段對(duì)于所有編碼值都不用。由發(fā)送者初始化為0和接收者忽略。
說(shuō)明
如果路由器接收包的跳數(shù)限制是0或路由器減少包的跳數(shù)限制為0,必須丟棄包并發(fā)送編碼為0的ICMPV6超時(shí)消息到包的源。這表示有路由環(huán)或初始跳數(shù)限制值太小。選擇這個(gè)消息的源地址的規(guī)則見(jiàn)1.2節(jié)。
上層通知
進(jìn)來(lái)的超時(shí)消息必須傳送到上層處理。
2.4 參數(shù)有問(wèn)題
IPV6字段:
目的地址
從請(qǐng)求包的源地址字段拷貝。
ICMPV6字段:
類(lèi)型4
編碼0--遇到錯(cuò)誤的首部字段
1--遇到不能識(shí)別的下一首部字段
2--遇到不能識(shí)別的IPV6選項(xiàng)
指針在檢測(cè)差錯(cuò)時(shí)標(biāo)識(shí)請(qǐng)求包內(nèi)字節(jié)的偏移量。
如果差錯(cuò)字段超過(guò)能夠適合的ICMPV6差錯(cuò)消息的最大長(zhǎng)度,指針指向超過(guò)ICMPV6包的末端。
說(shuō)明
如果IPV6節(jié)點(diǎn)處理包時(shí),發(fā)現(xiàn)IPV6首部或擴(kuò)展首部字段有問(wèn)題,如不能完成包的處理,必須丟棄該包并應(yīng)該發(fā)送ICMPV6參數(shù)有問(wèn)題的消息到包的源,指出問(wèn)題的類(lèi)型和位置。在檢測(cè)差錯(cuò)時(shí),指針識(shí)別原包首部的字節(jié)。例如,ICMPV6消息的類(lèi)型字段=4,編碼字段=1和指針字段=40,應(yīng)該表示IPV6擴(kuò)展首部跟著原包的IPV6首部有不能識(shí)別的下一首部字段值。
上層通知
接收ICMPV6消息的節(jié)點(diǎn)必須通知上層處理。
3.ICMPV6信息
3.1 返回請(qǐng)求消息
IPV6字段:
目的地址
任意合法的IPV6地址。
ICMPV6字段:
類(lèi)型128
編碼0
標(biāo)識(shí)符標(biāo)識(shí)符幫助返回答案與這個(gè)返回請(qǐng)求匹配?梢允0。
順序號(hào) 順序號(hào)幫助返回答案與這個(gè)返回請(qǐng)求匹配。可以是0。
數(shù)據(jù)0或多字節(jié)的任意數(shù)據(jù)。
說(shuō)明
每個(gè)節(jié)點(diǎn)必須實(shí)現(xiàn)返回響應(yīng)功能,接收返回請(qǐng)求和發(fā)送相應(yīng)的返回答案。節(jié)點(diǎn)還應(yīng)該實(shí)現(xiàn)應(yīng)用層接口,發(fā)送返回請(qǐng)求和接收返回答案,用于診斷。
上層通知
返回請(qǐng)求消息可以傳送到處理接收ICMPV6消息的層。
3.2 返回答案消息
IPV6字段:
目的地址
從返回請(qǐng)求包的源地址字段拷貝。
ICMPV6字段:
類(lèi)型129
編碼0
標(biāo)識(shí)符標(biāo)識(shí)符來(lái)自返回請(qǐng)求消息。
順序號(hào)順序號(hào)來(lái)自返回請(qǐng)求消息。
數(shù)據(jù)數(shù)據(jù)來(lái)自返回請(qǐng)求消息。
說(shuō)明
每個(gè)節(jié)點(diǎn)必須實(shí)現(xiàn)ICMPV6返回響應(yīng)功能,接收返回請(qǐng)求和發(fā)送相應(yīng)的返回答案。節(jié)點(diǎn)還應(yīng)該實(shí)現(xiàn)應(yīng)用層接口,發(fā)送返回請(qǐng)求和接收返回答案,用于診斷。在響應(yīng)中發(fā)送返回答案的源地址一定是返回請(qǐng)求消息的目的地址。在響應(yīng)中發(fā)送返回答案到發(fā)送返回請(qǐng)求消息的IPV6組播地址。答案的源地址一定屬于接收組播返回請(qǐng)求消息接口上的獨(dú)播地址。在ICMPV6返回請(qǐng)求消息中接收的數(shù)據(jù)一定全部和不修改的在ICMPV6返回答案消息中返回。
上層通知
返回答案消息一定傳送到產(chǎn)生返回請(qǐng)求消息的層處理。它可能傳送到不產(chǎn)生返回請(qǐng)求消息的層處理。
4.安全考慮
4.1 ICMPV6消息的認(rèn)證和加密
用IP認(rèn)證首部能夠認(rèn)證ICMP協(xié)議的包交換。如果,對(duì)目的地址,使用有IP認(rèn)證首部的安全關(guān)聯(lián),節(jié)點(diǎn)應(yīng)該使發(fā)送的ICMP消息包括認(rèn)證首部?梢酝ㄟ^(guò)手工配置或密鑰管理協(xié)議的操作建立安全關(guān)聯(lián)。為了保證正確性必須檢驗(yàn)在ICMP包中接收的認(rèn)證首部和必須忽略不正確的認(rèn)證包并丟棄。系統(tǒng)管理員可以配置節(jié)點(diǎn)忽視沒(méi)有使用認(rèn)證首部或封裝安全凈載荷認(rèn)證的任何ICMP消息。應(yīng)該默認(rèn)允許未認(rèn)證的消息。IP安全結(jié)構(gòu)和IP封裝安全凈載荷文件專(zhuān)用于機(jī)密性問(wèn)題[3]。
4.2 對(duì)ICMP的攻擊
ICMP消息可能受到各種攻擊。下面簡(jiǎn)要地討論這種攻擊和他們的防護(hù)如下:
(1)ICMP消息可能受到作用,企圖使接收器相信非原消息源來(lái)的消息。對(duì)ICMP消息,使用IPV6認(rèn)證機(jī)理能夠防止這種攻擊。
(2)ICMP消息可能受到作用,企圖使消息和答案到達(dá)非原消息要到達(dá)的目的地址。ICMP校驗(yàn)和計(jì)算提供保護(hù)機(jī)理,防止惡意破壞者改變載著消息的IP包的源和目的地址,用認(rèn)證或加密ICMP消息能防止改變和保護(hù)校驗(yàn)和字段[4]。
(3)ICMP消息的消息字段或凈載荷可能受到改變。ICMP消息的認(rèn)證或加密能防止改變。
參考文獻(xiàn)
[1]A. Cnta and S. Deering, "Internet Control Message Protocol(ICMP)for The Internet Protocol Version 6(IPV6) Specification", RFC 2463, December 1998.
{2} Deering, S. and R. Hinden, "Internet Protocol, Version 6,(IPV6) Specification" , RFC 2460, December 1998.
[3] Kent, S. and R. Atkinson, "IP Authentication Header ",RFC 2402,November 1998.
[4] Kent, S. and R.Atkinson, "Ip Encapsulating Security Protocol (ESP)" ,RFC 2406, November 1998.
摘自《網(wǎng)絡(luò)通信世界》