中圖分類號:915.04 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-6868(2002)-03-16-04
摘要:
文章描述了一個基于點擊軟件的IPv6/IPv4通用轉(zhuǎn)換器(GT64)的設(shè)計和應(yīng)用。GT64有3個主要部件:1個地址端口轉(zhuǎn)換器——APT和2個協(xié)議轉(zhuǎn)換器——PT64和PT46,能夠在大多數(shù)的網(wǎng)絡(luò)應(yīng)用中完成地址、端口和協(xié)議在IPv4和IPv6兩個協(xié)議領(lǐng)域之間相互轉(zhuǎn)換。
關(guān)鍵詞:
互聯(lián)網(wǎng)協(xié)議版本6;協(xié)議轉(zhuǎn)換器;地址/端口轉(zhuǎn)換器
ABSTRACT:
ThedesignandimplementationofGT64,ageneraltranslatorbasedontheclicksoftware,a
represented,whichshowsthatGT64hasthreemaincomponents:oneaddresstranslator
(APT)andtwoprotocoltranslators
(PT64andPT46),andhasthecapabilityofperformingthetranslationofaddress,portandprot
ocolbetweenIPv4andIPv6domainsinthemajorityofnetworks.
KEYWORDS:
IPv6;Protocoltranslator;Address/porttranslator
下一代網(wǎng)絡(luò)(NGN)是一個開放式的網(wǎng)絡(luò),是面向無連接的IP網(wǎng)絡(luò)。隨著Internet爆炸性的發(fā)展,IPv4面臨著諸多問題。因此IPv4到IPv6的過渡就成為IETF以及國內(nèi)外IT界所研究和關(guān)注的重要問題。它直接影響到IPv6的推廣和應(yīng)用。
GT64適合于IPv6/IPv4一般用途的轉(zhuǎn)換。GT64的設(shè)計要比現(xiàn)存絕大多數(shù)網(wǎng)絡(luò)地址轉(zhuǎn)換的實現(xià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ù)載平衡的方案。因為它的模塊化和易于擴(kuò)展性,GT64是幫助轉(zhuǎn)變到IPv6網(wǎng)絡(luò)的很有力的工具。
1GT64基本結(jié)構(gòu)
GT64有3個基本組成部分(參見圖1):1個地址/端口轉(zhuǎn)換器和2個協(xié)議轉(zhuǎn)換器,一個協(xié)議轉(zhuǎn)換器的作用是將IPv6轉(zhuǎn)換為IPv4,而另一個則是由IPv4轉(zhuǎn)換為IPv6。GT64通過把轉(zhuǎn)換功能分解到基層部分來增加系統(tǒng)的靈活性和可調(diào)性,以將地址/端口轉(zhuǎn)換和協(xié)議轉(zhuǎn)換分開進(jìn)行。
地址/端口轉(zhuǎn)換器(APT)是GT64最重要的組成部分,因為它負(fù)責(zé)網(wǎng)絡(luò)地址和端口的轉(zhuǎn)換。APT含有效數(shù)據(jù)流的信息。當(dāng)數(shù)據(jù)包到達(dá)時,APT使用它的數(shù)據(jù)流驗證系統(tǒng)找到匹配的地址映射,并把地址映射轉(zhuǎn)換為相應(yīng)的地址和端口。如果沒有找到相匹配的映射,APT會根據(jù)相應(yīng)的規(guī)則產(chǎn)生一個新的映射。APT總是在兩個不同的IPv6地址范疇內(nèi)進(jìn)行轉(zhuǎn)換。
GT64的兩個協(xié)議轉(zhuǎn)換器——PT64和PT46,負(fù)責(zé)在IPv4和IPv6之間實現(xiàn)數(shù)據(jù)包和ICMP(InternetControlMessageProtocol)包的地址轉(zhuǎn)換。IPv6和IPv4數(shù)據(jù)的分組頭部格式非常相似,但并不完全一致。這樣在一種IP或ICMP版本向另一種版本轉(zhuǎn)換過程中需進(jìn)行一定的調(diào)整。PT64只接收含有IPv6/IPv4映射關(guān)系的IPv6數(shù)據(jù)包,PT46則只接收相應(yīng)的IPv4數(shù)據(jù)包。由于具有映射關(guān)系的IPv6地址與IPv4地址之間是一一對應(yīng)的,協(xié)議轉(zhuǎn)換器只需要在兩種協(xié)議之間為分組頭部建立一種相互的映射即可。當(dāng)一個IPv6或ICMPv6數(shù)據(jù)包到達(dá)時,PT64只需取出IPv6分組源/目的地址字段中最低的32位,即可作為相應(yīng)IPv4分組的源/目的地址;同樣當(dāng)一個IPv4或ICMPv4數(shù)據(jù)包到達(dá)時,PT46只需對分組的地址字段添加96位前置數(shù)據(jù),即可完成轉(zhuǎn)換。
2地址/端口轉(zhuǎn)換器的設(shè)計
2.1APT的功能
當(dāng)一臺GT64主機(jī)需要與外部聯(lián)系時,GT64必須臨時分配一個可由外部識別的全球性地址。如果同時有不止一個內(nèi)部節(jié)點需要與外部聯(lián)系而僅有一個全球性地址時,則每一個獨立的連接都被臨時分配一個特有的地址/端口綁定,以使這些內(nèi)部節(jié)點共享一個全球地址。例如,為了與IPv4外部網(wǎng)絡(luò)通信,一個IPv6局域網(wǎng)通常被分配一些能夠映射為有效IPv4地址的IPv6地址,但需要與外部網(wǎng)絡(luò)通信的主機(jī)數(shù)量往往大大多于這些可用的地址數(shù)量。APT解決這個問題的方法是,使IPv6局域網(wǎng)內(nèi)的多臺主機(jī)共享一個包含有效映射關(guān)系的IPv6地址。這實際上是傳輸標(biāo)識符的一種復(fù)用。通信時,數(shù)據(jù)分組頭部的源地址字段和端口號被替換為一個特殊的地址/端口綁定,這個特殊的綁定關(guān)系是由APT臨時分配的。
在與外部網(wǎng)絡(luò)通信時,APT不僅要負(fù)責(zé)使用新的地址/端口綁定關(guān)系替代數(shù)據(jù)分組中原有的地址/端口綁定,而且需要記憶這種替代關(guān)系。在向外部網(wǎng)絡(luò)發(fā)送分組時,APT將分組內(nèi)的源地址與端口號替換為新的地址/端口綁定;接收分組時,APT需要將分組中的地址/端口字段再用局域網(wǎng)內(nèi)部的地址/端口綁定替換回來。
當(dāng)APT接收到一個IPv6數(shù)據(jù)包,它用一個有地址映射關(guān)系的流ID(標(biāo)識)來替代數(shù)據(jù)包中的原始流ID,映射過的流ID用其他的地址/端口綁定來替代數(shù)據(jù)包中源或目的地址/端口綁定。APT的配置字符串決定了這種替代關(guān)系的具體處理過程。除上述討論的動態(tài)分配之外,APT也可處理其他一些簡單形式的地址/端口轉(zhuǎn)換,例如靜態(tài)和動態(tài)單一的地址轉(zhuǎn)換。
APT對來自外部和內(nèi)部網(wǎng)絡(luò)的數(shù)據(jù)包的處理方式是不同的。APT經(jīng)常是針對一定方向的數(shù)據(jù)包分配動態(tài)地址映射。這樣另一個方向的初始化流將不能進(jìn)行地址映射。Outward分組指的是由本地網(wǎng)絡(luò)發(fā)出目的是因特網(wǎng)(IPv4或IPv6)主機(jī)的數(shù)據(jù)包,Inward分組則相反。APT有兩個輸入口和兩個輸出口,分別用于Outward分組和Inward分組的接收與發(fā)送。APT從不同的輸入口接收數(shù)據(jù)包,經(jīng)過轉(zhuǎn)換后再從不同的輸出口轉(zhuǎn)發(fā)出去。
2.2基于IPv6實現(xiàn)IPv4/IPv6
轉(zhuǎn)換的APT
APT僅接收和發(fā)送含有IPv6地址的IPv6數(shù)據(jù)包。為使GT64可以同時處理IPv4/IPv6兩種模式,當(dāng)與只支持IPv4的主機(jī)通信時,GT64會分配臨時的IPv4地址給其內(nèi)部IPv6主機(jī),而基于IPv6的APT則給其內(nèi)部IPv6主機(jī)分配支持IPv4映射的IPv6地址。
當(dāng)GT64要將IPv6分組轉(zhuǎn)換為IPv4分組時,APT首先將IPv6地址和端口映射為與IPv4地址有映射關(guān)系的IPv6地址與端口號;然后再將這個映射地址轉(zhuǎn)換為真正的IPv4地址,從而實現(xiàn)IPv6分組向IPv4的轉(zhuǎn)換。從IPv4到IPv6分組的轉(zhuǎn)換過程也與此相似。先將IPv4地址轉(zhuǎn)換成為具有映射關(guān)系的IPv6地址/端口號,然后再將這個地址/端口號綁定轉(zhuǎn)換成為真正的IPv6地址和端口號。
2.3靜態(tài)映射與動態(tài)映射
APT可以將主機(jī)的實際地址和端口號映射成為一個全球性的地址/端口綁定。靜態(tài)映射功能是指內(nèi)部網(wǎng)絡(luò)的地址/端口綁定與全球性地址/端口綁定之間的映射關(guān)系是靜態(tài)的。在大多數(shù)情況下,靜態(tài)映射被用作單一地址映射的情況。例如一定的外部地址將會被保留,以標(biāo)志特定的內(nèi)部地址。與靜態(tài)映射相對,動態(tài)映射僅對活動的數(shù)據(jù)流保留映射關(guān)系。
2.4動態(tài)地址映射與
動態(tài)地址/端口映射
動態(tài)地址映射是指APT僅為內(nèi)部主機(jī)動態(tài)分配一個外部地址映射,而不是一個地址/端口綁定。APT將直接使用映射過的地址來指明此內(nèi)部節(jié)點,同時以映射過的流ID來代替原始流ID。在這個映射過程中,APT不僅要動態(tài)分配一個外部地址映射,而且原來的端口號也要被映射為新的端口號。與動態(tài)地址/端口映射不同的是,動態(tài)地址映射只是替代分組頭部中的一個地址字段,而保留流ID中的其他3個部分。對于向外的數(shù)據(jù)包,它以映射地址來取代原有的源地址字段;對于向內(nèi)的數(shù)據(jù)包,它以內(nèi)部節(jié)點的實際地址來取代分組中的目的地址,這也就是映射地址。
3APT的配置
配置字符串為動態(tài)映射和靜態(tài)映射指定了映射規(guī)則,用戶可以使用配置字符串來控制APT,配置字符串的變量由逗號分隔。圖2給出一個IPv6局域網(wǎng)與IPv4因特網(wǎng)連接時APT配置實例。APT被配置為靜態(tài)的地址映射和動態(tài)的地址/端口映射。
首先,配置字符串指定了靜態(tài)地址映射的規(guī)則和數(shù)量。第1個參數(shù)是靜態(tài)映射的數(shù)量。第2個參數(shù)StaticPortMapping是一個布爾變量,表明了APT是否作靜態(tài)地址映射。圖2中,第1個參數(shù)Number_of_Static_Mappings的值是1,表明只有一個靜態(tài)地址映射;第2個參數(shù)StaticPortMapping的值是0,表明APT為地址映射作靜態(tài)轉(zhuǎn)換。
接下來的StaticPortMapping部分是對靜態(tài)映射的詳細(xì)描述,表達(dá)式從StaticMapping1一直到StaticMappingm。這m個參數(shù)對應(yīng)于m個靜態(tài)映射。依照靜態(tài)端口映射的值,每一個靜態(tài)映射都包含有2到4個字符串的屬性描述,具體包含幾個字符串與StaticPortMapping的值有關(guān)。以靜態(tài)地址映射為例,如果StaticPortMapping的值是0,那么屬性描述為兩個字符串,分別為內(nèi)部的和外部的IPv6地址;當(dāng)StaticPortMapping的值為1時,靜態(tài)映射包含4個字符串,分別描述內(nèi)部網(wǎng)絡(luò)的IPv6地址和節(jié)點端口號,以及映射過的IPv6地址和節(jié)點端口號。
圖2中,APT靜態(tài)地將內(nèi)部地址::3ffe:1ce1:2::1映射為外部網(wǎng)絡(luò)的有效地址::18.26.4.115。APT在發(fā)出的數(shù)據(jù)包中以::18.26.4.115取代了原地址::3ffe:1ce1:2::1。在數(shù)據(jù)接收的過程中,若有一數(shù)據(jù)分組指向::18.26.4.115,則APT會將其目的地址替代為內(nèi)部網(wǎng)絡(luò)地址::3ffe:1ce1:2::1。
其次,配置字符串也表明了可有多個映射規(guī)則提供給動態(tài)映射。DynamicMapping參數(shù)是一個布爾型變量,用來表明APT是否進(jìn)行了動態(tài)地址映射。如果值是1,APT將會使用許多特定于動態(tài)地址映射的參數(shù)。下一個參數(shù)DynamicPortMapping決定APT是進(jìn)行地址/端口映射還是只進(jìn)行地址映射。大多數(shù)的APT配置都含有后者,例如圖2,因為動態(tài)地址/端口映射允許一個全球性的地址被幾個有效的流同時復(fù)用。
第三,參數(shù)AddressAllocationDirection決定APT能否分配一個新的映射,例如當(dāng)接收到一個沒有經(jīng)過映射的分組時。這個參數(shù)有兩個值:1(代表向內(nèi))和0(代表向外)。在沒有特殊指定時,系統(tǒng)默認(rèn)參數(shù)取“0”值。當(dāng)?shù)刂忿D(zhuǎn)換是由局域網(wǎng)內(nèi)部指向外部時,則要將AddressAllocationDirection指定為向外,如圖2。但是,當(dāng)GT64被用作其他的情況時,例如網(wǎng)絡(luò)服務(wù)器負(fù)載平衡時,APT將會分配新的映射給那些來自外部的新的有效流,這時該參數(shù)方向應(yīng)改為向內(nèi)。負(fù)載平衡是指將在一個網(wǎng)絡(luò)地址上的負(fù)載分配到幾個內(nèi)部節(jié)點上去。GT64為負(fù)載平衡所處理的數(shù)據(jù)流是來自于外部的。參數(shù)AddressAllocationDirection標(biāo)為內(nèi)部的,這樣將允許APT為這些流分配映射。最后,配置字符串決定了動態(tài)分配全球性的IPv6地址和端口的范圍。如果動態(tài)映射并沒有動態(tài)端口映射功能,保留的參數(shù)則是IPv6地址。在地址/端口映射中,保留的參數(shù)是3個參數(shù)的組合(Mapped_IPv6AddressPort_StartPort_end)。這表明當(dāng)一個有效流經(jīng)過APT時可以被動態(tài)分配一個IPv6地址和端口的范圍。當(dāng)多部隸屬同一局域網(wǎng)的主機(jī)希望共享一個全球性的IPv6地址時,所采取的方法是復(fù)用一個標(biāo)記過的IPv6地址,并可以傳遞許多IPv6主機(jī)的標(biāo)識符。
在圖2中,最后一個參數(shù)表明了端口6000至6010的含IPv4映射的IPv6地址,::18.26.4.115是可以被復(fù)用的映射地址。若同時復(fù)用10個地址/端口綁定,則APT可以同時處理10個有效流。
4協(xié)議轉(zhuǎn)換器的設(shè)計
GT64一個非常重要的應(yīng)用是允許只支持IPv6的節(jié)點和只支持IPv4的節(jié)點進(jìn)行通信。從IPv6節(jié)點向IPv4節(jié)點傳送一個包或者其逆過程都要涉及協(xié)議轉(zhuǎn)換以及地址和端口的轉(zhuǎn)換。PT64和PT46用于連接基于IPv6的APT,并對需要進(jìn)行轉(zhuǎn)換的分組完成協(xié)議轉(zhuǎn)換。PT64用于將只支持IPv6的本地節(jié)點的IPv6包發(fā)送到只支持IPv4的因特網(wǎng)節(jié)點上。APT將源地址和端口所組成的套接字轉(zhuǎn)換成IPv4映射型IPv6套接字。PT64將包中的IPv6頭轉(zhuǎn)換成IPv4頭和將IPv6地址的最低32比特作為有效的IPv4地址。
同樣,一個IPv4包從一個只支持IPv4的節(jié)點發(fā)送到一個只支持IPv6的節(jié)點需要經(jīng)過PT46和APT以完成轉(zhuǎn)換。PT46通過將源和目的地址加上96比特的前綴轉(zhuǎn)換成IPv4映射型IPv6地址,從而將IPv4頭轉(zhuǎn)換成IPv6頭。APT然后將目的IPv4映射型IPv6地址映射進(jìn)IPv6地址。APT處理地址映射和分配,PT64和PT46只負(fù)責(zé)協(xié)議轉(zhuǎn)換。因為是模塊化設(shè)計,所以PT64和PT46的實現(xiàn)是很容易的。在進(jìn)行包協(xié)議轉(zhuǎn)換之后,PT64和PT46都需要對高層協(xié)議(例如TCP,UDP)的校驗和重新計算。TCP和UDP根據(jù)一個偽隨機(jī)頭部計算它們的校驗和,這個偽隨機(jī)頭部包括(IPv4/IPv6)的源地址和目的地址、高層包長度和協(xié)議(下一頭部)字段。當(dāng)從IPv6向IPv4轉(zhuǎn)換的時候,PT64必須計算IPv4頭部所需要的IP校驗和。然而,PT46并不需要計算IPv6校驗和,因為IPv6頭部沒有這一字段。
ICMPv6和ICMPv4在校驗和的計算上同樣是不同的。PT46必須按照TCP和UDP的樣式來計算ICMPv6,因為ICMPv6的計算中包含了偽隨機(jī)頭部。然而,PT64能直接從ICMPv4包計算出ICMPv4的校驗和。在ICMPv4/ICMPv6相互轉(zhuǎn)換的過程中,校驗和值的不同必須考慮進(jìn)去。
5結(jié)論
顯然,因特網(wǎng)從IPv4向IPv6轉(zhuǎn)變將需要很長一段時間。每個站點都必須考慮自己的過渡計劃。只有很少的站點能夠一步到位地完成轉(zhuǎn)變。對于大多數(shù)的站點來說,NAT將作為一種機(jī)制而被采用,它可以使得只支持IPv4和只支持IPv6的節(jié)點之間能夠相互通信。
GT64可以滿足一個好的網(wǎng)絡(luò)轉(zhuǎn)換器所必須的3個最基本的要求:能夠在只支持IPv6的節(jié)點和只支持IPv4的節(jié)點之間完成通信;在信源主機(jī)和目的主機(jī)上不需要進(jìn)行任何改變;應(yīng)用簡單。模塊化的設(shè)計和擴(kuò)展方便使得GT64成為強大的網(wǎng)絡(luò)通信工具。GT64的進(jìn)一步發(fā)展將推動互聯(lián)網(wǎng)更快地向IPv6領(lǐng)域邁進(jìn)。□
參考文獻(xiàn)
1FiuczynskiME,VincentKL,BrianNB.TheDesignandImplementationofanIPv6/IPv4NetworkAd
dressandProtocolTranslator.ProceedingsoftheUSENIXAnnualTechnicalConference
(NO98),NewOrleans,Louisiana,1998.http://www.cs.washington.edu/research/networkin
g/napt/reports/usenix98/index.html,2001
2Stardust.com.MigrationfromIPv4toIPv6foranetworkmanager:ImplementationoftheIPv4/
IPv6networkaddressandprotocoltranslator[R],2000.http://www.win
sock2.com/IPv6/documents/v6migrate/v6migrate_30.htm,2001
3YeomHY,HaJ,KimI.IPMultiplexingbyTransparentPort-
AddressTranslator.ProceedingsoftheTenthUSENIXSystemAdministrationConference,
Chicago,IL,USA,Sep29-Oct4,1996
4CiscoNAT-PT(IPv6/IPv4)
implementation.http://www.cisco.com/warp/public/cc/pd/iosw/prodlit/ip6v_ds.h
tm,20015MicrosoftResearchIPv6.http://www.research.microsoft.com/msrIPv6/msrI
Pv6.htm,2001
6UltimaIPv6Access,BritishTelecom.http://ultima.IPv6.bt.com/,2001
7KohlerE,MorrisR,ChenB,etal.TheClickmodularrouter.ACMTransactionsonComputerS
ystems,18(4),2000
8KohlerE.TheClickmodularrouter[D].[Dissertation]:MIT,2000
(收稿日期:2002-02-27)
作者簡介
范蓓蕾,美國MIT國際發(fā)展與研究專業(yè)在讀博士。原就讀于南京大學(xué)少年班計算機(jī)科學(xué)系,1995年赴美就讀于新澤西Rutgers大學(xué),1997年獲城市規(guī)劃專業(yè)碩士學(xué)位,1998年轉(zhuǎn)MIT攻讀電子科學(xué)與計算機(jī)科學(xué)系碩士學(xué)位和國際發(fā)展與研究博士學(xué)位,2001年獲計算機(jī)科學(xué)碩士學(xué)位。研究方向為通信與計算機(jī)及其發(fā)展。
范忠禮,南京郵電學(xué)院網(wǎng)絡(luò)研究室主任,教授。研究方向IP網(wǎng)絡(luò)及寬帶城域以太網(wǎng)(WMEN)技術(shù)。曾獲部、省二、三等科技進(jìn)步獎。發(fā)表文章40余篇。