0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

路由器硬件抽象層的實(shí)現(xiàn)和應(yīng)用研究

電子設(shè)計(jì) ? 來(lái)源:現(xiàn)代電子技術(shù) ? 作者:吳美娟;岳儉 ? 2021-06-21 10:58 ? 次閱讀

1引言

隨著Internet的飛速發(fā)展和寬帶技術(shù)的不斷出現(xiàn),骨干網(wǎng)絡(luò)核心路由器的體系結(jié)構(gòu)也發(fā)生了一些變化。近年來(lái),高性能路由器體系結(jié)構(gòu)的研究和國(guó)內(nèi)外主流廠商生產(chǎn)的大部分商用高端路由器的實(shí)現(xiàn)方案中,普遍采用了集中式交換、分布式報(bào)文處理和轉(zhuǎn)發(fā)的體系結(jié)構(gòu)。

文獻(xiàn)提出了硬件抽象層(Hardware AbstractionLayer,HAL)的設(shè)計(jì)思想,成功地解決了分布式路由器面臨的通用性支撐軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)問(wèn)題,為構(gòu)建開放通用的路由器軟件基礎(chǔ)平臺(tái)提供了保證。硬件抽象層包括虛擬驅(qū)動(dòng)、系統(tǒng)管理和內(nèi)部通信3大模塊,在整個(gè)路由器系統(tǒng)中的位置如圖1所示。

結(jié)合國(guó)家863重大課題“高性能IPv6路由器基礎(chǔ)平臺(tái)及實(shí)驗(yàn)系統(tǒng)”,將文獻(xiàn)中提出的硬件抽象層在嵌入式實(shí)時(shí)操作系統(tǒng)Hard HatLinux中進(jìn)行了實(shí)現(xiàn)。本文針對(duì)高性能路由器體系結(jié)構(gòu)的特點(diǎn),研究了硬件抽象層在實(shí)現(xiàn)過(guò)程中的關(guān)鍵技術(shù)。主要包括虛擬驅(qū)動(dòng)的動(dòng)態(tài)加載模式、基于分隔符的TCP實(shí)時(shí)傳輸方法、基于地址映射的內(nèi)核態(tài)與用戶態(tài)間的阻塞式數(shù)據(jù)交換機(jī)制幾個(gè)內(nèi)容。

2支撐軟件在高性能IPv6路由器中實(shí)現(xiàn)的關(guān)鍵技術(shù)

2.1虛擬驅(qū)動(dòng)的動(dòng)態(tài)加載模式

虛擬驅(qū)動(dòng)模塊是模擬線路接口單元?jiǎng)幼鞯闹匾糠郑撵`活性和可擴(kuò)展性直接影響硬件抽象層的可用性。

在Linux操作系統(tǒng)下,該模塊是作為一個(gè)內(nèi)核模塊來(lái)實(shí)現(xiàn)的。他可以實(shí)現(xiàn)實(shí)時(shí)動(dòng)態(tài)加載,與靜態(tài)加載相比具有很大的靈活性。編譯時(shí),內(nèi)核模塊可單獨(dú)進(jìn)行模塊的編譯調(diào)試,縮短了調(diào)試時(shí)間;使用時(shí),將該模塊鏈接到內(nèi)核,便可發(fā)揮模擬線路接口單元的作用;擴(kuò)展或升級(jí)時(shí),可以將其卸載后進(jìn)行修改。除此之外,動(dòng)態(tài)加載還可以縮減Linux內(nèi)核的大小,使編譯后的內(nèi)核小巧,占用內(nèi)存較少,提高了運(yùn)轉(zhuǎn)速度。

2.2基于地址映射的內(nèi)核態(tài)與用戶態(tài)間的阻塞式數(shù)據(jù)交換機(jī)

Linux操作系統(tǒng)中的進(jìn)程分為用戶態(tài)進(jìn)程和內(nèi)核態(tài)進(jìn)程2類,用戶態(tài)進(jìn)程不能直接執(zhí)行運(yùn)行在內(nèi)核態(tài)的內(nèi)核代碼或者存取操作系統(tǒng)內(nèi)核的數(shù)據(jù)結(jié)構(gòu)。在內(nèi)存管理方面,Linux系統(tǒng)采用虛擬內(nèi)存管理機(jī)制,設(shè)置了兩級(jí)頁(yè)表結(jié)構(gòu),通過(guò)頁(yè)面地址和在該頁(yè)中的偏移量就可以惟一確定虛擬地址所對(duì)應(yīng)的物理地址。

在硬件抽象層的實(shí)現(xiàn)中,內(nèi)部通信處于用戶態(tài),虛擬驅(qū)動(dòng)處于內(nèi)核態(tài)。而他們之間不可避免地需要進(jìn)行一些數(shù)據(jù)的傳遞,即處于Linux 不同空間的2個(gè)進(jìn)程要進(jìn)行通信。但是,這2個(gè)模塊分處于Linux系統(tǒng)的用戶空間和內(nèi)核空間,數(shù)據(jù)指針如何傳遞是一個(gè)問(wèn)題,指針傳遞后如何映射又是一個(gè)問(wèn)題。因此用戶態(tài)與內(nèi)核態(tài)之間內(nèi)存地址的傳遞和轉(zhuǎn)換成為了提高硬件抽象層工作效率的關(guān)鍵。

2.2.1內(nèi)核態(tài)與用戶態(tài)的指針傳遞

先來(lái)解決內(nèi)存地址的傳遞問(wèn)題,根據(jù)Linux驅(qū)動(dòng)程序的特點(diǎn),選擇ioctl()函數(shù)來(lái)傳遞指針。該函數(shù)屬于系統(tǒng)調(diào)用,調(diào)用后將一個(gè)類型為ifreq的結(jié)構(gòu)指針變量ral_ifr從用戶態(tài)傳入內(nèi)核態(tài),該結(jié)構(gòu)的定義在/include/linux/if.h中。

使用了其中的ifrn_name和ifru_data兩個(gè)域,其中ifrn_name代表設(shè)備的名稱,即虛擬網(wǎng)絡(luò)接口設(shè)備名,ifru_data為所要傳遞的數(shù)據(jù)指針。使用系統(tǒng)調(diào)用ioctl()之后,用戶空間到內(nèi)核空間的指針傳遞就完成了。內(nèi)核空間到用戶空間的指針傳遞過(guò)程與其相反。因此,下一步要進(jìn)行的是內(nèi)核空間與用戶空間數(shù)據(jù)指針的映射。

2.2.2內(nèi)核態(tài)與用戶態(tài)的內(nèi)存映射

由2.2.1可知,用戶空間的指針通過(guò)ioctl傳入內(nèi)核空間后,他本身并沒(méi)有發(fā)生改變,需要進(jìn)行虛擬地址到物理地址的映射才可以對(duì)其進(jìn)行讀寫操作。

由文獻(xiàn)分析可知,可以使用內(nèi)核kiobuf機(jī)制,他能提供從內(nèi)核空間對(duì)用戶內(nèi)存的直接訪問(wèn)。內(nèi)核kiobuf機(jī)制的設(shè)計(jì)初衷就是為了便于將用戶空間的緩沖區(qū)映射到內(nèi)核。使用他能夠獲得數(shù)據(jù)的頁(yè)面起始位置、頁(yè)數(shù)和偏移量等具體參數(shù),因此可在內(nèi)核空間對(duì)用戶態(tài)申請(qǐng)的內(nèi)存進(jìn)行操作。

首先分配一個(gè)內(nèi)核I/O向量(kiovec)來(lái)產(chǎn)生kiobuf,使用函數(shù)如圖2所示。

最后,將通過(guò)ioctl傳入的用戶空間指針ifru_data映射到內(nèi)核態(tài),使用函數(shù)map_user_kiobuf,如圖4所示。

這樣就完成了將指針由用戶空間映射到內(nèi)核空間的過(guò)程,實(shí)現(xiàn)了從虛擬地址向物理地址的轉(zhuǎn)換。

至此,內(nèi)核空間與用戶空間的內(nèi)存映射問(wèn)題得到了很好的解決。通過(guò)解決內(nèi)存地址映射的問(wèn)題,內(nèi)部通信和虛擬驅(qū)動(dòng)之間就可以只傳遞數(shù)據(jù)指針,大大提高了模塊的運(yùn)行效率。

2.3基于分隔符的TCP實(shí)時(shí)傳輸方法

2.3.1Nagle算法的弊端

糊涂窗口綜合癥(Silly WindowSyndrome)的出現(xiàn)使網(wǎng)絡(luò)開銷過(guò)大,從而造成TCP性能變壞。根據(jù)文獻(xiàn)所述,糊涂窗口綜合癥的解決方法就是采用文獻(xiàn)中所建議的Nagle算法。但是在實(shí)際應(yīng)用時(shí)發(fā)現(xiàn),Nagle算法的不足之處主要有2點(diǎn):

(1)在限制數(shù)據(jù)報(bào)頭部信息消耗的帶寬總量的同時(shí),是以犧牲網(wǎng)絡(luò)延遲為代價(jià)的。

(2)在發(fā)送方的緩沖區(qū)中,應(yīng)用程序發(fā)送的數(shù)據(jù)包發(fā)生了粘滯的現(xiàn)象,即發(fā)送的若干數(shù)據(jù)包到接收方接收時(shí)變成一包,分不出各個(gè)包的界線。

前者因?yàn)閿?shù)據(jù)被排隊(duì)而不是立即發(fā)送的,因此不適用于需要快速響應(yīng)時(shí)間的系統(tǒng)。后者則會(huì)影響到接收方的數(shù)據(jù)處理的準(zhǔn)確性。第一種不足可以通過(guò)使用PUSH標(biāo)記來(lái)實(shí)現(xiàn),發(fā)送方如果使用了該標(biāo)志,會(huì)立即將緩沖區(qū)中的數(shù)據(jù)發(fā)送出去。對(duì)于第二個(gè)問(wèn)題,解決起來(lái)就比較復(fù)雜,因?yàn)槌霈F(xiàn)數(shù)據(jù)包粘滯現(xiàn)象的原因既可能由發(fā)送方造成,也可能由接收方造成。

2.3.2基于分隔符的TCP實(shí)時(shí)傳輸方法

采用了基于分隔符的TCP實(shí)時(shí)傳輸方法來(lái)解決包粘滯問(wèn)題。該方法在應(yīng)用層數(shù)據(jù)包的起始部分附加上有特定格式的分隔符和數(shù)據(jù)長(zhǎng)度域,其中分隔符用于界定數(shù)據(jù)包之間的界限,長(zhǎng)度域則用于表示該數(shù)據(jù)包的實(shí)際長(zhǎng)度。

首先,所有經(jīng)內(nèi)部通信模塊傳輸?shù)臄?shù)據(jù),都需要進(jìn)行一次內(nèi)部固定格式的封裝。封裝后數(shù)據(jù)包的包頭,是由內(nèi)部通信模塊自定義的,起始位置是分隔符和長(zhǎng)度域。其次,接收方按照內(nèi)部通信模塊的自定義的包結(jié)構(gòu),接收后對(duì)數(shù)據(jù)流進(jìn)行預(yù)處理,還原成為應(yīng)用程序可正確識(shí)別的數(shù)據(jù)包。預(yù)處理的原理如下:先查找包頭中的分隔符,他標(biāo)識(shí)著一個(gè)數(shù)據(jù)包的開始;接下來(lái)的域表示的是實(shí)際數(shù)據(jù)包的長(zhǎng)度len,取出緊跟在包頭后的長(zhǎng)度為len的那段數(shù)據(jù),這就是需要應(yīng)用程序處理的數(shù)據(jù)包。

包粘滯的情況具體可細(xì)分為3大類,這里均以2個(gè)應(yīng)用程序數(shù)據(jù)包粘滯成一段的情況為例,如圖5~圖9所示,當(dāng)應(yīng)用程序數(shù)據(jù)包個(gè)數(shù)為n時(shí),可采用類似的方法進(jìn)行處理。

第1類,粘滯數(shù)據(jù)是由完整的數(shù)據(jù)包組成的,如圖5所示。這種情況的處理非常簡(jiǎn)單,按分隔符找到數(shù)據(jù)包的起始位置,再根據(jù)數(shù)據(jù)長(zhǎng)度取出應(yīng)用程序數(shù)據(jù)即可。

第2類,粘滯數(shù)據(jù)是由完整數(shù)據(jù)包和應(yīng)用程序數(shù)據(jù)殘缺的數(shù)據(jù)包組成,如圖6和圖7所示。處理時(shí),需要對(duì)殘缺數(shù)據(jù)包2的應(yīng)用程序數(shù)據(jù)部分進(jìn)行保存,內(nèi)部通信包頭的數(shù)據(jù)長(zhǎng)度域也要記錄下來(lái),以便下次接收時(shí)知道應(yīng)用程序數(shù)據(jù)剩余部分的長(zhǎng)度。再次收到數(shù)據(jù)時(shí),就根據(jù)剩余長(zhǎng)度取出一段數(shù)據(jù),與上次保存的應(yīng)用程序數(shù)據(jù)合為一個(gè)完整的數(shù)據(jù)包。

第3類,粘滯數(shù)據(jù)是由完整數(shù)據(jù)包和內(nèi)部通信包頭殘缺的數(shù)據(jù)包組成,如圖8和圖9所示。首先,要將如圖8所示數(shù)據(jù)段中收到的殘缺的這部分包頭保存起來(lái),然后收取下一次數(shù)據(jù)如圖9所示。再?gòu)氖杖〉臄?shù)據(jù)中,截取可以與上次殘缺包頭組成完整的內(nèi)部通信包頭的一段報(bào)文,形成所需要的內(nèi)部通信包頭。當(dāng)然,該段數(shù)據(jù)有可能并不是內(nèi)部通信包頭,這可以從分隔符是否正確等內(nèi)部通信封裝格式來(lái)判斷。如果發(fā)生這種情況,就要將指針以字節(jié)為單位,順次向后滑動(dòng),直到找到真正的內(nèi)部通信包頭為止。然后根據(jù)包頭中的信息,取出相應(yīng)長(zhǎng)度的應(yīng)用程序數(shù)據(jù)交送給應(yīng)用程序接收者。

解決了上述分析的2大不足之后,內(nèi)部通信模塊中實(shí)現(xiàn)的TCP傳輸,在保證數(shù)據(jù)傳輸?shù)牧己玫目煽啃院土骺匦灾?,還具備了一定的實(shí)時(shí)性能和防止數(shù)據(jù)包粘滯的功能。

3結(jié)語(yǔ)

本文研究了硬件抽象層在高性能IPv6路由器實(shí)現(xiàn)中的關(guān)鍵技術(shù),主要分析了虛擬驅(qū)動(dòng)的動(dòng)態(tài)加載模式、基于分隔符的TCP實(shí)時(shí)傳輸方法、基于地址映射的內(nèi)核態(tài)與用戶態(tài)間的阻塞式數(shù)據(jù)交換機(jī)制。通過(guò)上述關(guān)鍵技術(shù)的研究,使硬件抽象層得以實(shí)時(shí)、高效地運(yùn)行,并且已穩(wěn)定運(yùn)行于高性能IPv6 路由器中。

責(zé)任編輯:gt

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11207

    瀏覽量

    208721
  • 操作系統(tǒng)
    +關(guān)注

    關(guān)注

    37

    文章

    6684

    瀏覽量

    123140
  • 路由器
    +關(guān)注

    關(guān)注

    22

    文章

    3693

    瀏覽量

    113426
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    路由器分類

    路由器為通用路由器。專用路由器通常為實(shí)現(xiàn)某種特定功能對(duì)路由器接口、硬件等作專門優(yōu)化.例如 窄帶
    發(fā)表于 06-15 10:09

    硬件抽象的設(shè)置

    我在進(jìn)行PCI板的開發(fā)時(shí)經(jīng)常能夠遇到硬件抽象這個(gè)概念,不知道這個(gè)硬件抽象是在PCI板上設(shè)置還
    發(fā)表于 07-21 12:06

    嵌入式操作系統(tǒng)的通用硬件抽象設(shè)計(jì)

    是操作系統(tǒng)內(nèi)核所管理的任務(wù)的重要組成部分,是CPU內(nèi)核的寄存中內(nèi)容的映像,因此上下文管理的實(shí)現(xiàn)依賴于CPU內(nèi)核中寄存的組織,是與體系結(jié)構(gòu)密切相關(guān)的。通用硬件
    發(fā)表于 12-07 10:30

    硬件抽象在高性能IPv6路由器實(shí)現(xiàn)中的關(guān)鍵技術(shù)是什么?

    硬件抽象在高性能IPv6路由器實(shí)現(xiàn)中的關(guān)鍵技術(shù)是什么?
    發(fā)表于 05-25 06:40

    求一種適用于大規(guī)模接入?yún)R聚路由器的HAL的通用性軟件結(jié)構(gòu)設(shè)計(jì)及實(shí)現(xiàn)方式

    本文將在討論硬件抽象基本結(jié)構(gòu)的基礎(chǔ)上,提出一種適用于大規(guī)模接入?yún)R聚路由器的HAL的通用性軟件結(jié)構(gòu)設(shè)計(jì)及實(shí)現(xiàn)方式,提供高效、可靠的內(nèi)部通信,
    發(fā)表于 05-28 06:20

    路由器和交換機(jī)的區(qū)別

    。交換機(jī)不可以分配網(wǎng)速,但是你在家里和阿姨上網(wǎng)應(yīng)該是用到的一個(gè)寬帶賬號(hào),所以相當(dāng)于把網(wǎng)速均分為二,這個(gè)功能用路由器也可以實(shí)現(xiàn),但是交換機(jī)無(wú)法開wifi,無(wú)法對(duì)網(wǎng)絡(luò)作其他比例的分配。從這兩點(diǎn)來(lái)看,還是應(yīng)該
    發(fā)表于 03-17 11:58

    路由器的種類

    節(jié)點(diǎn)路由器。路由算法必須穩(wěn)定,即在出現(xiàn)不正常或不可預(yù)見(jiàn)事件的情況下必須仍能正常處理,例如硬件故障、高負(fù)載和不正確的實(shí)現(xiàn)。因?yàn)?b class='flag-5'>路由器位于網(wǎng)絡(luò)的
    發(fā)表于 03-17 12:16

    IP路由器的設(shè)計(jì)與實(shí)現(xiàn)

    路由器是網(wǎng)絡(luò)互連技術(shù)中最重要的設(shè)備之一,與其它網(wǎng)絡(luò)設(shè)備不同,路由器是智能的,因?yàn)樗梢怨ぷ饔贠SI 分層結(jié)構(gòu)中所有的,而不僅僅是前兩(物理
    發(fā)表于 04-22 17:13 ?31次下載

    EMC2的硬件抽象原理與實(shí)現(xiàn)

    EMC2的硬件抽象原理與實(shí)現(xiàn) 1 概 述    嵌入式系統(tǒng)具有專用性強(qiáng)、外圍設(shè)備多樣的特性,這決定了其應(yīng)用的硬件
    發(fā)表于 12-28 17:46 ?3615次閱讀
    EMC2的<b class='flag-5'>硬件</b><b class='flag-5'>抽象</b><b class='flag-5'>層</b>原理與<b class='flag-5'>實(shí)現(xiàn)</b>

    路由器,路由器原理,路由器協(xié)議,路由器算法

    路由器,路由器原理,路由器協(xié)議,路由器算法 路由器:連接因特網(wǎng)中各局域網(wǎng)、廣域網(wǎng)的設(shè)備,它會(huì)根據(jù)信道的情況自動(dòng)選擇和設(shè)定路
    發(fā)表于 03-29 17:44 ?1372次閱讀

    什么是軟件路由器/高端路由器

    什么是軟件路由器/高端路由器 軟件路由器 路由器是網(wǎng)絡(luò)中的核心設(shè)備。硬件路由器是大家所熟悉的
    發(fā)表于 04-03 14:21 ?674次閱讀

    基于ACR/Tbit路由器硬件抽象的通用性軟件結(jié)構(gòu)設(shè)計(jì)

      本文將在討論硬件抽象基本結(jié)構(gòu)的基礎(chǔ)上,提出一種適用于大規(guī)模接入?yún)R聚路由器的HAL的通用性軟件結(jié)構(gòu)設(shè)計(jì)及實(shí)現(xiàn)方式,提供高效、可靠的內(nèi)部通
    發(fā)表于 08-31 11:47 ?1001次閱讀
    基于ACR/Tbit<b class='flag-5'>路由器</b>的<b class='flag-5'>硬件</b><b class='flag-5'>抽象</b><b class='flag-5'>層</b>的通用性軟件結(jié)構(gòu)設(shè)計(jì)

    STM32 硬件抽象(Hardware Abstraction la

    STM32 硬件抽象(Hardware Abstraction la
    發(fā)表于 12-09 12:06 ?1次下載
    STM32 <b class='flag-5'>硬件</b><b class='flag-5'>抽象</b><b class='flag-5'>層</b>(Hardware Abstraction la

    路由器是什么,有哪些功能

    路由器是什么?路由器又以稱之為網(wǎng)關(guān)設(shè)備,是連接兩個(gè)或多個(gè)網(wǎng)絡(luò)的硬件設(shè)備,是一種基于網(wǎng)絡(luò)的互聯(lián)設(shè)備,路由器是互聯(lián)網(wǎng)的主要結(jié)點(diǎn)設(shè)備。接下來(lái)簡(jiǎn)單
    的頭像 發(fā)表于 01-12 15:39 ?1.2w次閱讀

    智能路由器和普通路由器的區(qū)別

    的技術(shù)原理和硬件設(shè)計(jì)。智能路由器通常具備更快的處理和更大的內(nèi)存,以及更強(qiáng)大的無(wú)線信號(hào)傳輸技術(shù)。相比之下,普通路由器硬件性能相對(duì)較弱,無(wú)法
    的頭像 發(fā)表于 12-26 14:26 ?1312次閱讀