• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

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

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

    文/朱尚明 李京 黨齊民

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

    文/朱尚明 李京 黨齊民

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

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

    4over6隧道機制

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

    4over6控制平面處理

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

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

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

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

    圖1 4over6機制

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

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

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

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

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

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

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

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

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

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

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

    隧道實體的配置接口

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

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

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

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

    編程實現(xiàn)

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

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

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

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

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

    猜你喜歡
    內(nèi)核路由器分組
    萬物皆可IP的時代,我們當夯實的IP內(nèi)核是什么?
    買千兆路由器看接口參數(shù)
    科教新報(2022年24期)2022-07-08 02:54:21
    強化『高新』內(nèi)核 打造農(nóng)業(yè)『硅谷』
    分組搭配
    基于嵌入式Linux內(nèi)核的自恢復(fù)設(shè)計
    Linux內(nèi)核mmap保護機制研究
    怎么分組
    分組
    你所不知道的WIFI路由器使用方法?
    無線路由器輻射可忽略
    庄河市| 孟津县| 定结县| 昌黎县| 江安县| 克什克腾旗| 台湾省| 阿坝县| 昌邑市| 长宁县| 永嘉县| 梁山县| 合江县| 南充市| 龙山县| 资中县| 延津县| 板桥市| 昆明市| 韶关市| 博罗县| 广东省| 阿合奇县| 广汉市| 磐安县| 隆林| 惠东县| 高雄市| 扎兰屯市| 精河县| 资溪县| 娱乐| 新乡市| 临桂县| 旌德县| 万宁市| 南城县| 平和县| 临潭县| 会昌县| 崇州市|