城域網IPv6過渡技術—MAP技術
在IPv4向IPv6網絡演進的浪潮中,存在著兩對主要矛盾的較量,一對是IPv4地址短缺和IPv4業務蓬勃發展之間的矛盾,另一對是IPv6海量的地址空間和IPv6應用的匱乏之間的矛盾。在IPv4方面通過地址復用(A+P)方式似乎緩解了IPv4快速消耗的壓力,但是NAT設備投入巨大,各類業務應用也或多或少受到影響。在IPv6發展方面,用戶、ICP、ISP以及運營商對IPv4地址枯竭的敏感度不一致,從而導致IPv6產業鏈發展不平衡,各方面在積極推動IPv6發展的同時都或多或少存在顧慮。同時兩對矛盾又互相制約,IPv4地址共享機制似乎又減緩了IPv6產業鏈的發展,IPv6產業鏈的不斷發展似乎又在考驗著IPv4地址共享機制的部署規模。
為了保持IPv4業務持續性和促進IPv6產業的發展性,4over6場景憑借其兼顧IPv4業務和IPv6發展的特點,成為長期演進方案研究的焦點。在4over6場景中,MAP技術結合了無狀態和雙重翻譯/封裝技術,成為目前IETF關注度***的解決方案。MAP(Mapping Address and Port)技術是指無狀態地對地址和端口進行復用,根據報文格式又分為雙重封裝MAP-E和雙重翻譯MAP-T兩種。MAP技術文稿目前是IETF的WG draft狀態(截止2013年11月)。
MAP技術定義了在IPv6-only的網絡中承載IPv4和IPv6業務無狀態地址封裝/翻譯的機制。MAP-CE和MAP-BR作為邊界設備劃定了MAP Domain的區域,IPv4業務流僅存在于MAP Domain之外。
我個人認為,MAP技術的本質特征可以簡單總結為四個關鍵字,即共享、無狀態、分布、優化。
共享:采用A+P理念共享Public IPv4地址,即通過TCP/UDP層的端口號資源來擴展Public IPv4資源,分配Port-Set受限的IPv4地址實現多個用戶共享同一個IPv4地址。
無狀態:無狀態方式實現IPv4 A+P到IPv6地址映射。即通過MAP Rule實現IPv4地址+端口與IPv6地址的無狀態映射,解決CGN維護地址映射狀態的問題。
分布:NAT44分布到MAP CE實現。即秉承NAT卸載的理念,利用MAP CE的資源實現分布式NAT,解決集中式NAT44性能瓶頸的問題。
優化:優化流量轉發和提高網絡可靠性。即通過配置MAP Rule實現MAP CE間流量直接轉發,通過MAP-BR Pool實現負載分擔,同時由于無狀態映射的特點,MAP BR故障切換時無session同步需求,網絡可靠性更高。
MAP技術的實現需要考慮以下幾個關鍵問題:
IPv4地址和端口與IPv6地址之間遵循什么映射規則?
MAP域中是如何來規劃映射規則?又是如何進行規則下發的?
MAP-BR的Pool是如何實現?可靠性如何提升?
MAP場景下業務流量的報文格式是什么樣的?
#p#
IPv4地址和端口與IPv6地址之間遵循什么映射規則?
這是MAP技術要解決的***個問題,也是MAP技術的基礎。
首先,從IPv4地址和傳輸層port來看,32bit的IPv4地址容量有限,16bit的傳輸層端口(Transport port)目前使用不多,因此借用傳輸層端口來擴展IPv4地址是一個不錯的方法,這就是“A+P"的概念。
為了確保用戶使用的IP+Port-set的唯一性,需要將port-set進行有序劃分。由于傳輸層端口中有一些已經分配給特定的應用使用(比如80為http,20/21為ftp等),因此建議分配port-set是需要避免使用此類端口。在MAP中,我們將傳輸層端口號的16bit劃分為三部分,A、PSID和M。
關于A和a:因為0-1023是well-known端口區間,在MAP中建議擴展到0-4095(2^12),即建議a(=PSID offset)默認值是4(16-12)。A的取值為非零值,M的取值為任意值。若a=0,則標識全部port區間均可以分配。
關于PSID和k:PSID的長度k決定了共享比率,共享比率值=2^k,即傳輸層端口可以分成2^k份,每份共享給一個CPE使用,每個共享此IPv4地址的CPE獲得一個唯一的PSID,即獲得一段唯一的port-set。
關于m:M域的長度m決定了port-set中端口的連續長度,連續長度值為=2^m。
通過這樣的劃分,可以獲得2^k個port-set,每個port-set由唯一的PSID值標識,每PSID值對應的port-set含有((2^a)-1)*(2^m)的端口號。接下來,通過實例來體驗下port劃分過程。
給定共享比例R(=2^k=1024)和a(=PSID offset=4);
推算出: a=4,k=10,m=2;
列出PSID值和對應的port-set,
因此,對于給定的唯一PSID值,即獲得一組port-set。
然后,再考慮如何將IPv4地址和port-set與IPv6地址建立強關聯關系,形成無狀態映射?
MAP技術是通過IPv4地址的的一部分和端口的一部分特征值嵌入到IPv6地址中實現,IPv4地址選的的特征部分是IPv4-Addr-suffix,port-set選擇的是PSID,這樣將IPv4的地址信息和端口信息與IPv6地址建立了強關聯,此乃MAP設計的巧妙之處。
通過上圖對IPv4+Port與IPv6地址的映射關系可以看出,不管是MAP-CE還是MAP-BR,只要獲得End-user IPv6-prefix、Rule-IPv6-prefix、EA-bits、Rule-IPv4、PSID offset幾個值就推導出共享的IPv4地址和端口序列。
對于IPv6用戶而言,MAP-CE配置了End-user IPv6-prefix,可以通過Interface ID來生成用戶的IPv6地址,而對于IPv4用戶而言,不會生成類似于IPv6地址的鏈路本地地址,拿如何來生成標識IPv4屬性的Interface ID,進而合成代表IPv4地址的IPv6源地址呢?MAP技術采用IPv4 address和PSID的值組合形成Interface ID來標識IPv4共享型用戶,再與End-user IPv6-prefix一起合成IPv6地址,作為IPv4共享型用戶在MAP Domain中的唯一標識。
對于IPv4address字段,若分配了一個共享IPv4地址,則IPv4address字段填寫分配的IPv4地址,長度是32比特,如果分配了IP-prefix,即分配一段地址給IPv4用戶(有可能是個企業用戶),則IPv4address字段需要右填0補齊,比如給用戶分配IPv4-prefix="192.0.2.0/29",則此處IPv4address字段需要填寫"0xC0000200"(十六進制)。
對于PSID字段,若EA-bits位提取的PSID值不足16bit時,左填0補充,如:PSID=“0xAC”,則此處的PSID字段填“0x00AC”,如果分配了IPv4-prefix或者獨享的IPv4-address時,則沒有PSID值可以提取,則此處的PSID字段填寫“0x0000”。
至此,MAP域中的IPv4地址共享型用戶的IPv4地址和端口已經和IPv6地址建立了無狀態映射所需的強關聯關系,并可以構建IPv6地址在MAP域中唯一地標識此用戶。
#p#
MAP域中是如何來規劃映射規則?又是如何進行規則下發的?
在MAP技術中有三種MAP Rule,BMR(Basic Mapping Rule)、FMR(Forwarding Mapping Rule)和DMR(Default Mapping Rule),其中DMR在MAP-E中成為Destinations outside the MAP domain。
***條是BMR,是必選項,用于計算MAP CE的IPv4地址和port-set以及IPv6地址。BMR是需要配置在MAP域的每一個路由器上,配置在MAP-CE上用于將IPv4用戶數據進行NAT44和IPv6翻譯/封裝,配置在MAP-BR上用于將IPv4地址從IPv6報文中解封裝/解隧道,以及將回程流量的IPv4地址+port進行IPv6翻譯和封裝后,在MAP域中按照IPv6路由轉發到MAP-CE上。
BMR的配置的基本參數包括:Rule-IPv6-prefix、Rule-IPv4-prefix、EA-bits-length、PSID-offset,這些參數配置在MAP-CE上可以計算出共享的IPv4地址和端口序列,以及MAP-CE的IPv6地址,舉個實例分析下(參考上一節的映射圖)。
MAP-CE獲得屬于IPv6前綴信息:(DHCPv6正常分配)
End-user IPv6-prefix: 2001:db8:0012:3400::/56
通過BMR下發的信息如下:
Rule-IPv6-prefix : 2001:db8:0000::/40
Rule-IPv4-prefix : 192.0.2.0/24 (0xC0000200/24)
EA-bits-length : 16
PSID-offset(a) : 4 (default)
則推導出如下信息(MAP-CE的共享A+P和IPv6地址)
EA-bit : 0x1234
IPv4-suffix : 0x12 (p=32-24=8)
PSID : 0x34 (q=o-p=16-8=8)
IPv4-address : 192.0.2.18 (0xC0000212)
Port-set : 4928-4943, 9024-9039, ......, 62272-62287(a=4, A>0; PSID=0x34)
IPv6-address : 2001:db8:0012:3400:00C0:0002:1200:3400
在MAP Domain中可以按照IPv4子網邏輯劃分多個sub-domain,每個IPv4子網段作為一個sub-domain,這樣在sub-domain中所有MAP-CE配置的MR可簡化為一條。每個MAP-CE配置不同的End-user IPv6-prefix和相同的BMR即可。
第二條是FMR,是可選項,用于在mesh網絡中實現MAP-CE間的互訪流量直接通信,不需要通過MAP-BR中轉。這就是說在MAP-CE訪問其他MAP-CE時,目的IPv6地址應該是對端MAP-CE的地址。報文的源IPv6地址是BMR生成的,則目的MAP-CE的IPv6地址就成了FMR的轉換目標。前面也提到每個MAP-CE的BMR是相同的(在一定范圍),因此FMR和BMR也是可以相同的,即可以將BMR通過配置作為FMR。
舉例如下,在MAP-Domain域中配置BMR=FMR,當MAP-CE2用戶的IPv4業務訪問MAP-CE1用戶的IPv4業務時,在MAP-CE2上通過NAT44和BMR生成源IPv6地址,同時通過FMR生成目的MAP-CE1的IPv6地址。
前面兩個規則對于MAP-E和MAP-T均適用,在第三條規則上,MAP-E和MAP-T是不同的。
在MAP-T中定了“DMR",代表報文的目的IPv4地址為MAP Domain域外的地址,通過BR進行轉發到域外。DMR含有兩個參數Rule-IPv6-prefix和Rule-IPv4-prefix。Rule-IPv6-prefix的值是MAP BR的IPv6前綴,Rule-IPv4-prefix值是0.0.0.0/0,即在MAP-CE上匹配IPv4路由時作為默認路由適用的映射規則。在使用這條規則后,目的IPv6地址將通過DMR配置的Rule-IPv6-prefix+目的IPv4地址組成目的IPv6地址。
在MAP-E中,第三條規則為Destinations outside the MAP domain,更加明確的表征了規則的意義。由于MAP-E中是IPv6報頭嵌套IPv4地址,因此對于報文中目的IPv4地址是MAP域外的地址,只需要再封裝一層BR的IPv6地址即可,到達BR是直接剝掉IPv6報頭就可以還原目的IPv4地址。因此在MAP-E中Destinations outside the MAP domain就是配置MAP-BR的IPv6地址。
前面談了這些規則和屬性,那這些是通過何種協議進行配置呢?最容易想到的就是DHCPv6屬性,但是目前的DHCPv6屬性除了配置MAP域所需的End-user-IPv6-prefix之外,其他屬性還沒有定義,因此就有了draft-ietf-softwire-map-dhcp文檔,就是針對MAP-E、MAP-T以及lightweight 4over6(三種協議的特點就是均采用A+P理念)所需的屬性對DHCPv6進行了擴展。
在draft-ietf-softwire-map-dhcp中定義了五個DHCPv6 Option,它們分別是OPTION_S46_RULE,OPTION_S46_BR,OPTION_S46_PORTPARAMS,OPTION_S46_DMR,OPTION_S46_IPV4ADDRESS。另外定了針對MAP-E、MAP-T和LW46三個協議的三個Container,包含的DHCPv6 Option的關系如下。
對于每個具體的Option的內容,我就不一一進行介紹了,draft-ietf-softwire-map-dhcp都有明確定義,并且在成為RFC之前都是有可能被討論和更新的。
#p#
MAP-BR的Pool是如何實現?可靠性如何提升?”
在MAP域中通過將多個MAP-BR放在同一個Pool內實現負載分擔和保護倒換的。同一個Pool中的每個MAP-BR配置相同的Anycast IPv6 address和不同的IPv6 address。MAP-CE配置的BR地址是選用的Anycast IPv6 address。
Anycast IPv6 address是IPv6地址族里面一個特殊的地址類型,它是一組接口的標識符,送往一個任播播地址的包被傳送至該地址標識的接口之一(“路由最近”)。Anycast IPv6 address的這種特點可以實現負載分擔或者冗余備份機制。Anycast地址只能作為目的地址,不能用作源地址,因此需要為BR另外配置一個IPv6地址。
因為MAP屬于無狀態技術,因此對于流量上下行路徑不對稱的情況仍能正常轉發,例如上行CE3到BR-1,下行為BR2-CE3,由于BR-1和BR-2的MAP Rule相同,因此數據正常映射和轉發;MAP-BR無映射session維護,因此也無熱備技術需求。通過Anycast方式配置BR地址,CE通過路由選擇最近的BR進行轉發,實現BR流量的負載分擔和提高BR可靠性。
#p#
MAP場景下業務流量的報文格式是什么樣的
在MAP域中,網絡部署IPv6單棧協議。對于IPv6終端的業務流量是采用Native IPv6進行承載。對于IPv4終端的業務流量,需要在MAP-CE和MAP-BR之間(或者MAP-CE和MAP-CE之間)建立IPv6通道,根據對IPv4報文的封裝方式不同,可以分為MAP-E和MAP-T兩種方式。
MAP-E:封裝方式,即將IPv4報文再封裝一層IPv6報頭,外層為IPv6報頭,內層是IPv4報頭。
MAP-T: 翻譯方式,即將IPv4報頭翻譯成IPv6報頭,只有一層IPv6報頭。
通過個人理解,將MAP-E的數據處理流程做了一個簡單的示意,如下所示。
同理,個人理解,MAP-T的數據處理流程如下圖所示。
談到這里,肯定有人會問:MAP-E和MAP-T哪個更好呢?
其實每個技術都有其特點,對于MAP-E而言增加了一層IPv6報頭,增加了報文長度,有可能會引起MTU問題,但是這種封裝方式對IPv4的信息是完全保存下來,不破壞IPv4報文的其他屬性,即不存在IPv4報文信息的丟失。對于MAP-T而言通過IPv6報頭代替IPv4報頭,單層報頭的報文承載效率高,但是會造成IPv4報頭信息的丟失(感覺關鍵信息已經映射了,只有部分信息有所丟失而已)。
就我個人感覺而言,隧道方式(MAP-E)要優于翻譯方式(MAP-T),因此翻譯方式針對是報頭的翻譯,需要設備處理更多的映射關系,不僅僅是地址映射,并且經過兩級翻譯后的報文有可能跟起初的報文信息是不一致的。而隧道方式可以很大程度上保存IPv4報頭的完整性,只需要在部署時檢測鏈路的MTU即可。
原文鏈接:http://blog.csdn.net/hanlijin/article/details/17141591