美國(guó)麻省理工學(xué)院 范蓓蕾 南京郵電學(xué)院 范忠禮
下一代網(wǎng)絡(luò)NGN是一個(gè)開(kāi)放式的網(wǎng)絡(luò),是面向無(wú)連接的IP網(wǎng)絡(luò)。IPv4在Internet中運(yùn)行得比較成功,隨著Internet的發(fā)展,IPv4面臨諸多問(wèn)題,如地址資源匱乏,節(jié)點(diǎn)的安全性、移動(dòng)性等問(wèn)題。這就是IPv6所能夠解決的。然而從IPv4到IPv6應(yīng)用轉(zhuǎn)移不是一夜之間就能完成的。因此IPv4到IPv6的過(guò)渡就成為IETF以及國(guó)內(nèi)外IT界所研究和關(guān)注的問(wèn)題。它直接影響到IPv6的推廣和應(yīng)用。
適合于IPv6/IPv4一般用途的轉(zhuǎn)換。GT64的設(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),GT64也能被配置成許多負(fù)載平衡的方案。由于GT64的模塊化和易于擴(kuò)展,它是幫助轉(zhuǎn)變到IPv6網(wǎng)絡(luò)的很有力的工具。
一、 實(shí)現(xiàn)
GT64有三個(gè)基本組成部分:1個(gè)地址/端口轉(zhuǎn)換器和2個(gè)協(xié)議轉(zhuǎn)換器。一個(gè)協(xié)議轉(zhuǎn)換器的作用是將IPv6轉(zhuǎn)換為IPv4,而另一個(gè)則是由IPv4轉(zhuǎn)換為IPv6。GT64通過(guò)把轉(zhuǎn)換功能分解到基層部分來(lái)增加系統(tǒng)的靈活性和可調(diào)性,以將地址/端口轉(zhuǎn)換和協(xié)議轉(zhuǎn)換分開(kāi)進(jìn)行。
地址/端口轉(zhuǎn)換器(APT)是GT64最重要的組成部分,因?yàn)樗?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)的地址和端口。如果沒(méi)有找到相匹配的映射,APT會(huì)根據(jù)相應(yīng)的規(guī)則產(chǎn)生一個(gè)新的映射。APT總是在兩個(gè)不同的IPv6地址范疇內(nèi)進(jìn)行轉(zhuǎn)換。GT64的兩個(gè)協(xié)議轉(zhuǎn)換器——PT64和PT46,負(fù)責(zé)在IPv4和IPv6之間實(shí)現(xiàn)數(shù)據(jù)包和ICMP包的地址轉(zhuǎn)換。IPv6和IPv4數(shù)據(jù)的分組頭部格式非常相似,但并不完全一致。這樣在一種IP或ICMP版本向另一種版本轉(zhuǎn)換過(guò)程中需進(jìn)行一定的調(diào)整。PT64只接收含有IPv6/IPv4映射關(guān)系的IPv6數(shù)據(jù)包,與之類似,PT46則只接收相應(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í),PT64只需取出IPv6分組源/目的地址字段中最低的32位即可作為相應(yīng)IPv4分組的源/目的地址。同樣,當(dāng)一個(gè)IPv4或ICMPv4數(shù)據(jù)包到達(dá)時(shí),PT46只需對(duì)分組的地址字段添加96位前置數(shù)據(jù)即可完成從IPv4到IPv6的轉(zhuǎn)換。
二、 地址/端口轉(zhuǎn)換器(APT)的設(shè)計(jì)
1. APT的功能
當(dāng)一臺(tái)GT64主機(jī)需要與外部世界聯(lián)系時(shí),GT64必須臨時(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è)問(wèn)題的方法是,使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)部的地址/端口綁定替換回來(lái)。
當(dāng)APT接收到一個(gè)IPv6數(shù)據(jù)包,它用一個(gè)有地址映射關(guān)系的流ID來(lái)替代數(shù)據(jù)包中的原始流ID,映射過(guò)的流ID用其它的地址/端口綁定來(lái)替代數(shù)據(jù)包中源或目的地址/端口綁定。APT的配置字符串決定了這種替代關(guān)系的具體處理過(guò)程。除上述討論的動(dòng)態(tài)分配之外,APT也可處理其它一些簡(jiǎn)單形式的地址/端口轉(zhuǎn)換,如靜態(tài)地址轉(zhuǎn)換和動(dòng)態(tài)單一地址轉(zhuǎn)換。
APT對(duì)來(lái)自于外部的和內(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)過(guò)轉(zhuǎn)換后再將其從不同的輸出口轉(zhuǎn)發(fā)出去。
2. 基于IPv6實(shí)現(xiàn)IPv4/IPv6轉(zhuǎn)換的APT
APT僅接收和發(fā)送含有IPv6地址的IPv6數(shù)據(jù)包。為使GT64可以同時(shí)處理IPv4/IPv6兩種模式,當(dāng)與只支持IPv4的主機(jī)通信時(shí),GT64會(huì)分配臨時(shí)的IPv4地址給其內(nèi)部IPv6主機(jī)。而基于IPv6的APT則給其內(nèi)部IPv6主機(jī)分配支持IPv4映射的IPv6地址來(lái)實(shí)現(xiàn)這一目的。
當(dāng)GT64要將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)換過(guò)程也與此相似。先將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將直接使用映射過(guò)的地址來(lái)指明此內(nèi)部結(jié)點(diǎn),而以映射過(guò)的流ID來(lái)代替原始流ID,在這個(gè)映射過(guò)程中,APT不僅要?jiǎng)討B(tài)分配一個(gè)外部地址映射,而且原來(lái)的端口號(hào)也要被映射為新的端口號(hào)。與動(dòng)態(tài)地址/端口映射不同的是,動(dòng)態(tài)地址映射只是替代分組頭部中的一個(gè)地址字段,而保留流ID中的其它三個(gè)部分。對(duì)于向外的數(shù)據(jù)包,它以映射地址來(lái)取代原有的源地址字段;對(duì)于向內(nèi)的數(shù)據(jù)包,它以內(nèi)部結(jié)點(diǎn)的實(shí)際地址來(lái)取代分組中的目的地址,這個(gè)目的地址也就是映射地址。
三、 協(xié)議轉(zhuǎn)換器的設(shè)計(jì)
GT64一個(gè)非常重要的應(yīng)用是允許只支持IPv6的節(jié)點(diǎn)和只支持IPv4的節(jié)點(diǎn)進(jìn)行通信。從IPv6節(jié)點(diǎn)向IPv4節(jié)點(diǎn)傳送一個(gè)包或者其逆過(guò)程都要涉及協(xié)議轉(zhuǎn)換以及地址和端口的轉(zhuǎn)換。PT64和PT46用于連接基于IPv6的APT并對(duì)需要進(jìn)行轉(zhuǎn)換的分組完成協(xié)議轉(zhuǎn)換。PT64用于將只支持IPv6的本地節(jié)點(diǎn)的IPv6包發(fā)送到只支持IPv4的因特網(wǎng)節(jié)點(diǎn)上。APT將源地址和端口所組成的的套接字轉(zhuǎn)換成IPv4映射型IPv6套接字。PT64將包中的IPv6頭轉(zhuǎn)換成IPv4頭和將IPv6地址的最低的32比特作為有效的IPv4地址。
同樣,一個(gè)IPv4包從一個(gè)只支持IPv4的節(jié)點(diǎn)發(fā)送到一個(gè)只支持IPv6的節(jié)點(diǎn)需要經(jīng)過(guò)PT46和APT以完成轉(zhuǎn)換。PT46通過(guò)將源和目的地址加上96比特的前綴以轉(zhuǎn)換成IPv4映射型IPv6地址,從而將IPv4頭轉(zhuǎn)換成IPv6頭。APT然后將目的IPv4映射型IPv6地址映射進(jìn)IPv6地址。因?yàn)锳PT處理地址映射和分配,PT64和PT46只負(fù)責(zé)協(xié)議轉(zhuǎn)換。因?yàn)槟K化的設(shè)計(jì),所以PT64和PT46的實(shí)現(xiàn)是很容易的。在進(jìn)行包協(xié)議轉(zhuǎn)換之后,PT64和PT46都需要對(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í)候,PT64必須計(jì)算IPv4頭部所需要的IP校驗(yàn)和。然而,PT46并不需要計(jì)算IPv6校驗(yàn)和,因?yàn)镮Pv6頭部沒(méi)有這一字段。
ICMPv6和ICMPv4在校驗(yàn)和的計(jì)算上同樣是不同的。PT46必須按照TCP和UDP的樣式來(lái)計(jì)算ICMPv6,因?yàn)镮CMPv6的計(jì)算中包含了偽隨機(jī)頭部。然而,PT64能直接從ICMPv4包計(jì)算出ICMPv4的校驗(yàn)和。在ICMPv4IC和MPv6相互轉(zhuǎn)換的過(guò)程中,校驗(yàn)和值的不同必須考慮進(jìn)去。
很顯然Internet從IPv4向IPv6轉(zhuǎn)變需要好多年,每個(gè)站點(diǎn)都必須考慮自己的過(guò)渡計(jì)劃,只有很少的站點(diǎn)將一步到位的完成轉(zhuǎn)變。對(duì)于大多數(shù)的站點(diǎn)來(lái)說(shuō),NAT將作為一種機(jī)制而被采用,它可以使得只支持IPv4和只支持IPv6的節(jié)點(diǎn)之間能夠相互通信。
GT64滿足一個(gè)好的網(wǎng)絡(luò)轉(zhuǎn)換器所必須的三個(gè)最基本的要求:能夠在只支持IPv6的節(jié)點(diǎn)和只支持IPv4的節(jié)點(diǎn)之間完成通信、在信源主機(jī)和目的主機(jī)上不需要進(jìn)行任何改變、應(yīng)用簡(jiǎn)單。GT64可以被簡(jiǎn)單的配置以用于在不同的IPv4和IPv6地址和協(xié)議層完成不同的轉(zhuǎn)換。
模塊化的設(shè)計(jì)和配置擴(kuò)展方便使得GT64成為強(qiáng)大的網(wǎng)絡(luò)通信的工具。GT64的進(jìn)一步發(fā)展將推動(dòng)我們更快的向IPv6領(lǐng)域邁進(jìn)。
摘自《通信世界》