摘要:通信工程師網(wǎng)絡地址轉換/協(xié)議轉換技術:隧道技術一般用于IPv6節(jié)點間的通信,而對于IPv4和IPv6節(jié)點間的通信,采用直接對IPv4和IPv6報文進行語法和語義翻譯的網(wǎng)絡地址轉換/協(xié)議轉換(NAT/PT)技術。
4.8.3.3 網(wǎng)絡地址轉換/協(xié)議轉換技術
隧道技術一般用于IPv6節(jié)點間的通信,而對于IPv4和IPv6節(jié)點間的通信,采用直接對IPv4和IPv6報文進行語法和語義翻譯的網(wǎng)絡地址轉換/協(xié)議轉換(NAT/PT)技術。基本工作原理如圖4-47所示,當IPv6子網(wǎng)中有IPv6分組發(fā)給網(wǎng)關時,網(wǎng)關將其轉化成IPv4分組發(fā)向IPv4子網(wǎng):反過來當IPv4子網(wǎng)中有數(shù)據(jù)分組要發(fā)送時,網(wǎng)關就將其轉化成IPv6分組發(fā)向IPv6子網(wǎng)。轉化網(wǎng)關要維護一個IPv4和IPv6地址的映像表。

NAT/PT(NetworkAddressTranslation/ProtocolTranslation)技術是在SIIT(State-lessIP/ICMPTranslator)技術上發(fā)展起來的。SIIT是一種網(wǎng)絡層的翻譯技術,NAT/PT技術主要是按照協(xié)議規(guī)范規(guī)定的報頭格式對IPv4和IPv6的協(xié)議進行轉化,從而連接IPv4和IPv6兩個部分。協(xié)議轉化分為兩個部分,一個是IPv4和IPv6地址的轉化,另外一個是IPv4和IPv6報頭的轉化。
(1)地址轉換
IPv4的地址是32位,而IPv6的地址為128位,兩個地址格式不同的地址之間需要建立映像關系。有以下幾種建立方式:封裝IPv4地址為ADDR4類型,封裝IPv6地址為AD>DR6類型,封裝與IPv4兼容IPv6地址為ADDR64類型。
①DNS解析地址
為了擴展DNS使其支持IPv6,IETF先后定義了兩種新的資源記錄類型:AAAA和A6。為了實現(xiàn)IPv4和IPv6的轉化可以擴充DNS服務器,為IPv4或IPv6的網(wǎng)絡提供DNS服務器作“IP轉換欺騙”。IPv4主機(ADDR4)向DNS請求査詢的時候,如果DNS服務器發(fā)現(xiàn)目的主機只有IPv6地址(ADDR6),將會返回給該IPv4主機一個IPv4的地址(ADDR64)作為査詢結果。DNS服務器要和NAT-PT轉換網(wǎng)關實時的通信,保持ADDR4、ADDR6和ADDR64這3個地址之間對應關系的更新。這樣NAT-PT網(wǎng)關就可以根據(jù)這些信息進行地址/協(xié)議轉換。這種轉換同樣適用于當IPv6主機查詢DNS獲得IPv4地址的時候。
②IPv4和IPv6地址映像表
地址映像表將IPv4地址和IPv6地址分別看作內(nèi)部地址和全局地址,或者正好相反。內(nèi)部的IPv4主機和外部的IPv6主機通信時,將IPv4地址(相當于內(nèi)部地址)變換成IPv6地址(相當于全局地址),服務器維護一個IPv4與IPv6地址的映像表。反之,當內(nèi)部IPv6主機和外部IPv4主機進行通倍時,IPv6轉換為IPv4地址。執(zhí)行NAT/PT的主機上配置了一個地址映像表。這個映像表形如:
10.10.9.200beef:feed::1234:5678
3ffe:lcff::bead:ed:cafe:dffd100.10.9.188
③利用IPv4兼容IPv6地址
類似于::10.10.9.188這樣的IPv6地址稱為與IPv4兼容的IPv6地址。在v6結點要訪問v4結點的時候,可以使用這種地址作為IPv6結點去訪問v4結點時的目的地址。NAT/PT網(wǎng)關處理時只要把低32位取出來作為v4包的目的地址即可。對于IPv6地址來說,也可以使用這種與v4兼容的v6地址,但這就要求每個IPv6結點有對應的一個v4地址。
(2)報頭轉換
IPv4報頭和IPv6報頭之間有一些字段可以直接轉化,而一些字段是對方特有的,需要特殊處理。
①IPv4ToIPv6
在IPv4沒有分段的情況下,也就是IPv4.Df=0,這個時候偏移量也為0。IPv6的報頭轉換如下:
IPv6.Version=6:將版本變?yōu)?
IPv6.TrafficClass=IPv4.TOS:直接拷貝,或者按照語義予以翻譯IPv6.FlowLabel=0:可以全部置為0
IPv6.PayloadLength=IPv4.length-length(IPv4-header):新的IPv6中的負載長度定義為凈荷的長度,也就是總長度減去IPv4報頭和選項的長度IPv6.Nextheader=IPv4.Protocol:協(xié)議字段直接拷貝過來
IPv6.HopLimit=IPv4.TTL-l:逐跳限制和IPv4的生存時間含義相似,如果是跳數(shù)為0就要發(fā)出ICMP報文給源目的地
IPv6.SourceAddress=ADDR64(IPv4.SourceAddress):IPv4地址轉換得到的ADDR64地址
IPv6.DestinationAddress=ADDR64(IPv4.DestinationAddress):準備發(fā)送的目的地址。
IPv6ToIPv4
在IPv6沒有分段擴展報頭情況下,IPv6轉化到IPv4報頭的算法如下:
IPv4.Version=4:將版本變?yōu)?
IPv4.length=5:沒有選項擴展報頭的情況
IPv4.TOS=IPv6.TrafficClass:直接拷貝,或者按照語義予以翻譯
IPv4.TotalLength=IPv6.Payloadlength+IPv4.length:總長度設S
IPv4.Identification=zero
IPv4.Flags=0
IPv4.FragmentOffset=0
IPv4.Nextheader=IPv6.Protocol:協(xié)議字段直接拷貝過來
IPv4.TTL=IPv6.HopLimit-1:IPv4的生存時間和IPv6逐跳限制和含義相似,如果是0就要發(fā)出ICMP報文給源目的地
IPv4.HeaderChecksum=sum():需要對IPv4頭做一個校驗和IPv4.Protocol=IPv6.Nextheader:協(xié)議字段直接拷貝過來
IPv4.SourceAddress=ADDR64(IPv6.SourceAddress):IPv6地址轉換得到的AD-DR64地址
IPv4.DestinationAddress=ADDR64(IPv6.DestinationAddress):準備發(fā)送的目的地址。
返回目錄
編輯推薦
通信工程師備考資料免費領取
去領取
專注在線職業(yè)教育25年