烽火網(wǎng)絡(luò)公司 熊 英
隨著Internet的規(guī)模以近乎于指數(shù)的增長(zhǎng),IPv4的地址空間面臨即將耗盡的危險(xiǎn)。40億個(gè)IPv4的地址已經(jīng)用掉了3/4,另外,Internet早期由于缺乏規(guī)劃,造成了IP地址分配“貧富不均”的現(xiàn)象,少數(shù)團(tuán)體與單位占用了許多A類地址,如MIT與AT&T就各自占用了1600萬個(gè)IP地址,由此浪費(fèi)了大量的IP地址,后來的大部分單位與公司就只能申請(qǐng)余下的C類地址,特別是像中國(guó)與日本這樣需要大量IP地址卻得不到足夠多的地址的國(guó)家更是如此。為此,IPv6將IP地址的長(zhǎng)度由32個(gè)比特位擴(kuò)展到128個(gè)比特位,將IPv6的地址空間擴(kuò)展為3.4×1038個(gè),屆時(shí)地球上每個(gè)人可分配到1.8×1019 個(gè)IP地址。促使推廣IPv6的另一個(gè)原因是新的應(yīng)用對(duì)Internet提出了更高的要求,需要Internet提供更復(fù)雜的尋址與路由能力,特別是下一代移動(dòng)數(shù)字電話對(duì)Internet提出了更高的要求。需要指出的是,目前的IPv6還不是最后的標(biāo)準(zhǔn),即使是將來采用IPv6標(biāo)準(zhǔn)時(shí),也不會(huì)馬上棄用IPv4。由于從IPv4向IPv6的過渡需要一個(gè)相當(dāng)長(zhǎng)的過程,在此期間,必須保證IPv4和IPv6具有互操作性。目前業(yè)界普遍認(rèn)為,支持IPv4到IPv6過渡模式主要有三種,即:
· 網(wǎng)絡(luò)單元和移動(dòng)終端的IPv4 / IPv6雙棧;
· 自動(dòng)或結(jié)構(gòu)配置隧道模式;
· 網(wǎng)絡(luò)中設(shè)置IPv4到IPv6協(xié)議轉(zhuǎn)換器
其中在網(wǎng)絡(luò)中設(shè)置代溝協(xié)議轉(zhuǎn)換器是最簡(jiǎn)單便捷的IPv4/IPv6過渡方法。協(xié)議轉(zhuǎn)換器為本地IPv4主機(jī)和本地IPv6主機(jī)間一個(gè)中介單元,不需變更主機(jī)就可實(shí)現(xiàn)兩者間聯(lián)絡(luò)。網(wǎng)絡(luò)地址轉(zhuǎn)換器/協(xié)議轉(zhuǎn)換器(NAT-PT,Network Address Translator/Protocol Translator)是協(xié)議轉(zhuǎn)換器方案之一。IPv6分組頭和IPv4分組頭的變換是最復(fù)雜也最重要的轉(zhuǎn)換工作。
烽火網(wǎng)絡(luò)公司自主研發(fā)設(shè)計(jì)的F-engine R4000可作為IPv4/IPv6代溝協(xié)議轉(zhuǎn)換器,能較好地完成兩種網(wǎng)絡(luò)協(xié)議棧的通信互連,為現(xiàn)有的IPv4網(wǎng)絡(luò)向?qū)淼腎Pv6網(wǎng)絡(luò)提供平滑升級(jí),是實(shí)現(xiàn)跨代溝通信的優(yōu)越解決方案。它的設(shè)計(jì)要比現(xiàn)存絕大多數(shù)網(wǎng)絡(luò)地址轉(zhuǎn)換更具靈活性,它能被容易地配置成許多地址轉(zhuǎn)換腳本,包括IPv6本地網(wǎng)絡(luò)連接到IPv4互聯(lián)網(wǎng),IPv6本地網(wǎng)絡(luò)連接到IPv6互聯(lián)網(wǎng),IPv6專用網(wǎng)連接到IPv6互聯(lián)網(wǎng),還有專用網(wǎng)連接到IPv4互聯(lián)網(wǎng),也能被配置成負(fù)載平衡的方案。由于良好的模塊化和易于擴(kuò)展設(shè)計(jì),F(xiàn)-engine R4000將成為IPv4網(wǎng)絡(luò)轉(zhuǎn)變到IPv6網(wǎng)絡(luò)的重要工具。
一、IPv4/IPv6代溝協(xié)議轉(zhuǎn)換器的實(shí)現(xiàn)原理
代溝協(xié)議轉(zhuǎn)換器有三個(gè)基本組成部分:1個(gè)地址/端口轉(zhuǎn)換模塊和2個(gè)協(xié)議轉(zhuǎn)換模塊。一個(gè)協(xié)議轉(zhuǎn)換模塊的作用是將IPv6轉(zhuǎn)換為IPv4(稱為PT6/4),而另一個(gè)則是由IPv4轉(zhuǎn)換為IPv6(成為PT4/6)。通過把轉(zhuǎn)換功能分解到基層部分來增加系統(tǒng)的靈活性和可調(diào)性,將地址/端口轉(zhuǎn)換和協(xié)議轉(zhuǎn)換分開進(jìn)行。
地址/端口轉(zhuǎn)換模塊(APT)負(fù)責(zé)網(wǎng)絡(luò)地址和端口的轉(zhuǎn)換。APT含有有效數(shù)據(jù)流的信息。當(dāng)數(shù)據(jù)包到達(dá)時(shí),APT使用它的數(shù)據(jù)流驗(yàn)證系統(tǒng)找到匹配的地址映射,并把地址映射轉(zhuǎn)換為相應(yīng)的地址和端口。如果沒有找到相匹配的映射,APT會(huì)根據(jù)相應(yīng)的規(guī)則產(chǎn)生一個(gè)新的映射。APT總是在兩個(gè)不同的IPv6地址范疇內(nèi)進(jìn)行轉(zhuǎn)換。
兩個(gè)協(xié)議轉(zhuǎn)換模塊負(fù)責(zé)在IPv4和IPv6之間實(shí)現(xiàn)數(shù)據(jù)包和ICMP包的地址轉(zhuǎn)換。IPv6和IPv4數(shù)據(jù)的分組頭部格式非常相似,但并不完全一致。這樣在一種IP或ICMP版本向另一種版本轉(zhuǎn)換過程中需進(jìn)行一定的調(diào)整。負(fù)責(zé)IPv6數(shù)據(jù)包轉(zhuǎn)換到IPv4的協(xié)議轉(zhuǎn)換模塊只接收含有IPv6/IPv4映射關(guān)系的IPv6數(shù)據(jù)包,與之類似,另一模塊則只接收相應(yīng)的IPv4數(shù)據(jù)包。由于具有映射關(guān)系的IPv6地址與IPv4地址之間是一一對(duì)應(yīng)的,協(xié)議轉(zhuǎn)換模塊只需要在兩種協(xié)議之間為分組頭部建立一種相互的映射即可。當(dāng)一個(gè)IPv6或ICMPv6數(shù)據(jù)包到達(dá)時(shí),PT6/4只需取出IPv6分組源/目的地址字段中最低的32位即可作為相應(yīng)IPv4分組的源/目的地址。同樣,當(dāng)一個(gè)IPv4或ICMPv4數(shù)據(jù)包到達(dá)時(shí),PT4/6只需對(duì)分組的地址字段添加96位前置數(shù)據(jù)即可完成從IPv4到IPv6的轉(zhuǎn)換。
二、地址/端口轉(zhuǎn)換模塊(APT)的設(shè)計(jì)
1. APT的功能
當(dāng)一臺(tái)本地IPv6終端需要與外部世界聯(lián)系時(shí),必須臨時(shí)分配一個(gè)可由外部識(shí)別的全球性地址。如果同時(shí)有不止一個(gè)內(nèi)部結(jié)點(diǎn)需要與外部聯(lián)系而僅有一個(gè)全球性的地址時(shí),則每一個(gè)獨(dú)立的連接都被臨時(shí)分配一個(gè)特有的地址/端口綁定,以使這些內(nèi)部結(jié)點(diǎn)可以共享一個(gè)全球地址。如為了與IPv4外部網(wǎng)絡(luò)通信,一個(gè)IPv6局域網(wǎng)通常被分配一些能夠映射為有效IPv4地址的IPv6地址(但需要與外部網(wǎng)絡(luò)通信的主機(jī)數(shù)量往往大大多于這些可用地址數(shù)量)。APT解決這個(gè)問題的方法是,使IPv6局域網(wǎng)內(nèi)的多臺(tái)主機(jī)共享一個(gè)包含有效映射關(guān)系的IPv6地址。這實(shí)際上是傳輸標(biāo)識(shí)符的一種復(fù)用。通信時(shí),數(shù)據(jù)分組頭部的源地址字段和端口號(hào)被替換為一個(gè)特殊的地址/端口綁定,這個(gè)特殊的綁定關(guān)系是由APT臨時(shí)分配的。APT的這種功能就被稱為地址/端口轉(zhuǎn)換。
在與外部網(wǎng)絡(luò)通信時(shí),APT不僅要負(fù)責(zé)使用新的地址/端口綁定關(guān)系替代數(shù)據(jù)分組中原有的地址/端口綁定,而且需要記憶這種替代關(guān)系。在向外部網(wǎng)絡(luò)發(fā)送分組時(shí),APT將分組內(nèi)的源地址與端口號(hào)替換為新的地址/端口綁定;接收分組時(shí),APT需要將分組中的地址/端口字段再用局域網(wǎng)內(nèi)部的地址/端口綁定替換回來。
當(dāng)APT接收到一個(gè)IPv6數(shù)據(jù)包,它用一個(gè)有地址映射關(guān)系的流ID來替代數(shù)據(jù)包中的原始流ID,映射過的流ID用其它的地址/端口綁定來替代數(shù)據(jù)包中源或目的地址/端口綁定。APT的配置字符串決定了這種替代關(guān)系的具體處理過程。除上述討論的動(dòng)態(tài)分配之外,APT也可處理其它一些簡(jiǎn)單形式的地址/端口轉(zhuǎn)換,如靜態(tài)地址轉(zhuǎn)換和動(dòng)態(tài)單一地址轉(zhuǎn)換。
APT對(duì)來自于外部的和內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包的處理方式是不同的。APT經(jīng)常是針對(duì)一定方向的數(shù)據(jù)包分配動(dòng)態(tài)地址映射。這樣另一個(gè)方向的初始化流將不能進(jìn)行地址映射。OUTWARD PACKETS 指的是由本地網(wǎng)絡(luò)發(fā)出,目的是因特網(wǎng)(IPv4或IPv6)主機(jī)的數(shù)據(jù)包,INWARD PACKETS則相反。APT有兩個(gè)輸入口和兩個(gè)輸出口,分別用于OUTWARD分組和INWARD分組的接收與發(fā)送。APT從不同的輸入口接收數(shù)據(jù)包,經(jīng)過轉(zhuǎn)換后再將其從不同的輸出口轉(zhuǎn)發(fā)出去。
2. 基于IPv6實(shí)現(xiàn)IPv4/IPv6轉(zhuǎn)換的APT
APT僅接收和發(fā)送含有IPv6地址的IPv6數(shù)據(jù)包。為使協(xié)議轉(zhuǎn)換器可以同時(shí)處理IPv4/IPv6兩種模式,當(dāng)與只支持IPv4的主機(jī)通信時(shí),會(huì)分配臨時(shí)的IPv4地址給其內(nèi)部IPv6主機(jī)。而基于IPv6的APT則給其內(nèi)部IPv6主機(jī)分配支持IPv4映射的IPv6地址來實(shí)現(xiàn)這一目的。
當(dāng)協(xié)議轉(zhuǎn)換器要將IPv6分組轉(zhuǎn)換為IPv4分組時(shí),APT首先將IPv6地址和端口映射為與IPv4地址有映射關(guān)系的IPv6地址與端口號(hào)。然后再將這個(gè)映射地址轉(zhuǎn)換為真正的IPv4地址,從而實(shí)現(xiàn)IPv6分組轉(zhuǎn)換為IPv4的轉(zhuǎn)換。從IPv4到IPv6分組的轉(zhuǎn)換過程也與此相似。先將IPv4地址轉(zhuǎn)換成為具有映射關(guān)系的IPv6地址/端口號(hào),然后再將這個(gè)地址/端口綁定轉(zhuǎn)換成為真正的IPv6地址和端口號(hào)。
3. 靜態(tài)映射與動(dòng)態(tài)映射
APT可以將主機(jī)的實(shí)際地址和端口號(hào)映射成為一個(gè)全球性的地址/端口綁定。靜態(tài)映射功能是指內(nèi)部網(wǎng)絡(luò)的地址/端口綁定與全球性地址/端口綁定之間的映射關(guān)系是靜態(tài)的。在大多數(shù)情況下,靜態(tài)映射被用作單一地址映射的情況。例如,一定的外部地址將會(huì)被保留以標(biāo)志特定的內(nèi)部地址。與靜態(tài)映射相對(duì),動(dòng)態(tài)映射僅對(duì)活動(dòng)的數(shù)據(jù)流保留映射關(guān)系。
4. 動(dòng)態(tài)地址映射與動(dòng)態(tài)地址/端口映射
動(dòng)態(tài)地址映射是指APT僅為內(nèi)部主機(jī)動(dòng)態(tài)分配一個(gè)外部地址映射,而不是一個(gè)地址/端口綁定。APT將直接使用映射過的地址來指明此內(nèi)部結(jié)點(diǎn),而以映射過的流ID來代替原始流ID,在這個(gè)映射過程中,APT不僅要?jiǎng)討B(tài)分配一個(gè)外部地址映射,而且原來的端口號(hào)也要被映射為新的端口號(hào)。與動(dòng)態(tài)地址/端口映射不同的是,動(dòng)態(tài)地址映射只是替代分組頭部中的一個(gè)地址字段,而保留流ID中的其它三個(gè)部分。對(duì)于向外的數(shù)據(jù)包,它以映射地址來取代原有的源地址字段;對(duì)于向內(nèi)的數(shù)據(jù)包,它以內(nèi)部結(jié)點(diǎn)的實(shí)際地址來取代分組中的目的地址,這個(gè)目的地址也就是映射地址。
三、協(xié)議轉(zhuǎn)換模塊的設(shè)計(jì)
PT6/4模塊允許只支持IPv6的節(jié)點(diǎn)和只支持IPv4的節(jié)點(diǎn)進(jìn)行通信。從IPv6節(jié)點(diǎn)向IPv4節(jié)點(diǎn)傳送一個(gè)包或者其逆過程都要涉及協(xié)議轉(zhuǎn)換以及地址和端口的轉(zhuǎn)換。PT6/4和PT4/6用于連接基于IPv6的APT并對(duì)需要進(jìn)行轉(zhuǎn)換的分組完成協(xié)議轉(zhuǎn)換。PT6/4用于將只支持IPv6的本地節(jié)點(diǎn)的IPv6包發(fā)送到只支持IPv4的因特網(wǎng)節(jié)點(diǎn)上。APT將源地址和端口所組成的的套接字轉(zhuǎn)換成IPv4映射型IPv6套接字。PT6/4將包中的IPv6頭轉(zhuǎn)換成IPv4頭和將IPv6地址的最低的32比特作為有效的IPv4地址。
同樣,一個(gè)IPv4包從一個(gè)只支持IPv4的節(jié)點(diǎn)發(fā)送到一個(gè)只支持IPv6的節(jié)點(diǎn)需要經(jīng)過PT4/6和APT以完成轉(zhuǎn)換。PT4/6通過將源和目的地址加上96比特的前綴以轉(zhuǎn)換成IPv4映射型IPv6地址,從而將IPv4頭轉(zhuǎn)換成IPv6頭。APT然后將目的IPv4映射型IPv6地址映射進(jìn)IPv6地址。因?yàn)锳PT處理地址映射和分配,PT6/4和PT4/6只負(fù)責(zé)協(xié)議轉(zhuǎn)換。因?yàn)槟K化的設(shè)計(jì),所以PT6/4和PT4/6的實(shí)現(xiàn)是很容易的。在進(jìn)行包協(xié)議轉(zhuǎn)換之后,PT6/4和PT4/6都需要對(duì)高層協(xié)議(例如TCP、UDP)的校驗(yàn)和進(jìn)行重新計(jì)算。TCP和UDP根據(jù)一個(gè)偽隨機(jī)頭部計(jì)算它們的校驗(yàn)和,這個(gè)偽隨機(jī)頭部包括(IP/IPv6)的源地址和目的地址、高層包長(zhǎng)度和協(xié)議(下一頭部)字段。當(dāng)從IPv6向IPv4轉(zhuǎn)換的時(shí)候,PT6/4必須計(jì)算IPv4頭部所需要的IP校驗(yàn)和。然而,PT4/6并不需要計(jì)算IPv6校驗(yàn)和,因?yàn)镮Pv6頭部沒有這一字段。
ICMPv6和ICMPv4在校驗(yàn)和的計(jì)算上同樣是不同的。PT4/6必須按照TCP和UDP的樣式來計(jì)算ICMPv6,因?yàn)镮CMPv6的計(jì)算中包含了偽隨機(jī)頭部。然而,PT6/4能直接從ICMPv4包計(jì)算出ICMPv4的校驗(yàn)和。在ICMPv4IC和MPv6相互轉(zhuǎn)換的過程中,校驗(yàn)和值的不同必須考慮進(jìn)去。
很顯然Internet從IPv4向IPv6轉(zhuǎn)變需要好多年,每個(gè)站點(diǎn)都必須考慮自己的過渡計(jì)劃,沒有那個(gè)站點(diǎn)能一步到位的完成轉(zhuǎn)變。對(duì)于大多數(shù)的站點(diǎn)來說,采用代溝協(xié)議轉(zhuǎn)換器使只支持IPv4和只支持IPv6的節(jié)點(diǎn)之間能夠相互通信,是一個(gè)非常不錯(cuò)的轉(zhuǎn)變和升級(jí)方法。
該代溝協(xié)議轉(zhuǎn)換器滿足一個(gè)好的網(wǎng)絡(luò)轉(zhuǎn)換器所必須的三個(gè)最基本的要求:能夠在只支持IPv6的節(jié)點(diǎn)和只支持IPv4的節(jié)點(diǎn)之間完成通信,在信源主機(jī)和目的主機(jī)上不需要進(jìn)行任何改變,應(yīng)用簡(jiǎn)單,可以被簡(jiǎn)單地配置以用于在不同的IPv4和IPv6地址和協(xié)議層完成不同的轉(zhuǎn)換。 模塊化的設(shè)計(jì)和配置擴(kuò)展方便使得代溝協(xié)議轉(zhuǎn)換器成為強(qiáng)大的網(wǎng)絡(luò)通信的工具,它的進(jìn)一步廣泛應(yīng)用將推動(dòng)我們更快的向IPv6領(lǐng)域邁進(jìn)。
----《通信世界》