1 前言
隨著互聯(lián)網(wǎng)用戶的不斷增多以及他們對(duì)網(wǎng)絡(luò)服務(wù)要求的不斷提高,IPv4固有的一些缺陷使得它已經(jīng)不能滿足這種日漸增長(zhǎng)的需要。IPv6正是為解決這個(gè)問(wèn)題而出現(xiàn)的,同時(shí)它的新特性為下一代互聯(lián)網(wǎng)的應(yīng)用提供了更好的支持。
互聯(lián)網(wǎng)的普及使IPv4向IPv6的過(guò)渡不可能一蹴而就,它需要很長(zhǎng)一段時(shí)間才能完成。IPv6也不僅僅是對(duì)IPv4的簡(jiǎn)單升級(jí),因?yàn)轭^部特征和配址機(jī)制的不同,這兩種協(xié)議是互不兼容的。因此,IPv4如何漸近、平滑的過(guò)渡到IPv6是必須解決的一個(gè)問(wèn)題。
IETF的Ngtrans工作組提出了從IPv4過(guò)渡到IPv6的3種主要遷移機(jī)制:雙協(xié)議、協(xié)議翻譯A、隧道。
2 雙協(xié)議
圖1 雙協(xié)議(棧)節(jié)點(diǎn)的網(wǎng)絡(luò)分層模型
如圖1(a)所示,雙協(xié)議節(jié)點(diǎn)(包括主機(jī)和路由器)同時(shí)實(shí)現(xiàn)了IPv4和IPv6協(xié)議,可以和IPv4或IPv6主機(jī)建立通信。主機(jī)根據(jù)目的IP地址來(lái)決定采用IPv4還是IPv6協(xié)議發(fā)送或接收數(shù)據(jù)包。在理想的網(wǎng)絡(luò)分層模型中,傳輸層和網(wǎng)絡(luò)層是獨(dú)立的,IP層的改變并不會(huì)影響傳輸層協(xié)議的運(yùn)行,但實(shí)際上TCP和UDP協(xié)議在校驗(yàn)碼計(jì)算中都采用包含了源和目的IP地址的偽頭部,所以在LINUX、WINDOWS等操作系統(tǒng)的IPv6協(xié)議實(shí)現(xiàn)中,作為IPv6上層協(xié)議的TCP/UDP代碼是獨(dú)立于IPv4上的TCP/UDP而實(shí)現(xiàn)的,如圖1(b)所示,因此稱之為雙棧節(jié)點(diǎn)更合適。
目前雙棧是運(yùn)行最廣泛的遷移機(jī)制。不過(guò)雙棧只允許相同IP版本之間的通信,即IPv4和IPv4之間的通信,或IPv6和IPv6之間的通信。不同版本IP之間的通信需要通過(guò)協(xié)議翻譯來(lái)完成。
在IPv4到IPv6的過(guò)渡初期,絕大多數(shù)終端或路由器都是純IPv4節(jié)點(diǎn)(只實(shí)現(xiàn)了IPv4協(xié)議棧的節(jié)點(diǎn))或雙棧節(jié)點(diǎn),在過(guò)渡中期,雙棧節(jié)點(diǎn)或純IPv6節(jié)點(diǎn)將是主要的通信實(shí)體,到過(guò)渡后期,所有接入互聯(lián)網(wǎng)的設(shè)備基本上都是純IPv6節(jié)點(diǎn)(只實(shí)現(xiàn)了IPv6協(xié)議棧的節(jié)點(diǎn))。
3 協(xié)議翻譯
協(xié)議翻譯用來(lái)將IPv4(IPv6)數(shù)據(jù)包轉(zhuǎn)換成IPv6(IPv4)數(shù)據(jù)包,這種轉(zhuǎn)換對(duì)上層協(xié)議是透明的。利用協(xié)議翻譯可以在純IPv6節(jié)點(diǎn)和純IPv4節(jié)點(diǎn)之間建立通信,而不需要修改應(yīng)用軟件。但在IPv4數(shù)據(jù)包轉(zhuǎn)換成IPv6數(shù)據(jù)包的過(guò)程中,由于IPv6頭部含有擴(kuò)展頭部以及諸如流標(biāo)簽等新字段而引起的不適當(dāng)?shù)姆g,可能會(huì)導(dǎo)致傳輸性能的下降。另外,協(xié)議翻譯如NAT一樣會(huì)潛在的破壞端到端的服務(wù)(比如IPSec)。
Bump-In-the-Stack(BIS)和Bump-In-the-API(BIA)機(jī)制可以使IPv4主機(jī)上的應(yīng)用軟件和純IPv6主機(jī)進(jìn)行通信,當(dāng)應(yīng)用軟件向純IPv6主機(jī)發(fā)送數(shù)據(jù)包時(shí),IPv6地址被映射成一個(gè)臨時(shí)的IPv4地址,然后根據(jù)SIIT(Stateless IP/ICMP)將IPv4數(shù)據(jù)包轉(zhuǎn)換成IPv6數(shù)據(jù)包。協(xié)議轉(zhuǎn)換是一個(gè)十分消耗資源的過(guò)程,考慮到擴(kuò)展性的問(wèn)題,協(xié)議翻譯器應(yīng)該處于網(wǎng)絡(luò)邊緣的位置。目前最有名的協(xié)議翻譯機(jī)制是NAT-PT(Network Address Translator-Protocol Translator)。
圖2 純IPv6主機(jī)和純IPv4主機(jī)通過(guò)NAT-PT通信
NAT-PT為IPv6主機(jī)提供臨時(shí)使用的IPv4地址,并根據(jù)SIIT對(duì)IPv4數(shù)據(jù)包和IPv6數(shù)據(jù)包進(jìn)行相互轉(zhuǎn)換,從而解決純IPv6主機(jī)和純IPv4主機(jī)之間的通信問(wèn)題。如圖2所示,NAT-PT維護(hù)一個(gè)IPv4地址池,這些地址供IPv6主機(jī)和IPv4主機(jī)通信時(shí)臨時(shí)使用。IPv6主機(jī)首先通過(guò)DNS獲得通信對(duì)方的IPv6地址,圖2中為PREFIX:202.106.185.250,其中PREFIX是NAT-PT所在IPv6域規(guī)定的96位前綴。當(dāng)NAT-PT收到來(lái)自IPv6主機(jī)的數(shù)據(jù)包后,根據(jù)SIIT將它轉(zhuǎn)換成IPv4數(shù)據(jù)包,目的地址轉(zhuǎn)換成202.106.185.250,源地址轉(zhuǎn)換成159.226.39.110,該地址取自NAT-PT維護(hù)的IPv4地址池。在通信過(guò)程中,NAT-PT需要維護(hù)IPv6地址(2001:250:f006:1::8)和轉(zhuǎn)換后的IPv4地址(159.226.39.110)之間的映射關(guān)系,以便對(duì)返回的IPv4數(shù)據(jù)包進(jìn)行反向轉(zhuǎn)換。
NAT-PT還可以支持應(yīng)用層網(wǎng)關(guān)的功能,對(duì)IPv4或IPv6的DNS請(qǐng)求和應(yīng)答包以及FTP數(shù)據(jù)包進(jìn)行轉(zhuǎn)換。由于IPv4地址的匱乏,NAT廣泛運(yùn)行于目前的IPv4互聯(lián)網(wǎng),將NAT升級(jí)成NAT-PT,使得IPv4和IPv6網(wǎng)絡(luò)互連,可以實(shí)現(xiàn)IPv4向IPv6的平滑過(guò)渡。
4 隧道
被不兼容的網(wǎng)絡(luò)分離的兩個(gè)相同版本IP主機(jī)之間的通信可以通過(guò)隧道方式進(jìn)行。在過(guò)渡前期,IPv4網(wǎng)絡(luò)占主導(dǎo)地位,IPv6網(wǎng)絡(luò)好比是整個(gè)IPv4汪洋中的孤立島嶼,這些島嶼之間的通信可采用IPv6-over-IPv4隧道來(lái)實(shí)現(xiàn)。過(guò)渡后期,IPv6網(wǎng)站占統(tǒng)治地位,類似地,各個(gè)孤立IPv4島嶼之間的通信可采用IPv4-over-IPv6隧道來(lái)實(shí)現(xiàn)。
圖3 IPv6-over-IPv4隧道
隧道的實(shí)質(zhì)就是對(duì)數(shù)據(jù)包的封裝,如圖3所示,IPv6-over-IPv4(IPv4-over-IPv6)隧道就是將IPv6(IPv4)分組封裝在IPv4(IPv6)分組中,利用已有的IPv4(IPv6)網(wǎng)絡(luò)進(jìn)行傳輸,從而解決IPv6(IPv4)站點(diǎn)或主機(jī)之間相互通信的問(wèn)題。由于隧道的端節(jié)點(diǎn)需要對(duì)IPv6數(shù)據(jù)包進(jìn)行封裝、對(duì)IPv4數(shù)據(jù)包進(jìn)行解封裝,因此它必須是雙棧節(jié)點(diǎn)。
在IPv6-over-IPv4數(shù)據(jù)包的IPv4頭部,其協(xié)議類型字段取值41,表示這是一個(gè)封裝了IPv6報(bào)文的IPv4數(shù)據(jù)包。源和目的地址字段分別是隧道首尾端節(jié)點(diǎn)的IPv4地址,如果是配置隧道,那么目的IPv4地址是由隧道首節(jié)點(diǎn)的配置信息決定的;如果是自動(dòng)隧道,那么目的IPv4地址通常是目的IPv6地址中嵌套的IPv4地址。
一般情況下,路由器和路由器之間的隧道通常是配置隧道,隧道接口的配置參數(shù)即隧道兩端的IPv4地址是手工配置的,目前6Bone網(wǎng)絡(luò)采用的隧道大多是配置隧道,配置隧道的不足之處在于它的建立通常不符合IPv6路由體系是分層、簡(jiǎn)化的指導(dǎo)思想,因此導(dǎo)致路由效率的低下,而且它的維護(hù)和運(yùn)行都有一定的復(fù)雜性。自動(dòng)隧道不需要手工配置,它的端節(jié)點(diǎn)IPv4地址可從數(shù)據(jù)包的IPv6地址中獲得,因此自動(dòng)隧道的建立和維護(hù)相對(duì)簡(jiǎn)單,也更靈活。
針對(duì)不同的應(yīng)用場(chǎng)景,目前提出了多種隧道技術(shù),如6to4、ISATAP、Teredo、6over4、DSTM、Tunnel Broker等。
(1) 6to4
6to4用于連接被IPv4網(wǎng)絡(luò)分離的各個(gè)孤立的IPv6站點(diǎn),隧道的端點(diǎn)是孤立IPv6站點(diǎn)的出口路由器。
圖4 IPv6站點(diǎn)通過(guò)6to4隧道通信
6to4隧道協(xié)議定義了3種通信實(shí)體:6to4主機(jī)、6to4路由器、6to4中繼路由器。6to4主機(jī)指孤立IPv6站點(diǎn)中的純IPv6主機(jī),6to4路由器指IPv6站點(diǎn)中的出口路由器。6to4主機(jī)使用全球地址前綴2002:AABB:CCDD::/48,其中AABB:CCDD是出口路由器的IPv4地址(該地址必須是公有地址)的十六進(jìn)制表示,它作為全球IPv6地址中的NLA(Next Level Aggregator)ID。完整的6to4地址是2002:AABB:CCDD:SLA (Site Level Aggregator) ID:Interface ID。
以圖4為例,6to4主機(jī)之間的通信過(guò)程如下:站點(diǎn)1的6to4主機(jī)在獲得站點(diǎn)2的6to4主機(jī)地址后向其發(fā)送數(shù)據(jù)包,該數(shù)據(jù)包被路由至本站點(diǎn)的6to4路由器A,路由器A發(fā)現(xiàn)數(shù)據(jù)包的目的地址含有6to4前綴2002,于是從數(shù)據(jù)包的IPv6源地址和目的地址中提出隧道兩端的IPv4地址(也就是IPv6地址中的NLA部分),然后用IPv4頭部封裝數(shù)據(jù)包,封裝后的報(bào)文其目的地址為站點(diǎn)2的6to4路由器B的IPv4地址,從而建立一條從A到B的隧道。作為隧道端點(diǎn)的路由器B收到數(shù)據(jù)包后對(duì)其進(jìn)行解封裝,去掉IPv4頭部,得到一個(gè)IPv6數(shù)據(jù)包,然后發(fā)送,直到數(shù)據(jù)包最后到達(dá)站點(diǎn)2的6to4主機(jī)。
6to4中繼路由器通常位于IPv6主干網(wǎng),除了具有6to4路由器的功能外,它還負(fù)責(zé)向IPv6主干網(wǎng)宣告它對(duì)其他6to4站點(diǎn)的可達(dá)性,同時(shí)向其他6to4路由器宣告它對(duì)主干網(wǎng)內(nèi)各站點(diǎn)的可達(dá)性。6to4中繼路由器用于6to4主機(jī)和一般IPv6主機(jī)之間的通信,以圖4為例,站點(diǎn)1的6to4主機(jī)獲得主干網(wǎng)上某個(gè)IPv6主機(jī)的地址后向其發(fā)送數(shù)據(jù)包,該數(shù)據(jù)包被路由至本站點(diǎn)的6to4路由器A,路由器A通過(guò)查找路由表得到下一跳的IPv6地址為中繼路由器C的6to4地址,從該地址從提出C的IPv4地址,以此作為目的IPv4地址對(duì)數(shù)據(jù)包封裝,建立一條從A到C的隧道。C收到數(shù)據(jù)包后解封裝,得到一個(gè)IPv6數(shù)據(jù)包并發(fā)往主干網(wǎng),直至最終到達(dá)目的IPv6主機(jī)。
6to4隧道容易管理,所以是目前最重要的自動(dòng)隧道技術(shù)之一。而且它根據(jù)IPv4地址自動(dòng)能產(chǎn)生一個(gè)48位的前綴,所以不必向互聯(lián)網(wǎng)注冊(cè)機(jī)構(gòu)申請(qǐng)IPv6地址就可運(yùn)行。與此同時(shí),這種配址方式也導(dǎo)致了對(duì)IPv6路由體系層次化的破壞。
(2) ISATAP
ISATAP(Intra-Site Automatic Tunnel Addressing Protocol)意為域內(nèi)自動(dòng)隧道配址協(xié)議,顧名思義,它指某個(gè)IPv4域內(nèi)的雙棧主機(jī)相互之間可通過(guò)該隧道進(jìn)行通信。
圖5 IPv4網(wǎng)絡(luò)上的雙棧主機(jī)通過(guò)ISATAP隧道通信
如圖5所示,雙棧主機(jī)首先向ISATAP服務(wù)器發(fā)送路由請(qǐng)求,得到一個(gè)64位的IPv6地址前綴,再加上64位的接口標(biāo)識(shí)符::0:5EFE:a.b.c.d,構(gòu)成一個(gè)ISATAP地址,這里的a.b.c.d是雙棧主機(jī)的IPv4單播地址,該地址可以是公有的,也可以是私有的。雙棧主機(jī)配置了ISATAP地址后,就成為一個(gè)ISATAP客戶機(jī),可以和IPv4域內(nèi)的其他ISATAP客戶機(jī)進(jìn)行通信了。通信過(guò)程如下:雙棧主機(jī)1獲得雙棧主機(jī)2的ISATAP地址后向其發(fā)送數(shù)據(jù)包,根據(jù)目的地址該數(shù)據(jù)包被交給ISATAP接口進(jìn)行發(fā)送,ISATAP從數(shù)據(jù)包的IPv6源地址和目的地址從提出相應(yīng)的IPv4源和目的地址,并對(duì)該數(shù)據(jù)包用IPv4頭部進(jìn)行封裝,封裝后數(shù)據(jù)包的目的地址為雙棧主機(jī)2的IPv4地址,這樣就建立了一條從主機(jī)1到主機(jī)2的隧道。數(shù)據(jù)包最后到達(dá)主機(jī)2,主機(jī)2對(duì)其解封裝,得到一個(gè)IPv6數(shù)據(jù)包。
ISATAP隧道的優(yōu)點(diǎn)是它不要求隧道端節(jié)點(diǎn)必須具有全球唯一的IPv4地址,因此可用于內(nèi)部私有網(wǎng)中各雙棧主機(jī)之間進(jìn)行IPv6通信。和6to4隧道技術(shù)相結(jié)合,還可以使內(nèi)部網(wǎng)的雙棧主機(jī)接入IPv6主干網(wǎng)。
(3) Teredo
位于NAT后的IPv6節(jié)點(diǎn)采用一般的隧道技術(shù)(IPv6-over-IPv4)是不能和NAT域外的IPv6節(jié)點(diǎn)進(jìn)行通信的,因?yàn)槟壳暗腘AT一般不支持協(xié)議類型為41(也就是IPv6-over-IPv4)的數(shù)據(jù)包。Teredo隧道有別于一般的IPv6-over-IPv4隧道,確切的講,它是一種IPv6-over-UDP隧道。數(shù)據(jù)包通過(guò)被封裝在UDP載荷中的方式穿過(guò)NAT,這是Teredo隧道的基本思想。
Teredo協(xié)議定義了4中通信實(shí)體: Client、Server、Relay、Host-specific Relay。其中Client指位于NAT域內(nèi)的雙棧主機(jī),Server負(fù)責(zé)為Client分配Teredo地址,Relay負(fù)責(zé)轉(zhuǎn)發(fā)Client和一般IPv6節(jié)點(diǎn)通信時(shí)的數(shù)據(jù)包,Host-specific Relay指不通過(guò)Relay可直接和Client進(jìn)行通信的IPv6主機(jī)。這些通信實(shí)體都同時(shí)支持IPv6/IPv4協(xié)議。Teredo還為Client之間的通信進(jìn)行了優(yōu)化,可大幅度提高傳輸性能。
Teredo可使NAT域內(nèi)的IPv6節(jié)點(diǎn)獲得全球性的IPv6連接,在因IPv4地址匱乏而廣泛運(yùn)行NAT的地區(qū)尤其是在我國(guó),Teredo隧道無(wú)疑具有較好的應(yīng)用前景。但Teredo的運(yùn)行需要Relay的支持,并且它不支持隧道中間存在Symmetric NAT,Teredo地址采用規(guī)定格式的前綴也不符合IPv6路由分等級(jí)的思想,這些不足在一定程度上也將影響Teredo的部署。
(4) 6over4
6over4是一種IPv4組播隧道機(jī)制,通過(guò)將IPv6數(shù)據(jù)包封裝在IPv4中的方式連接互相分離的IPv6主機(jī)。6over4主機(jī)的IPv6地址由64位的單播地址前綴和規(guī)定格式的64位接口標(biāo)識(shí)符::AABB:CCDD組成,其中AABB:CCDD是其IPv4地址a.b.c.d的十六進(jìn)制表示。6over4將IPv4網(wǎng)絡(luò)當(dāng)做具有組播功能的一條鏈路,通過(guò)IPv6組播地址和IPv4組播地址的映射關(guān)系實(shí)現(xiàn)IPv6協(xié)議的鄰居發(fā)現(xiàn)功能,以此,它要求IPv4網(wǎng)絡(luò)支持組播功能。實(shí)際網(wǎng)絡(luò)很少支持組播功能,所以6over4極少使用。
(5) DSTM
如果一個(gè)雙棧主機(jī)沒(méi)有配置IPv4地址,但想和另一個(gè)IPv4主機(jī)通信的話,可以采用DSTM也就是雙棧轉(zhuǎn)換機(jī)制來(lái)實(shí)現(xiàn)。雙棧主機(jī)首先向DSTM服務(wù)器申請(qǐng)得到一個(gè)臨時(shí)的IPv4地址和DSTM邊緣路由器的地址,然后IPv4數(shù)據(jù)包被封裝在IPv6載荷中進(jìn)行傳輸,所以它是一種IPv4-over-IPv6隧道。在過(guò)渡后期,IPv6網(wǎng)絡(luò)占據(jù)主導(dǎo)地位,IPv4網(wǎng)絡(luò)反過(guò)來(lái)成為IPv6網(wǎng)路汪洋中孤立的小島,當(dāng)IPv6主機(jī)想訪問(wèn)IPv4資源的時(shí)候,DSTM將發(fā)揮作用。
(6) Tunnel Broker
Tennel Broker也就是隧道代理相當(dāng)于一個(gè)虛擬的IPv6服務(wù)提供商,它通過(guò)IPv6-over-IPv4隧道的方式為IPv4網(wǎng)絡(luò)中的雙棧主機(jī)提供全球性的IPv6連接。隧道代理通過(guò)web方式為用戶分配IPv6地址、建立隧道以提供和其他IPv6站點(diǎn)之間的通信。目前已有不少提供隧道代理的網(wǎng)站。隧道代理的特點(diǎn)是靈活、可操作性強(qiáng),針對(duì)不同用戶可提供不同的隧道配置。