<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 采用ACR/Tbit路由器的硬件抽象層通用性軟件結構設計

采用ACR/Tbit路由器的硬件抽象層通用性軟件結構設計

作者: 時(shí)間:2012-06-08 來(lái)源:網(wǎng)絡(luò ) 收藏

2.2 三次握手過(guò)程

本文引用地址:http://dyxdggzs.com/article/154680.htm

  每個(gè)客戶(hù)端與服務(wù)器端進(jìn)行真正的數據傳輸之前,首先要進(jìn)行一個(gè)握手的建立過(guò)程,如圖3所示。握手過(guò)程成功后則表示雙方通信通道正常,只有在得知握手成功后雙方才可以正常地收發(fā)報文,從而克服了UDP協(xié)議方式的面向無(wú)連接性。為了隨時(shí)檢測和維護雙方鏈路的通連性,每個(gè)客戶(hù)端與服務(wù)端在一定的間隔時(shí)間內要互發(fā)KEEPALIVE報文。如果在規定的時(shí)間內收不到對方的KEEPALIVE報文,說(shuō)明斷鏈,要進(jìn)行相應的斷鏈處理。

  

  圖3 握手建立過(guò)程

  2.3 接收端丟失確認及滑動(dòng)窗口

  發(fā)送UDP報文時(shí)在自定義的內部數據頭中加入所發(fā)送數據的序號,接收端收到后發(fā)送確認信息,如果發(fā)送方在規定時(shí)間內沒(méi)有收到確認信息,則認為該包丟失,會(huì )連同原包的序號重新發(fā)送。

  滑動(dòng)窗口的目的主要是為了實(shí)現流量控制,防止擁塞。每個(gè)發(fā)送方維護一個(gè)重發(fā)隊列,保存著(zhù)一定數量的發(fā)送而沒(méi)被確認的報文,該隊列剩余空間的大小可以限制應用部分發(fā)包的速率。由于UDP協(xié)議是基于消息的傳輸協(xié)議而非基于流的,因此不必考慮發(fā)送端可以接收多少數據,只需知道能否接收數據即可。

  總之,UDP傳輸控制方式主要考慮到其傳輸簡(jiǎn)單快速、額外開(kāi)銷(xiāo)較小的特點(diǎn),但這是以犧牲一定的可靠性為前提的,因此必須在應用程序中增加可靠性保護機制。在實(shí)際應用中證明上述方法可靠高效,能夠維護內部通信有序、快速的數據傳輸。

  3 基于多用戶(hù)的用戶(hù)接入管理

  在Linux操作系統下,系統把設備映射為一個(gè)特殊的設備文件,用戶(hù)程序可以像對其他文件一樣對該設備文件進(jìn)行讀寫(xiě)操作。虛擬驅動(dòng)模塊運行在Linux操作系統下,模擬從處理單元上的接口單元,形成收發(fā)協(xié)議報文功能和數量與此一致的層虛擬接口單元。因此,每個(gè)實(shí)際的接口單元都在內核中對應一個(gè)注冊的虛擬設備,以便于上層控制對數據平面的管理與數據交互。

  3.1 多用戶(hù)虛擬設備驅動(dòng)程序的動(dòng)態(tài)加載

  虛擬驅動(dòng)在內核中的功能通過(guò)動(dòng)態(tài)加載方式實(shí)現。通常的動(dòng)態(tài)加載方式是將驅動(dòng)程序作為一個(gè)整體模塊,在需要時(shí)再加入內核;由于多用戶(hù)接入方式使得在某一時(shí)刻內核中注冊的接口單元數量不確定,如果實(shí)施一次性加載會(huì )冗余太多,不利于資源的有效利用。因此,在內核中加載一個(gè)基本模塊的前提下,實(shí)現各虛擬設備的動(dòng)態(tài)加載過(guò)程,達到以一個(gè)基本的虛擬設備控制多個(gè)設備驅動(dòng)模塊的功能。

  如圖4所示,對虛擬驅動(dòng)設備的控制由內部通信模塊與設備管理模塊共同完成。設備管理模塊通過(guò)內部通信模塊下達加載、卸載虛擬驅動(dòng)的命令,通過(guò)內部通信模塊與虛擬驅動(dòng)的控制通道進(jìn)行。內部通信模塊通過(guò)調用ioctl()不同的命令字完成對虛擬驅動(dòng)模塊的控制過(guò)程。

  

  圖4模塊動(dòng)態(tài)加載過(guò)程

  基本驅動(dòng)模塊的加載通常的驅動(dòng)模塊加載方式,即調用module_init()函數進(jìn)行基本模塊的初始化及在內核中的注冊過(guò)程。以該基本驅動(dòng)模塊為基礎,當內部通信模塊收到加載某個(gè)用戶(hù)設備接口的命令后,通過(guò)調用該基本模塊的Base_ioctl()在內核中注冊一個(gè)新的驅動(dòng)設備,該注冊設備才是與實(shí)際接口單元相對應的虛擬驅動(dòng)模塊,應用程序對用戶(hù)設備數據的讀寫(xiě)都是通過(guò)這些注冊的接口設備而非基本設備提供的標準函數進(jìn)行。這樣的動(dòng)態(tài)加載過(guò)程使得當沒(méi)有設備加載時(shí)在內核中只存在一個(gè)基本的虛擬驅動(dòng)模塊,只有需要注冊的用戶(hù)才將其對應的設備接口的虛擬驅動(dòng)模塊加載到內核中,從而減少系統冗余,便于管理。

  各用戶(hù)接口單元與虛擬驅動(dòng)的數據交互通過(guò)內部通信模塊與虛擬驅動(dòng)的數據通道進(jìn)行,所對應的系統調用為該注冊設備的dev_ioctl()。在該功能函數中,實(shí)現用戶(hù)空間與內核空間的數據交互。

  3.2 對多用戶(hù)接口設備虛擬驅動(dòng)的管理

  為實(shí)現內核虛擬驅動(dòng)模塊與實(shí)際接口單元的一一對應,必須解決各驅動(dòng)模塊的命名原則問(wèn)題。將每個(gè)實(shí)際接口單元在接入段拓撲中的位置設置為不同的參數,在內部通信中這些參數作為傳輸數據的報頭信息出現,根據它們可以生成一個(gè)唯一的字符串作為對應該接口單元的虛擬驅動(dòng)設備名稱(chēng),而且根據設備名稱(chēng)亦可還原出實(shí)際接口單元的拓撲信息,以供內部通信使用。在內核中維護一個(gè)由各注冊設備名稱(chēng)所組成的動(dòng)態(tài)鏈表,每個(gè)鏈表節點(diǎn)維護一個(gè)收發(fā)報文的數據隊列,虛擬驅動(dòng)與其他模塊的數據交互都通過(guò)該鏈表進(jìn)行。

  3.3 對虛擬設備數據讀寫(xiě)過(guò)程

  對數據的讀寫(xiě)過(guò)程主要是在虛擬驅動(dòng)模塊、內部通信模塊及上層控制之間進(jìn)行。虛擬驅動(dòng)模塊運行在內核空間,而內部通信模塊運行在用戶(hù)空間,因此,主要解決用戶(hù)空間與內核空間的數據傳遞問(wèn)題。通過(guò)memcpy_tofs()及memcpy_fromfs()系統調用用戶(hù)空間與內核空間的數據交互。

  在內核中維護一個(gè)由各注冊設備名稱(chēng)所組成的動(dòng)態(tài)鏈表,每個(gè)鏈表節點(diǎn)維護一個(gè)收發(fā)報文的數據隊列,虛擬驅動(dòng)與其他模塊的數據交互都通過(guò)該鏈表進(jìn)行。接收報文過(guò)程:內部通信模塊將從接口單元接收的報文通過(guò)ioctl()調用傳給虛擬驅動(dòng)。該函數通過(guò)struct net_device *dev結構找到對應的虛擬設備的dev_ioctl()功能函數,調用memcpy_fromfs()將數據拷貝至內核空間,經(jīng)過(guò)處理后通過(guò)netif_rx()函數通知上層協(xié)議有數據傳入。發(fā)送報文過(guò)程:虛擬驅動(dòng)將從上層取出的數據放至自身維護的通過(guò)虛擬接口設備名稱(chēng)維護的數據隊列中,內部通信模塊通過(guò)ioctl()論詢(xún)各接口設備數據隊列是否有數據可讀,如果有數據,虛擬驅動(dòng)通過(guò)memcpy_tofs()調用將數據拷貝至用戶(hù)空間提供的緩沖區中。

  文中針對大規模用戶(hù)接入方式的特性,討論了一種基于層的軟件及實(shí)現方式,并研究了其關(guān)鍵技術(shù),包括基于UDP傳輸方式的內部通信的可靠性實(shí)現及基于多用戶(hù)的動(dòng)態(tài)模塊加載技術(shù),適用于承載業(yè)務(wù)量的擴展和多用戶(hù)接入特性,并且在上層軟件實(shí)現中,基本上可以不考慮底層細節,增強了的開(kāi)放性及可擴展性。


上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>