中圖分類號:915.04 文獻標識碼:A 文章編號:1009-6868(2002)-03-16-04
摘要:
文章描述了一個基于點擊軟件的IPv6/IPv4通用轉換器(GT64)的設計和應用。GT64有3個主要部件:1個地址端口轉換器——APT和2個協議轉換器——PT64和PT46,能夠在大多數的網絡應用中完成地址、端口和協議在IPv4和IPv6兩個協議領域之間相互轉換。
關鍵詞:
互聯網協議版本6;協議轉換器;地址/端口轉換器
ABSTRACT:
ThedesignandimplementationofGT64,ageneraltranslatorbasedontheclicksoftware,a
represented,whichshowsthatGT64hasthreemaincomponents:oneaddresstranslator
(APT)andtwoprotocoltranslators
(PT64andPT46),andhasthecapabilityofperformingthetranslationofaddress,portandprot
ocolbetweenIPv4andIPv6domainsinthemajorityofnetworks.
KEYWORDS:
IPv6;Protocoltranslator;Address/porttranslator
下一代網絡(NGN)是一個開放式的網絡,是面向無連接的IP網絡。隨著Internet爆炸性的發展,IPv4面臨著諸多問題。因此IPv4到IPv6的過渡就成為IETF以及國內外IT界所研究和關注的重要問題。它直接影響到IPv6的推廣和應用。
GT64適合于IPv6/IPv4一般用途的轉換。GT64的設計要比現存絕大多數網絡地址轉換的實現更具靈活性。它能被容易地配置成許多地址轉換腳本,包括:IPv6本地網絡連接到IPv4互聯網,IPv6本地網絡連接到IPv6互聯網,IPv6專用網連接到IPv6互聯網,還有專用網連接到IPv4互聯網。而且GT64也能被配置成許多負載平衡的方案。因為它的模塊化和易于擴展性,GT64是幫助轉變到IPv6網絡的很有力的工具。
1GT64基本結構
GT64有3個基本組成部分(參見圖1):1個地址/端口轉換器和2個協議轉換器,一個協議轉換器的作用是將IPv6轉換為IPv4,而另一個則是由IPv4轉換為IPv6。GT64通過把轉換功能分解到基層部分來增加系統的靈活性和可調性,以將地址/端口轉換和協議轉換分開進行。

地址/端口轉換器(APT)是GT64最重要的組成部分,因為它負責網絡地址和端口的轉換。APT含有效數據流的信息。當數據包到達時,APT使用它的數據流驗證系統找到匹配的地址映射,并把地址映射轉換為相應的地址和端口。如果沒有找到相匹配的映射,APT會根據相應的規則產生一個新的映射。APT總是在兩個不同的IPv6地址范疇內進行轉換。
GT64的兩個協議轉換器——PT64和PT46,負責在IPv4和IPv6之間實現數據包和ICMP(InternetControlMessageProtocol)包的地址轉換。IPv6和IPv4數據的分組頭部格式非常相似,但并不完全一致。這樣在一種IP或ICMP版本向另一種版本轉換過程中需進行一定的調整。PT64只接收含有IPv6/IPv4映射關系的IPv6數據包,PT46則只接收相應的IPv4數據包。由于具有映射關系的IPv6地址與IPv4地址之間是一一對應的,協議轉換器只需要在兩種協議之間為分組頭部建立一種相互的映射即可。當一個IPv6或ICMPv6數據包到達時,PT64只需取出IPv6分組源/目的地址字段中最低的32位,即可作為相應IPv4分組的源/目的地址;同樣當一個IPv4或ICMPv4數據包到達時,PT46只需對分組的地址字段添加96位前置數據,即可完成轉換。
2地址/端口轉換器的設計
2.1APT的功能
當一臺GT64主機需要與外部聯系時,GT64必須臨時分配一個可由外部識別的全球性地址。如果同時有不止一個內部節點需要與外部聯系而僅有一個全球性地址時,則每一個獨立的連接都被臨時分配一個特有的地址/端口綁定,以使這些內部節點共享一個全球地址。例如,為了與IPv4外部網絡通信,一個IPv6局域網通常被分配一些能夠映射為有效IPv4地址的IPv6地址,但需要與外部網絡通信的主機數量往往大大多于這些可用的地址數量。APT解決這個問題的方法是,使IPv6局域網內的多臺主機共享一個包含有效映射關系的IPv6地址。這實際上是傳輸標識符的一種復用。通信時,數據分組頭部的源地址字段和端口號被替換為一個特殊的地址/端口綁定,這個特殊的綁定關系是由APT臨時分配的。
在與外部網絡通信時,APT不僅要負責使用新的地址/端口綁定關系替代數據分組中原有的地址/端口綁定,而且需要記憶這種替代關系。在向外部網絡發送分組時,APT將分組內的源地址與端口號替換為新的地址/端口綁定;接收分組時,APT需要將分組中的地址/端口字段再用局域網內部的地址/端口綁定替換回來。

當APT接收到一個IPv6數據包,它用一個有地址映射關系的流ID(標識)來替代數據包中的原始流ID,映射過的流ID用其他的地址/端口綁定來替代數據包中源或目的地址/端口綁定。APT的配置字符串決定了這種替代關系的具體處理過程。除上述討論的動態分配之外,APT也可處理其他一些簡單形式的地址/端口轉換,例如靜態和動態單一的地址轉換。
APT對來自外部和內部網絡的數據包的處理方式是不同的。APT經常是針對一定方向的數據包分配動態地址映射。這樣另一個方向的初始化流將不能進行地址映射。Outward分組指的是由本地網絡發出目的是因特網(IPv4或IPv6)主機的數據包,Inward分組則相反。APT有兩個輸入口和兩個輸出口,分別用于Outward分組和Inward分組的接收與發送。APT從不同的輸入口接收數據包,經過轉換后再從不同的輸出口轉發出去。
2.2基于IPv6實現IPv4/IPv6
轉換的APT
APT僅接收和發送含有IPv6地址的IPv6數據包。為使GT64可以同時處理IPv4/IPv6兩種模式,當與只支持IPv4的主機通信時,GT64會分配臨時的IPv4地址給其內部IPv6主機,而基于IPv6的APT則給其內部IPv6主機分配支持IPv4映射的IPv6地址。
當GT64要將IPv6分組轉換為IPv4分組時,APT首先將IPv6地址和端口映射為與IPv4地址有映射關系的IPv6地址與端口號;然后再將這個映射地址轉換為真正的IPv4地址,從而實現IPv6分組向IPv4的轉換。從IPv4到IPv6分組的轉換過程也與此相似。先將IPv4地址轉換成為具有映射關系的IPv6地址/端口號,然后再將這個地址/端口號綁定轉換成為真正的IPv6地址和端口號。
2.3靜態映射與動態映射
APT可以將主機的實際地址和端口號映射成為一個全球性的地址/端口綁定。靜態映射功能是指內部網絡的地址/端口綁定與全球性地址/端口綁定之間的映射關系是靜態的。在大多數情況下,靜態映射被用作單一地址映射的情況。例如一定的外部地址將會被保留,以標志特定的內部地址。與靜態映射相對,動態映射僅對活動的數據流保留映射關系。
2.4動態地址映射與
動態地址/端口映射
動態地址映射是指APT僅為內部主機動態分配一個外部地址映射,而不是一個地址/端口綁定。APT將直接使用映射過的地址來指明此內部節點,同時以映射過的流ID來代替原始流ID。在這個映射過程中,APT不僅要動態分配一個外部地址映射,而且原來的端口號也要被映射為新的端口號。與動態地址/端口映射不同的是,動態地址映射只是替代分組頭部中的一個地址字段,而保留流ID中的其他3個部分。對于向外的數據包,它以映射地址來取代原有的源地址字段;對于向內的數據包,它以內部節點的實際地址來取代分組中的目的地址,這也就是映射地址。
3APT的配置
配置字符串為動態映射和靜態映射指定了映射規則,用戶可以使用配置字符串來控制APT,配置字符串的變量由逗號分隔。圖2給出一個IPv6局域網與IPv4因特網連接時APT配置實例。APT被配置為靜態的地址映射和動態的地址/端口映射。
首先,配置字符串指定了靜態地址映射的規則和數量。第1個參數是靜態映射的數量。第2個參數StaticPortMapping是一個布爾變量,表明了APT是否作靜態地址映射。圖2中,第1個參數Number_of_Static_Mappings的值是1,表明只有一個靜態地址映射;第2個參數StaticPortMapping的值是0,表明APT為地址映射作靜態轉換。
接下來的StaticPortMapping部分是對靜態映射的詳細描述,表達式從StaticMapping1一直到StaticMappingm。這m個參數對應于m個靜態映射。依照靜態端口映射的值,每一個靜態映射都包含有2到4個字符串的屬性描述,具體包含幾個字符串與StaticPortMapping的值有關。以靜態地址映射為例,如果StaticPortMapping的值是0,那么屬性描述為兩個字符串,分別為內部的和外部的IPv6地址;當StaticPortMapping的值為1時,靜態映射包含4個字符串,分別描述內部網絡的IPv6地址和節點端口號,以及映射過的IPv6地址和節點端口號。
圖2中,APT靜態地將內部地址::3ffe:1ce1:2::1映射為外部網絡的有效地址::18.26.4.115。APT在發出的數據包中以::18.26.4.115取代了原地址::3ffe:1ce1:2::1。在數據接收的過程中,若有一數據分組指向::18.26.4.115,則APT會將其目的地址替代為內部網絡地址::3ffe:1ce1:2::1。
其次,配置字符串也表明了可有多個映射規則提供給動態映射。DynamicMapping參數是一個布爾型變量,用來表明APT是否進行了動態地址映射。如果值是1,APT將會使用許多特定于動態地址映射的參數。下一個參數DynamicPortMapping決定APT是進行地址/端口映射還是只進行地址映射。大多數的APT配置都含有后者,例如圖2,因為動態地址/端口映射允許一個全球性的地址被幾個有效的流同時復用。
第三,參數AddressAllocationDirection決定APT能否分配一個新的映射,例如當接收到一個沒有經過映射的分組時。這個參數有兩個值:1(代表向內)和0(代表向外)。在沒有特殊指定時,系統默認參數取“0”值。當地址轉換是由局域網內部指向外部時,則要將AddressAllocationDirection指定為向外,如圖2。但是,當GT64被用作其他的情況時,例如網絡服務器負載平衡時,APT將會分配新的映射給那些來自外部的新的有效流,這時該參數方向應改為向內。負載平衡是指將在一個網絡地址上的負載分配到幾個內部節點上去。GT64為負載平衡所處理的數據流是來自于外部的。參數AddressAllocationDirection標為內部的,這樣將允許APT為這些流分配映射。最后,配置字符串決定了動態分配全球性的IPv6地址和端口的范圍。如果動態映射并沒有動態端口映射功能,保留的參數則是IPv6地址。在地址/端口映射中,保留的參數是3個參數的組合(Mapped_IPv6AddressPort_StartPort_end)。這表明當一個有效流經過APT時可以被動態分配一個IPv6地址和端口的范圍。當多部隸屬同一局域網的主機希望共享一個全球性的IPv6地址時,所采取的方法是復用一個標記過的IPv6地址,并可以傳遞許多IPv6主機的標識符。
在圖2中,最后一個參數表明了端口6000至6010的含IPv4映射的IPv6地址,::18.26.4.115是可以被復用的映射地址。若同時復用10個地址/端口綁定,則APT可以同時處理10個有效流。
4協議轉換器的設計
GT64一個非常重要的應用是允許只支持IPv6的節點和只支持IPv4的節點進行通信。從IPv6節點向IPv4節點傳送一個包或者其逆過程都要涉及協議轉換以及地址和端口的轉換。PT64和PT46用于連接基于IPv6的APT,并對需要進行轉換的分組完成協議轉換。PT64用于將只支持IPv6的本地節點的IPv6包發送到只支持IPv4的因特網節點上。APT將源地址和端口所組成的套接字轉換成IPv4映射型IPv6套接字。PT64將包中的IPv6頭轉換成IPv4頭和將IPv6地址的最低32比特作為有效的IPv4地址。
同樣,一個IPv4包從一個只支持IPv4的節點發送到一個只支持IPv6的節點需要經過PT46和APT以完成轉換。PT46通過將源和目的地址加上96比特的前綴轉換成IPv4映射型IPv6地址,從而將IPv4頭轉換成IPv6頭。APT然后將目的IPv4映射型IPv6地址映射進IPv6地址。APT處理地址映射和分配,PT64和PT46只負責協議轉換。因為是模塊化設計,所以PT64和PT46的實現是很容易的。在進行包協議轉換之后,PT64和PT46都需要對高層協議(例如TCP,UDP)的校驗和重新計算。TCP和UDP根據一個偽隨機頭部計算它們的校驗和,這個偽隨機頭部包括(IPv4/IPv6)的源地址和目的地址、高層包長度和協議(下一頭部)字段。當從IPv6向IPv4轉換的時候,PT64必須計算IPv4頭部所需要的IP校驗和。然而,PT46并不需要計算IPv6校驗和,因為IPv6頭部沒有這一字段。
ICMPv6和ICMPv4在校驗和的計算上同樣是不同的。PT46必須按照TCP和UDP的樣式來計算ICMPv6,因為ICMPv6的計算中包含了偽隨機頭部。然而,PT64能直接從ICMPv4包計算出ICMPv4的校驗和。在ICMPv4/ICMPv6相互轉換的過程中,校驗和值的不同必須考慮進去。
5結論
顯然,因特網從IPv4向IPv6轉變將需要很長一段時間。每個站點都必須考慮自己的過渡計劃。只有很少的站點能夠一步到位地完成轉變。對于大多數的站點來說,NAT將作為一種機制而被采用,它可以使得只支持IPv4和只支持IPv6的節點之間能夠相互通信。
GT64可以滿足一個好的網絡轉換器所必須的3個最基本的要求:能夠在只支持IPv6的節點和只支持IPv4的節點之間完成通信;在信源主機和目的主機上不需要進行任何改變;應用簡單。模塊化的設計和擴展方便使得GT64成為強大的網絡通信工具。GT64的進一步發展將推動互聯網更快地向IPv6領域邁進。□
參考文獻
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國際發展與研究專業在讀博士。原就讀于南京大學少年班計算機科學系,1995年赴美就讀于新澤西Rutgers大學,1997年獲城市規劃專業碩士學位,1998年轉MIT攻讀電子科學與計算機科學系碩士學位和國際發展與研究博士學位,2001年獲計算機科學碩士學位。研究方向為通信與計算機及其發展。
范忠禮,南京郵電學院網絡研究室主任,教授。研究方向IP網絡及寬帶城域以太網(WMEN)技術。曾獲部、省二、三等科技進步獎。發表文章40余篇。