沈建苗
在許多人看來,IPv4就如同一條穿舊而彌顯珍貴的牛仔褲。膝蓋處縫縫補(bǔ)補(bǔ),褲腳邊磨損嚴(yán)重,但穿上去多少還合身。扔掉的話麻煩多多:上商場,試穿一大堆新褲子,洗五六次后才會覺得很舒適。誰愿意受這番折騰?
事實上,因特網(wǎng)在發(fā)展壯大。除了路由器、服務(wù)器、臺式機(jī)和便攜式電腦紛紛上網(wǎng)外,PDA、蜂窩電話、復(fù)印機(jī)和汽車等設(shè)備也嚷著要IP地址。盡管烤箱具備上網(wǎng)功能這一完全不切實際的預(yù)言未能靈驗,但最終烤箱上的按鈕會使用IPv4的32位地址空間。
不過地址稀缺僅僅是采用下一代IP(IPv6)的理由之一。該標(biāo)準(zhǔn)的設(shè)計師竭力宣傳IPv6的其它優(yōu)點(diǎn):提高路由效率、簡化管理、有機(jī)會使這種協(xié)議可以適應(yīng)現(xiàn)代全球通信的新需求。
本文重在介紹下一代IP的基本知識,介紹了IPv6包的形狀及采用IPv4 和IPv6的設(shè)備與網(wǎng)絡(luò)如何協(xié)同工作,還簡要描述了IPv6新的安全特性。
地址數(shù)量大大增加
IPv4采用32位地址空間,可以提供約42億個地址。雖然數(shù)目巨大,但該協(xié)議的開發(fā)人員當(dāng)時并未料到因特網(wǎng)發(fā)展會如此迅速。雖說網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)和無類域間路由(CIDR)等技術(shù)會使IPv4的使用壽命延長幾年,但遲早IPv4會跟不上因特網(wǎng)的發(fā)展需求。
IPv6的128位地址空間有望帶來大得常人無法想象的空間。那么究竟有多少個地址呢?大約3.4x1038個。如果說這過于抽象,不妨這么去想:IPv6在每平方米地球表面上提供的地址數(shù)多達(dá)6.5x1023,即655,570,793,348,866,943,898,599個。
除了地址數(shù)量多得多外,IPv6還棄用了IPv4采用的熟悉的“點(diǎn)分四元組”格式(如193.10.10.154)。相反,IPv6采用十六進(jìn)制符號,以冒號取代了圓點(diǎn)。FEDC:BA98:7654:3210:FEDC:BA98:7654:3210地址結(jié)構(gòu)就是一個虛假的例子。
報頭結(jié)構(gòu)
雖然IPv6報頭的字節(jié)長度兩倍于IPv6報頭(40個字節(jié)與20個字節(jié)),但I(xiàn)Pv6擁有簡化的報頭結(jié)構(gòu)。IPv6報頭有8個字段,IPv4則有14個。IPv6丟棄及改用了IPv4報頭字段中的幾個,從而使包處理更有效率。
下面比較一下兩種報頭。Version(版本)字段在兩種協(xié)議中沒有變化。IPv6丟棄了IPv4的Internet Header Length(因特網(wǎng)報頭長度)、Type of Service(服務(wù)類型)、Identification(識別)、Flags(標(biāo)志)、Fragment Offset(分片偏移量)和Header Checksum(報頭校驗和)字段。Total Lenght(總長度)、Time to Live(生存時間)和Protocol(協(xié)議)字段在IPv6中有了新名字,功能稍微進(jìn)行了重新定義。IPv4中的Option(選項)字段已從報頭中消失,改為Extension(擴(kuò)展)功能。最后,IPv6加入了兩個新字段:Traffic Class(流量類別)和Flow Label(流標(biāo)記)。分別介紹一下IPv6包的每個報頭字段。
Version:Version字段的長度仍是4位,它指明了協(xié)議版本號。
Traffic Class:這個8位字段可以為包賦予不同的類別或優(yōu)先級。它類似IPv4的Type of Service字段,為差異化服務(wù)留有余地。
Flow Label:Flow Label字段是IPv6的新增字段。源節(jié)點(diǎn)使用這個20位字段,為特定序列的包請求特殊處理(效果好于盡力轉(zhuǎn)發(fā))。實時數(shù)據(jù)傳輸如語音和視頻可以使用Flow Label字段以確保QoS。
Payload Length:這個16位字段表明了有效載荷長度。與IPv4包中的Total Length字段不同,這個字段的值并未算上IPv6的40位報頭。計算的只是報頭后面的擴(kuò)展和數(shù)據(jù)部分的長度。因為該字段長16位,所以能表示高達(dá)64KB的數(shù)據(jù)有效載荷。如果有效載荷更大,則由超大包(jumbogram)擴(kuò)展部分表示。
Next Header:這個8位字段類似IPv4中的Protocol字段,但有些差異。在IPv4包中,傳輸層報頭如TCP或UDP始終跟在IP報頭后面。在IPv6中,擴(kuò)展部分可以插在IP報頭和傳輸層報頭當(dāng)中。這類擴(kuò)展部分包括驗證、加密和分片功能。Next Header字段表明了傳輸層報頭或擴(kuò)展部分是否跟在IPv6報頭后面。
Hop Limit:這個8位代替了IPv4中的TTL字段。它在經(jīng)過規(guī)定數(shù)量的路由段后會將包丟棄,從而防止了包被永遠(yuǎn)轉(zhuǎn)發(fā)。包經(jīng)過一個路由器,Hop Limit字段的值就減少一個。IPv4使用了時值(time value),每經(jīng)過一個路由段就從TTL字段減去一秒。IPv6用段值(hop value)換掉了時值。
Source Address:該字段指明了始發(fā)主機(jī)的起始地址,其長度為128位。
Destination Address:該字段指明了傳輸信號的目標(biāo)地址,其長度為128位。
網(wǎng)絡(luò)人員可能會驚訝地發(fā)現(xiàn)校驗和與分片字段從IPv6的報頭當(dāng)中消失了。丟棄包的報頭校驗和是為了提高路由效率。雖然包報頭仍有可能出現(xiàn)錯誤,新協(xié)議的設(shè)計人員卻認(rèn)為這種風(fēng)險可以接受,尤其是考慮到IP層的上下層:數(shù)據(jù)鏈路層和傳輸層會檢查錯誤。
至于分片,IPv6確實允許對包進(jìn)行分割,但這過程在報頭的擴(kuò)展部分而不是報頭本身進(jìn)行。此外,IPv6包只能由源節(jié)點(diǎn)進(jìn)行分割、目標(biāo)節(jié)點(diǎn)進(jìn)行重新組裝:不允許路由器介入進(jìn)來對包進(jìn)行分割或重新組裝。這種分片特性的目的在于降低傳輸中的處理開銷,而且假定如今網(wǎng)絡(luò)的幀大小足夠大,大多數(shù)包不需要分片。
如果非要分割I(lǐng)Pv6包,源節(jié)點(diǎn)就會確定每條鏈路的最大傳輸單元(MTU)。一種辦法就是,向目標(biāo)地址發(fā)送一個測試包。如果測試包對某條鏈路來說太大,鏈路就返還一個因特網(wǎng)控制消息協(xié)議(ICMP)消息給源節(jié)點(diǎn),源節(jié)點(diǎn)就相應(yīng)減小包大小。
實現(xiàn)分片及其它選項功能的擴(kuò)展機(jī)制是IPv6重新設(shè)計的一個重要特性。它取代了IPv4的Options字段,這就增強(qiáng)了IPv4包的安全功能,并且豐富了源路由選擇。
設(shè)計師不是把這種增強(qiáng)的功能添加到IPv6報頭當(dāng)中,而是設(shè)計了可插在IP報頭和較高層協(xié)議報頭之間的擴(kuò)展部分。這使沒有擴(kuò)展部分的包處理起來更快,還提供了一系列可擴(kuò)充選項,如加密、驗證、分片、源路由、段和目標(biāo)選項等。正如前文所述,這些擴(kuò)展部分計算在包總的有效載荷長度里面。
IPv4和IPv6的集成
雖然人們希望IPv4一下子變成IPv6,但兩種協(xié)議必須協(xié)同工作,就算IPv6完全取代IPv4,那可能也是多年以后的事了。因而,有人提出了過渡方法以確保IPv4包不受制于IPv6設(shè)備,反之亦然。這些方法包括雙堆棧和隧道技術(shù)。
雙堆棧方法很簡單。新的IPv6設(shè)備能夠與IPv4向后兼容,而IPv4設(shè)備可以用IPv4和IPv6協(xié)議棧進(jìn)行編程,以便合適地處理各自的包。采用雙堆棧的主機(jī)能收發(fā)IPv4和IPv6數(shù)據(jù),采用雙堆棧的路由器則可以轉(zhuǎn)發(fā)任何一種包。
隧道方式通過IPv4網(wǎng)絡(luò)在兩個IPv6域之間傳送包。為此,雙堆棧節(jié)點(diǎn)利用IPv4報頭封裝IPv6包。然后該封裝包通過IPv4網(wǎng)絡(luò)(隧道)進(jìn)行路由,直至到達(dá)第二個IPv6域。第二個節(jié)點(diǎn)去掉IPv4報頭后,對包進(jìn)行相應(yīng)處理。
隧道的配置分手工和自動方式。手工配置需要網(wǎng)絡(luò)管理員在隧道端點(diǎn)定義IPv4到IPv6的地址映射。雖然IPv6的128地址通?梢杂糜谒淼廊魏我欢,但隧道入口點(diǎn)的路由器必須手工配置,限定哪些IPv4地址可以通過隧道。
自動配置使用與IPv4兼容的地址:在32位地址的基礎(chǔ)上添加0以湊足128位。如果IPv6節(jié)點(diǎn)使用兼容地址,隧道入口的路由器只須去掉多余的0,就可以顯示真實的IPv4地址。一旦包通過隧道,隧道出口的節(jié)點(diǎn)就會去掉IPv4報頭,以顯示真實的IPv6地址。
保護(hù)措施
IP數(shù)據(jù)報有可能被截取,數(shù)據(jù)也有可能被讀取及篡改。因而,IPSec通過驗證和加密以保護(hù)IP包。因為IPSec是在IPv4問世后一段時間開發(fā)的,支持IPSec的功能就要結(jié)合到IPv4包內(nèi)。相比之下,借助于擴(kuò)展報頭這種設(shè)計,IPv6能夠支持IPSec。
驗證報頭擴(kuò)展部分能夠幫助管理員證實:包的確來自報頭內(nèi)的源地址。這應(yīng)該有助于防止地址欺騙,地址欺騙是指這種技術(shù):攻擊者偽造源地址,使包看上去讓人以為它來自合法或可信地址。
如果接收者沒有相應(yīng)的密鑰還原數(shù)據(jù),名為封裝安全有效載荷(ESP)服務(wù)的加密擴(kuò)展部分就認(rèn)為包的有效載荷數(shù)據(jù)無效。加密為保密和數(shù)據(jù)驗證提供了一種措施。管理員可以選擇只對包的傳輸和數(shù)據(jù)有效載荷或者整個包(包括報頭和擴(kuò)展部分)進(jìn)行加密。如果整個包進(jìn)行了加密,就必須給包添加另外的未加密報頭,以便能夠到達(dá)目的地。
摘自《賽迪網(wǎng)》