陳仲華,沈成彬
(中國電信股份有限公司上海研究院 上海200122)
隨著Internet技術(shù)的廣泛應(yīng)用,作為其基礎(chǔ)的IPv4地址資源日漸匱乏,全球IPv4地址分布的不均衡性加重了地址需求的矛盾,使部分地區(qū)的IPv4地址提前出現(xiàn)短缺的局面。近期新興的物聯(lián)網(wǎng)應(yīng)用又增加了對IP地址的需求,這更加速了IPv4地址的消耗。雖然目前IPv4技術(shù)領(lǐng)域出現(xiàn)了諸如運營商NAT、RSIP等技術(shù),改善了目前IPv4公網(wǎng)地址短缺的現(xiàn)狀,但這些技術(shù)沒有從根本上解決地址短缺的問題,同時此類技術(shù)的使用又引入了NAT穿透等眾多問題,有較大的局限性。因此,部署基于IPv6技術(shù)的下一代互聯(lián)網(wǎng)成為徹底改變IP地址短缺情況的唯一技術(shù)手段。IPv6具有海量地址空間,可以滿足未來互聯(lián)網(wǎng)發(fā)展和新興物聯(lián)網(wǎng)發(fā)展的需要,但IPv6是一項與IPv4技術(shù)完全不同的技術(shù),其地址結(jié)構(gòu)、定義、地址分配方式與IPv4地址完全不同,從IPv4地址的應(yīng)用和管理到IPv6地址的應(yīng)用和管理還有許多問題需要研究。
IPv6地址分為單播地址、多播地址和任播地址。
(1)單播地址
大家所熟悉的IPv4地址是采用點分十進制數(shù)的形式表示的,即D.D.D.D,其中D為不大于255的正整數(shù),例如192.168.10.1,這樣IPv4就擁有超過40億個地址。
與IPv4地址組成形式不同,IPv6地址采用冒號分割8個4位十六進制數(shù),即X:X:X:X:X:X:X:X,其中X表示一個4位的十六進制數(shù),例如:2001:000C:0000:0000:0022:FAFF:FE8E:8072。
圖1 根據(jù)主機物理地址生成接口地址方式
與IPv4地址分為網(wǎng)絡(luò)號(子網(wǎng)號)和主機號的思想類似,IPv6地址也可以分為兩部分,即地址前綴和接口地址。在實際應(yīng)用中,IPv6地址的前綴由于要參與路由,通常由網(wǎng)絡(luò)決定。而IPv6地址的后綴則有多種生成方式。
最常用的一種生成方式是根據(jù)主機設(shè)備的物理層地址生成,稱為EUI-64算法。其過程如圖1所示。
主機自身的MAC地址分為兩部分,即設(shè)備廠商標(biāo)識和設(shè)備標(biāo)識,在生成IPv6接口地址時,主機將廠商標(biāo)識和設(shè)備標(biāo)識分開,并在中間插入FFFE,同時物理地址的第一字節(jié)的右邊第二位如果為0,則將該位變?yōu)?,這樣就構(gòu)成了主機IPv6接口地址,這樣的接口地址可以簡化IPv6和物理地址的映射關(guān)系,使鏈路層的通信更加方便。
另一種接口地址采用IPv4地址嵌入的方式生成,其接口地址格式為:X:X:X:X:D.D.D.D。其中X為4位十六進制數(shù),D為小于255的十進制數(shù),X可以隨機生成,而D則根據(jù)主機當(dāng)前使用的IPv4地址直接生成。這種地址嵌入了主機當(dāng)前的IPv4地址,有利于實現(xiàn)IPv4與IPv6的兼容。
此外,IPv6接口地址還可以通過各種隨機方式生成,但無論采用何種方式,生成的IPv6地址都必須經(jīng)過地址沖突檢測,才能夠正式在網(wǎng)絡(luò)上使用,以防止在同一子網(wǎng)絡(luò)內(nèi)產(chǎn)生地址沖突。
從目前業(yè)內(nèi)的設(shè)備支持情況看,對于單播地址中接口地址的生成方式,一般都會采用EUI-64的算法,生成接口地址。由于這一算法的廣泛部署(幾乎所有的操作系統(tǒng)都支持這種算法生成接口地址),IPv6地址從本質(zhì)上來將被人為地分成了前64 bit和64 bit兩個部分。從網(wǎng)絡(luò)側(cè)地址管理的角度來看,IPv6地址的管理實際上已經(jīng)演變成為對IPv6地址前綴的管理。
圖2 IPv6多播地址格式
(2)多播地址
在IPv6中多播取代了IPv4中的廣播功能,IPv6多播地址的劃分比IPv4更嚴(yán)格,同時對于多播功能的支持也更完善。IPv6多播地址的格式如圖2所示。
多播地址以FF開頭,之后的4個比特位為標(biāo)志位,再之后的4個比特位標(biāo)識多播的有效范圍,其后的112 bit標(biāo)識多播組的ID。標(biāo)志位的主要功能是表示該多播是否為一個全球公開的多播組,同時還提供了不同多播域之間進行信息交互的標(biāo)志。范圍標(biāo)識表示該多播組的有效范圍是本地鏈路,還是一個預(yù)先設(shè)定的管理域,抑或是全球范圍。多播組編號則表示了這個多播組的身份,有需要的節(jié)點可以通過組編號加入這個多播組中。
IPv6多播的應(yīng)用程度遠勝于IPv4多播,在IPv6協(xié)議族中,并不存在類似于IPv4中的ARP/RARP一類的二層地址解析協(xié)議以及ARP/RARP以來的廣播方式。取而代之的是,在IPv6網(wǎng)絡(luò)中二層地址的解析依賴于IPv6的多播。例如,一臺IPv6主機需要查詢本地網(wǎng)絡(luò)中是否已經(jīng)有主機使用與其相同的IPv6地址時,它將通過多播地址FF02::2發(fā)送這個請求。
(3)任播地址
任播地址可以看作一組特殊的單播地址,它分配給一系列的節(jié)點,在轉(zhuǎn)發(fā)去往該地址的數(shù)據(jù)時,路由器將根據(jù)這些節(jié)點的路由距離大小轉(zhuǎn)發(fā)到其中的一個最佳節(jié)點,從而完成負載均衡、節(jié)點冗余等功能。
在IPv6技術(shù)的實際使用中,由于IPv6擁有海量地址空間,分配和管理這一海量地址空間的難度要遠遠大于IPv4的地址管理難度。因此,根據(jù)實際使用的需要出現(xiàn)了一些新的地址分配方式。目前IPv6技術(shù)中有3種主流的地址分配方式,可以適應(yīng)不同應(yīng)用場合的需要。
圖3 無狀態(tài)地址分配過程
(1)無狀態(tài)地址分配
無狀態(tài)地址分配(NDRA)是IPv6中特有的地址分配方式,其基本思想是網(wǎng)絡(luò)側(cè)不管理IPv6地址的狀態(tài),包括節(jié)點應(yīng)該使用什么樣的地址、地址的有效期有多長,且基本不參與地址的分配過程。其具體的分配過程如圖3所示。
節(jié)點設(shè)備連接到網(wǎng)絡(luò)中后,將自動選擇接口地址(通過算法生成IPv6地址的后64 bit),并加上FE80的前綴地址,作為節(jié)點的本地鏈路地址,本地鏈路地址只在節(jié)點與鄰居之間的通信有效,路由器設(shè)備將不路由以該地址為源地址的數(shù)據(jù)分組。在生成本地鏈路地址后,節(jié)點將進行DAD(地址沖突檢測),檢測該接口地址是否有鄰居節(jié)點已經(jīng)使用,如果節(jié)點發(fā)現(xiàn)地址沖突,則無狀態(tài)地址分配過程將終止,節(jié)點將等待手工配置IPv6地址。如果在檢測定時器超時后仍沒有發(fā)現(xiàn)地址沖突,則節(jié)點認為該接口地址可以使用,此時終端將發(fā)送路由期前綴通告請求,尋找網(wǎng)絡(luò)中的路由設(shè)備,當(dāng)網(wǎng)絡(luò)中配置的路由設(shè)備接收到該請求,則將發(fā)送地址前綴通告響應(yīng),將節(jié)點應(yīng)該配置的IPv6地址前64 bit的地址前綴通告給網(wǎng)絡(luò)節(jié)點,網(wǎng)絡(luò)節(jié)點將地址前綴與接口地址組合,構(gòu)成節(jié)點自身的全球IPv6地址。
無狀態(tài)地址分配是一種簡化IPv6海量地址分配復(fù)雜程度的技術(shù),通過使用該技術(shù)可以做到節(jié)點連接網(wǎng)絡(luò)的即插即用。在實際應(yīng)用中接口地址的生成可以由多種算法生成。同時,也可以由網(wǎng)絡(luò)側(cè)根據(jù)接入節(jié)點的身份認證信息為節(jié)點指定固定的接口地址。
(2)有狀態(tài)地址分配
有狀態(tài)的地址分配(DHCPv6)技術(shù),類似于IPv4時的DHCPv4技術(shù),節(jié)點接入網(wǎng)絡(luò)后將發(fā)起地址請求的多播,網(wǎng)絡(luò)中的DHCP服務(wù)器接收到該多播后,為節(jié)點動態(tài)分配IPv6的地址。同時,DHCP服務(wù)器需要管理節(jié)點IPv6地址的使用有效期。與DHCPv4類似,DHCPv6協(xié)議也可以攜帶節(jié)點身份認證的選項參數(shù),根據(jù)節(jié)點身份的認證結(jié)果為節(jié)點分配指定的IPv6地址。
(3)基于地址前綴代理的分配
基于地址前綴代理的分配(DHCP-PD)方式是一種層次化分配IPv6地址的方式。該方式允許網(wǎng)絡(luò)中的網(wǎng)關(guān)設(shè)備將IPv6地址的前綴以層次化的方式分配給下一級的接入網(wǎng)關(guān)設(shè)備,其過程如圖4所示。
圖4 DHCP PD地址分配過程
以圖4為例,網(wǎng)絡(luò)接入設(shè)備(可以是接入路由器或BRAS設(shè)備)收到用戶側(cè)網(wǎng)關(guān)設(shè)備發(fā)起的攜帶有前綴代理選項的DHCP請求時,將下發(fā)一個攜帶56 bit前綴地址長度的DHCP響應(yīng)分組,通知用戶側(cè)網(wǎng)關(guān)網(wǎng)絡(luò)已將該56 bit地址前綴批發(fā)給用戶網(wǎng)關(guān)。用戶網(wǎng)關(guān)在獲得該56 bit地址前綴之后可以自主選擇為終端分配該網(wǎng)絡(luò)內(nèi)的任意64 bit的子網(wǎng)絡(luò)號作為終端的前綴地址,并通過無狀態(tài)地址分配的方式分配給終端使用。也可以選擇將這56 bit的地址前綴再分割成小于64 bit的前綴地址長度,以DHCP-PD方式批發(fā)給下一級網(wǎng)關(guān)使用。
在IPv6網(wǎng)絡(luò)中,地址的分配和管理難度要遠大于IPv4網(wǎng)絡(luò),這不僅由于IPv6龐大的地址空間,使得網(wǎng)絡(luò)側(cè)如果直接維護所有地址狀態(tài)(類似于DHCPv4方式),將給網(wǎng)絡(luò)側(cè)的地址分配和管理系統(tǒng)造成巨大的性能壓力,同時也是因為IPv6技術(shù)本身更關(guān)注于地址的移動性。因此,從3種地址分配的方式看,各有其優(yōu)點和劣勢。
(1)無狀態(tài)地址分配方式
其優(yōu)點在于網(wǎng)絡(luò)側(cè)只需要管理地址前綴的分配,網(wǎng)絡(luò)側(cè)自動將網(wǎng)絡(luò)前綴的分配情況通過RA(router advertisment,路由器通告)告知終端,終端獲得地址前綴之后,就能夠根據(jù)自身算法獲得全局唯一的IPv6地址,網(wǎng)絡(luò)側(cè)由于不需要管理終端地址,因此其地址分配和管理的性能壓力幾乎沒有。同時,無狀態(tài)地址分配方式特別適合移動網(wǎng)絡(luò)場景,當(dāng)終端在不同基站和業(yè)務(wù)接入點設(shè)備間移動時,只需要接收路由設(shè)備的RA報文,即可以更換自身的IPv6地址,以滿足報文路由的需要。
(2)DHCPv6地址分配方式
DHCPv6地址分配方式沿用原有IPv4網(wǎng)絡(luò)的DHCPv4地址分配方式,這一分配方式采用與原有DHCPv4一樣的C/S協(xié)議架構(gòu),因此雖然協(xié)議報文結(jié)構(gòu)與DHCPv4差異較大,但是DHCPv6在實際部署中,仍然具有很好的兼容性。同時,DHCPv6協(xié)議在功能上也較DHCPv4協(xié)議有所提升,例如DHCPv6協(xié)議可以由網(wǎng)絡(luò)側(cè)DHCP服務(wù)器主動要求終端釋放地址,而不像DHCPv4協(xié)議,網(wǎng)絡(luò)側(cè)只能夠等待終端地址租期到期,才能夠通過續(xù)租失敗來迫使終端釋放地址,這個功能目前看來,IPoE接入場景下,對于IP地址的管控有著很明顯的優(yōu)勢。但是,由于DHCPv6需要在網(wǎng)絡(luò)側(cè)對地址進行集中的管理,包括地址使用的有效期檢測等,因此對于管理系統(tǒng)的性能將造成壓力,因此在一個大規(guī)模的網(wǎng)絡(luò)中完全依賴DHCPv6方式進行地址的分配和管理,存在一定的風(fēng)險。
(3)DHCP-PD方式
DHCP-PD方式是IPv6網(wǎng)絡(luò)中特有的地址分配方式,其本意是為了減少網(wǎng)絡(luò)側(cè)地址管理的壓力,而引入的地址分層管理和地址批租機制。就地址分配協(xié)議本身看,DHCP-PD完全采用DHCPv6的協(xié)議格式,并通過DHCPv6的Option擴展支持地址的分層管理。因此,DHCP-PD同樣具有較好的兼容性。同時,由于引入了批租機制,地址可以成段地分配到最低層次的網(wǎng)絡(luò)中,使得在固定接入方式下,為每個終端分配一個IPv6地址成為可能。但是,DHCP-PD的地址分配機制對于地址管理的層次性有著很高的要求,下一級地址完全取自上一級地址段范圍,使得這種地址分配方式只能適合有較好規(guī)劃,且網(wǎng)絡(luò)組織基本固定的網(wǎng)絡(luò)架構(gòu),不太適合網(wǎng)絡(luò)結(jié)構(gòu)變化頻繁或有較高移動性要求的網(wǎng)絡(luò)。最后,由于DHCP-PD是一種網(wǎng)絡(luò)地址前綴的分配方式,對于最終終端的地址,DHCP-PD還是要結(jié)合DHCPv6或者無狀態(tài)地址分配為終端進行地址的分配。
由于上述IPv6地址分配方式的優(yōu)缺點不同,因此需要針對IPv6網(wǎng)絡(luò)場景的不同進行地址分配和管理方式的設(shè)計,才能夠滿足地址分配管理的要求。
首先,對于傳統(tǒng)PPPoE方式的固定接入網(wǎng)絡(luò),在網(wǎng)絡(luò)支持IPv6之后,初期從兼容性方面考慮,可以沿用DHCP地址分配方式,在不改變網(wǎng)絡(luò)基本架構(gòu)的前提下,在BRAS設(shè)備上開啟DHCPv6的服務(wù),為終端分配IPv6地址。在IPv6終端數(shù)量增長到一定程度,網(wǎng)絡(luò)側(cè)管理地址遇到性能瓶頸時,啟用DHCP-PD將地址段批租到低一層次的接入設(shè)備(如家庭網(wǎng)關(guān))上進行管理,以減輕網(wǎng)絡(luò)側(cè)的壓力,同時在終端網(wǎng)絡(luò)內(nèi)部仍舊可以采用DHCPv6方式給終端分配IPv6地址。這一方式同樣適合采用IPoE方式接入的網(wǎng)絡(luò),例如WLAN和IPTV網(wǎng)絡(luò)。
其次,在移動網(wǎng)場景中,由于終端存在較強的移動性,采用無狀態(tài)地址分配方式將會是一種較好的選擇。當(dāng)終端移動到一個新的網(wǎng)絡(luò)中時,接收這個網(wǎng)絡(luò)中的路由器通告的IPv6地址前綴,同時結(jié)合終端自身生成的接口地址,就能夠使終端配置一個有效的IPv6地址。當(dāng)終端從當(dāng)前網(wǎng)絡(luò)中移走,并進入下一個新網(wǎng)絡(luò)時,由于終端接收到的路由器地址通告發(fā)生了改變,因此終端可以知道自身所處的網(wǎng)絡(luò)發(fā)生了改變,從而觸發(fā)終端更新其自身的IPv6地址。此外,由于終端可能同時接收到兩個網(wǎng)絡(luò)的路由器通告,因此,終端也可能同時接入到兩個網(wǎng)絡(luò),并實現(xiàn)負載均衡的功能。
最后,對于一些物聯(lián)網(wǎng)IPv6接入場景,由于終端運算能力有限,代碼存儲能力也有限,不可能要求終端支持完整的IPv6協(xié)議和DHCPv6協(xié)議棧,在終端層面采用無狀態(tài)地址分配方式是一種較好的選擇。在這樣的網(wǎng)絡(luò)中,物聯(lián)網(wǎng)網(wǎng)關(guān)設(shè)備可以通過DHCPv6/DHCP-PD協(xié)議獲取一個或一段IPv6地址,并采用無狀態(tài)地址分配方式向物聯(lián)網(wǎng)內(nèi)部宣告這一地址前綴,終端節(jié)點在獲得前綴之后能夠通過簡單算法就能生成自身有效的IPv6地址,實現(xiàn)對外通信。
在引入IPv6時,首先遇到的問題就是IP地址格式的改變和地址分配方式的變化,這些改變給傳統(tǒng)的IP地址的管理提出了一些新的需求?;谶@些新的需求,目前相關(guān)技術(shù)組織已經(jīng)研發(fā)了多種不同的地址分配方式,但是這些方式?jīng)]有哪一種可以單獨滿足IPv6地址分配和管理的方方面面的要求,也沒有哪一種可以單獨滿足所有IPv6部署場景。因此,對于IPv6地址的分配和管理,必須采用多種技術(shù)相結(jié)合的方式,分網(wǎng)絡(luò)場景采用不同的組合,才能滿足實際網(wǎng)絡(luò)的各種要求。
1 RFC4862.IPv6 Stateless Address Autoconfiguration,2007
2 RFC4291.IP Version 6 Addressing Architecture,1998
3 RFC3633.IPv6 Prefix Options for Dynamic Host Configuration Protocol(DHCP)Version 6,2003