国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

鋪設(shè)IPv4/IPv6“雙行道”

2010-11-09 13:44:34朱尚明李京黨齊民
中國(guó)教育網(wǎng)絡(luò) 2010年4期
關(guān)鍵詞:內(nèi)核路由器分組

文/朱尚明 李京 黨齊民

鋪設(shè)IPv4/IPv6“雙行道”

文/朱尚明 李京 黨齊民

在Linux系統(tǒng)下加載并運(yùn)行4over6隧道驅(qū)動(dòng),有效解決IPv4網(wǎng)絡(luò)通過(guò)IPv6主干網(wǎng)的互聯(lián)互通。

目前,大多數(shù)隧道機(jī)制都集中在解決IPv6邊緣網(wǎng)絡(luò)通過(guò)IPv4主干網(wǎng)互通的問(wèn)題,而關(guān)于IPv4網(wǎng)絡(luò)如何通過(guò)IPv6主干網(wǎng)互通問(wèn)題的解決方案卻很少提及。而且,由于當(dāng)前IPv6網(wǎng)絡(luò)還處于起步階段,IPv6業(yè)務(wù)的大規(guī)模部署還有待時(shí)日,造成IPv6骨干網(wǎng)中的大量帶寬閑置,利用隧道穿越IPv6骨干網(wǎng)來(lái)傳輸現(xiàn)有IPv4業(yè)務(wù)的數(shù)據(jù)也可以實(shí)現(xiàn)IPv6帶寬資源的充分利用。因此大量的IPv4網(wǎng)絡(luò)通過(guò)IPv6骨干網(wǎng)實(shí)現(xiàn)互聯(lián)是目前研究的一個(gè)熱點(diǎn),4over6隧道就是一種用于解決現(xiàn)存的IPv4網(wǎng)絡(luò)通過(guò)IPv6主干網(wǎng)互聯(lián)互通的機(jī)制。

4over6隧道機(jī)制

4over6隧道機(jī)制主要包括兩方面的功能:控制平面和數(shù)據(jù)平面??刂破矫娼鉀Q的問(wèn)題是如何通過(guò)隧道端點(diǎn)發(fā)現(xiàn)機(jī)制來(lái)建立4over6隧道,而數(shù)據(jù)平面則主要關(guān)注包括封裝和解封裝的分組轉(zhuǎn)發(fā)處理,如圖1所示。

4over6控制平面處理

4over6機(jī)制中,控制平面主要解決隧道端點(diǎn)發(fā)現(xiàn)和網(wǎng)絡(luò)可達(dá)性信息傳輸?shù)膯?wèn)題。4over6控制平面通過(guò)對(duì)邊界網(wǎng)關(guān)協(xié)議多協(xié)議擴(kuò)展MP-BGP,再進(jìn)行4over6擴(kuò)展來(lái)實(shí)現(xiàn)。當(dāng)4over6路由器的IPv4路由信息發(fā)生變化時(shí),路由管理模塊通知BGP協(xié)議,啟動(dòng)了4over6功能的BGP協(xié)議發(fā)送Update分組到其他對(duì)端路由器。對(duì)端4over6路由器收到Update分組后,在更新本地維護(hù)的封裝表的同時(shí),更新本地IPv4路由表,把相應(yīng)目的I P v 4地址的出接口設(shè)置為本地4over6虛接口??刂破矫娴臄?shù)據(jù)流動(dòng)方向見(jiàn)圖1的Control flow方向。

4over6數(shù)據(jù)平面處理

4over6數(shù)據(jù)平面主要包括3個(gè)部分:1.入口PE路由器將接收到的IPv4分組用IPv6頭部進(jìn)行封裝;2.封裝后的分組在IPv6骨干網(wǎng)中進(jìn)行傳輸;3.出口PE路由器將分組解封裝為原IPv4分組格式?;?over6分組傳輸?shù)奶攸c(diǎn),數(shù)據(jù)分組的封裝和解封裝在邊界路由器PE(雙棧路由器)上進(jìn)行。在實(shí)現(xiàn)時(shí),每個(gè)4over6 PE路由器維護(hù)一個(gè)4over6虛接口,該虛接口通過(guò)維護(hù)4over6封裝表來(lái)處理分組的封裝和解封裝。該封裝表的每個(gè)表項(xiàng)中包含了目的IPv4網(wǎng)絡(luò)的地址和掩碼,以及需要轉(zhuǎn)發(fā)到的出口PE路由器的4over6虛接口的IPv6地址。

當(dāng)IPv4數(shù)據(jù)分組到達(dá)入口邊界路由器PE1時(shí),PE1通過(guò)查找轉(zhuǎn)發(fā)表,發(fā)現(xiàn)并進(jìn)入本地虛接口進(jìn)行處理。在4over6虛接口處理中,通過(guò)查找4over6封裝表對(duì)分組進(jìn)行封裝,封裝的目的IPv6地址是出口邊界路由器PE2的虛接口IPv6地址,源地址為PE1的虛接口IPv6地址。經(jīng)過(guò)封裝后的分組通過(guò)IPv6骨干網(wǎng)絡(luò)傳輸?shù)匠隹谶吔缏酚善鱌E2。在收到分組后,PE2對(duì)分組進(jìn)行解封裝,再通過(guò)查找IPv4轉(zhuǎn)發(fā)表將原始分組轉(zhuǎn)發(fā)給相應(yīng)的IPv4網(wǎng)絡(luò)。數(shù)據(jù)平面的數(shù)據(jù)流動(dòng)方向見(jiàn)圖1的Data flow方向。

圖1 4over6機(jī)制

基于Linux的4over6隧道驅(qū)動(dòng)

Linux中的設(shè)備分為字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。4over6隧道設(shè)備是一種軟件設(shè)備,同時(shí)也是一種網(wǎng)絡(luò)設(shè)備。作為一個(gè)模塊,它既可被動(dòng)態(tài)地連接到正在運(yùn)行的內(nèi)核,也可以動(dòng)態(tài)地解除連接。圖2為4over6隧道虛擬設(shè)備內(nèi)核驅(qū)動(dòng)的結(jié)構(gòu)(見(jiàn)下頁(yè))。從圖中可以看到,4over6隧道虛擬設(shè)備內(nèi)核驅(qū)動(dòng)主要包括基本隧道、隧道協(xié)議以及特定隧道。

內(nèi)核模塊加載與內(nèi)核模塊卸載這兩個(gè)功能模塊是讓整個(gè)隧道正常工作的前提,前者進(jìn)行一些隧道虛擬設(shè)備的初始化工作,后者進(jìn)行與之對(duì)應(yīng)的清理工作。隧道協(xié)議注冊(cè)模塊產(chǎn)生的隧道協(xié)議實(shí)體是報(bào)文解封裝模塊的基礎(chǔ),基本隧道實(shí)體注冊(cè)模塊產(chǎn)生的基本隧道實(shí)體是隧道創(chuàng)建模塊的基礎(chǔ),而由隧道創(chuàng)建模塊產(chǎn)生的特定隧道是隧道錯(cuò)誤處理、報(bào)文封裝及解封裝等模塊的共同基礎(chǔ)。

隧道實(shí)體的內(nèi)核定義

4over6隧道設(shè)備實(shí)質(zhì)上是一種IPv6隧道,在Linux Kernel 2.4.20中,將IP隧道用結(jié)構(gòu)ip_tunnel來(lái)表示,但是該結(jié)構(gòu)的定義無(wú)法滿足IPv6隧道的需求。參考struct ip_tunnel的定義,本文將IPv6隧道在內(nèi)核

圖2 4over6隧道虛擬設(shè)備內(nèi)核驅(qū)動(dòng)的結(jié)構(gòu)

中用結(jié)構(gòu)ip6_tnl 來(lái)定義,其定義如下:

其中next為指向下一個(gè)IPv6隧道實(shí)體的指針,dev指向該隧道實(shí)體所包含的虛擬設(shè)備對(duì)象,recursion為數(shù)據(jù)報(bào)遞歸封裝的深度,parms則是隧道實(shí)體的屬性對(duì)象,包括隧道名稱、下一報(bào)頭、隧道起始地址以及流標(biāo)簽等屬性的IPv6隧道報(bào)頭。

4over6隧道協(xié)議實(shí)體定義為:

其中,ip46_rcv是隧道報(bào)文的接收處理函數(shù),專門負(fù)責(zé)將收到的IPv6數(shù)據(jù)包進(jìn)行重組(如果數(shù)據(jù)包在進(jìn)入隧道端點(diǎn)時(shí)進(jìn)行了分段處理),并解封裝還原成為IPv4數(shù)據(jù)包后轉(zhuǎn)交給上層模塊來(lái)處理;ip46_err是隧道報(bào)文傳輸過(guò)程中的錯(cuò)誤處理函數(shù)。在隧道設(shè)備的初始化的過(guò)程中,調(diào)用inet6_add_protocol函數(shù),將該協(xié)議實(shí)體注冊(cè)到Linux IPv6內(nèi)核協(xié)議棧中。

由于在隧道設(shè)備實(shí)際運(yùn)行時(shí),隧道實(shí)體的定位與查找比較頻繁,為了提高訪問(wèn)速度,將隧道實(shí)體以哈希表的形式進(jìn)行組織。其中哈希表大小(HASHSIZE)為32,哈希函數(shù)以128位的IPv6地址為參數(shù),將其劃分為4個(gè)部分(每一部分為32位),HASH(IPv6地址) = Part1 ^ Part2 ^ Part3 ^ Par&t4(HASHSIZE - 1)。當(dāng)一個(gè)起始地址被分別定位為local和remote的隧道時(shí),通過(guò)TUNNEL(HASH(local)^HASH(Remote))便能確定其所在的桶。

隧道實(shí)體的配置接口

隧道實(shí)體為內(nèi)核中的數(shù)據(jù)結(jié)構(gòu),而管理員在用戶態(tài)下對(duì)其進(jìn)行配置,因此需要一種用戶態(tài)與內(nèi)核態(tài)信息交互的機(jī)制。由于內(nèi)核態(tài)和用戶態(tài)使用不同的內(nèi)存定義,所以二者之間不能直接訪問(wèn)對(duì)方的內(nèi)存。而應(yīng)該使用Linux中的用戶和內(nèi)核態(tài)內(nèi)存交互函數(shù):

這兩個(gè)函數(shù)均返回不能被復(fù)制的字節(jié)數(shù),因此,如果完全復(fù)制成功,則返回值為0。4over6隧道實(shí)體在內(nèi)核中主要體現(xiàn)為虛擬網(wǎng)絡(luò)設(shè)備,因此配置程序采用傳統(tǒng)網(wǎng)絡(luò)設(shè)備的配置方法,即用ioctl系統(tǒng)調(diào)用來(lái)配置隧道。ioctl系統(tǒng)調(diào)用為設(shè)備驅(qū)動(dòng)程序執(zhí)行“命令”提供了一個(gè)設(shè)備特定的入口點(diǎn)。在用戶空間內(nèi)調(diào)用的ioctl函數(shù)一般具有如下原型:

通常原型中的“…”代表可變數(shù)目的參數(shù)表,cmd為命令字。在實(shí)際系統(tǒng)中,系統(tǒng)調(diào)用不會(huì)真正使用可變數(shù)目的參數(shù),而是必須有精確定義的參數(shù)個(gè)數(shù)。每一個(gè)設(shè)備都可以定義自己的ioctl命令字,命令編號(hào)的范圍是由SIOCDEVPRIVATE到SIOCDEVPRIVATE + 15。如果是上述這些命令,則會(huì)調(diào)用相關(guān)接口驅(qū)動(dòng)程序的dev->do_ioctl。該函數(shù)接收和通用ioctl函數(shù)相同的struct ifreq *指針,其原型如下:

針對(duì)IPv6隧道,它定義了4個(gè)命令字,這些命令字分別是SIOCGETTUNNEL、SIOCADDTUNNEL、SIOCCHGTUNNEL、SIOCDELTUNNEL。其中SIOCGETTUNNEL命令用于獲取隧道設(shè)備的相關(guān)屬性信息,其他3個(gè)命令分別對(duì)應(yīng)創(chuàng)建、更新以及刪除隧道。用戶空間通過(guò)ioctl系統(tǒng)調(diào)用,最終調(diào)用到內(nèi)核中定義的函數(shù)ip6ip6_tnl_ioctl。管理員提供的信息通過(guò)copy_from_user函數(shù),從用戶態(tài)復(fù)制到內(nèi)核態(tài),而配置程序的反饋信息則通過(guò)copy_to_user函數(shù),由內(nèi)核態(tài)復(fù)制到用戶態(tài)應(yīng)用程序。

編程實(shí)現(xiàn)

基于上述設(shè)計(jì)思想,本文對(duì)4over6隧道驅(qū)動(dòng)進(jìn)行了編程實(shí)現(xiàn)。編程實(shí)現(xiàn)的操作系統(tǒng)采用Red Hat Linux 9 + Kernel 2.4.20作為源碼,以GNU GCC為集成環(huán)境,開(kāi)發(fā)語(yǔ)言采用C語(yǔ)言。

由于該驅(qū)動(dòng)為內(nèi)核態(tài)驅(qū)動(dòng),故以內(nèi)核模塊的方式實(shí)現(xiàn)并加載?;舅淼缹?shí)體以哈希表的形式進(jìn)行組織,提高了隧道訪問(wèn)速度。

隧道虛擬設(shè)備調(diào)用ip46_tnl_xmit函數(shù)對(duì)到達(dá)隧道入口處的原始IPv4報(bào)文進(jìn)行封裝,使其進(jìn)入隧道;解封裝函數(shù)ip46_rcv對(duì)到達(dá)隧道出口處的報(bào)文進(jìn)行解封裝處理,并通過(guò)4over6隧道協(xié)議實(shí)體注冊(cè)到內(nèi)核IPv6協(xié)議棧中;函數(shù)ip46_err對(duì)隧道傳輸中所出現(xiàn)的錯(cuò)誤進(jìn)行處理,并翻譯為ICMPv4報(bào)文,發(fā)送給隧道入口節(jié)點(diǎn);隧道配置接口定義為ip46_tnl_ioctl函數(shù),它針對(duì)特定的命令執(zhí)行相應(yīng)的配置操作。

通過(guò)在Linux系統(tǒng)下加載并運(yùn)行該4over6隧道驅(qū)動(dòng),跨越校園IPv6網(wǎng)絡(luò)的兩個(gè)IPv4主機(jī)之間不但能夠成功地運(yùn)行Web、FTP、Telnet等各種不同類型的應(yīng)用,而且延時(shí)、丟包率、吞吐量等性能指標(biāo)都接近甚至優(yōu)于這兩臺(tái)IPv4主機(jī)之間直接互訪的性能。

(作者單位為華東理工大學(xué)信息化辦公室)

猜你喜歡
內(nèi)核路由器分組
萬(wàn)物皆可IP的時(shí)代,我們當(dāng)夯實(shí)的IP內(nèi)核是什么?
買千兆路由器看接口參數(shù)
強(qiáng)化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
分組搭配
基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計(jì)
Linux內(nèi)核mmap保護(hù)機(jī)制研究
怎么分組
分組
你所不知道的WIFI路由器使用方法?
無(wú)線路由器輻射可忽略
涟源市| 平乐县| 柘荣县| 土默特右旗| 藁城市| 潜江市| 乌鲁木齐县| 泸溪县| 丘北县| 石景山区| 九江县| 福建省| 固镇县| 祁阳县| 宜良县| 田林县| 扶沟县| 昌邑市| 乐安县| 昌平区| 泸州市| 商丘市| 抚顺市| 曲沃县| 灵武市| 资中县| 阳西县| 霍城县| 桑植县| 汉沽区| 山东省| 西安市| 吉水县| 远安县| 广安市| 芷江| 宁晋县| 乌鲁木齐县| 泾源县| 大英县| 华蓥市|