基于藍牙的個人局域網(wǎng)(PAN)的設計
關鍵詞:藍牙個人區(qū)域網(wǎng); 組網(wǎng); 網(wǎng)絡訪問點;網(wǎng)橋轉發(fā)算法
引言
人們所攜帶的電子信息設備越來越多,像筆記本電腦、移動電話、PDA 等已不再只是商務人員的必備工具,正逐步進入百姓的日常生活。這些信息設備的功能越來越強大,同時尺寸卻越來越小,但是人們已不能僅僅滿足于它們各自獨立工作,而是迫切需要各種設備之間能方便地進行信息的交互。因此,在小范圍內(nèi)能夠將個人設備互聯(lián)而組成的網(wǎng)絡———個人局域網(wǎng)(PAN) 便應運而生。藍牙(Bluetooth) 作為一種小范圍無線連接技術,能夠在設備間實現(xiàn)方便快捷、靈活安全、低成本、低功耗的數(shù)據(jù)和語音通信,是目前實現(xiàn)無線個域網(wǎng)的主流技術之一。本文提出了怎樣實現(xiàn)現(xiàn)有上層協(xié)議(如TCP/ IP)與藍牙協(xié)議的無縫連接;怎樣實現(xiàn)藍牙個人區(qū)域網(wǎng)的數(shù)據(jù)轉發(fā)(主要集中在PAN 的網(wǎng)橋算法上) 的解決方法;最后提供了一個藍牙個人區(qū)域網(wǎng)模塊的完整設計方案供參考,希望對各個同行有借鑒意義。本文所提出的解決方案現(xiàn)已用軟件實現(xiàn),并投入國外市場,用戶反映運行良好。
1 藍牙PAN 實現(xiàn)原理
藍牙技術是一種近距離無線通信的開放性標準,其目的是單芯片、低功耗,用來代替有線電纜連接,實現(xiàn)短距離無線語音和數(shù)據(jù)通信。由多個藍牙設備就可以組成一個藍牙網(wǎng)絡。藍牙個人區(qū)域網(wǎng)PAN 有兩種應用模型: 一種被稱為組網(wǎng)絡( Group Ad - hoc Networking ,GN) ;另一種被稱為網(wǎng)絡訪問點(Networking Access Point ,NAP) 。這兩種實現(xiàn)模式分別有不同的網(wǎng)絡結構和協(xié)議模型。下面對它們分別進行敘述。
1.1 組網(wǎng)( GN) 與網(wǎng)絡訪問點(NAP)
一個簡單的組網(wǎng)由一個主設備和1~7 個活動的從設備組成。在這一個主從網(wǎng)中,主設備與從設備之間的點對點或點對多點通訊在主設備的控制下進行,這個網(wǎng)絡不需與外部網(wǎng)絡相連。另外一種就是由一個NAP和其它藍牙設備組成的網(wǎng)絡。這種無線設備充當網(wǎng)絡設備(10baseT,GSM 等) 之間的網(wǎng)橋、代理或者路由。網(wǎng)絡訪問點與Internet 相連,它是其它計算機或設備與外部網(wǎng)絡相連的中介。計算機通過網(wǎng)絡訪問點共享所有的網(wǎng)絡資源。
1.2 PAN 協(xié)議棧模型
由上可見,NAP 和GN 是兩種不同的服務。組網(wǎng)被設計用來允許一個或多個藍牙設備組成一個局域網(wǎng)絡,而網(wǎng)絡訪問點提供藍牙設備進入Internet 網(wǎng)絡的能力。無論是NAP 還是GN 都必須提供與TCP/ IP 和其它網(wǎng)絡協(xié)議的無縫實現(xiàn)。下面是關于NAP 和GN 在協(xié)議棧部分圖示(圖1 和圖2) 。從協(xié)議棧示意圖可以看出,與GN 網(wǎng)絡比較而言,NAP 除了要實現(xiàn)數(shù)據(jù)轉發(fā)之外,還必須實現(xiàn)網(wǎng)橋,能夠實現(xiàn)網(wǎng)絡的路由,從而能通過網(wǎng)絡訪問外部網(wǎng)絡。
2 PAN 實現(xiàn)要解決的問題
藍牙個人區(qū)域網(wǎng)就是要用無線代替有線,用藍牙硬件在不同設備之間建立一條虛擬的藍牙鏈路,從而使現(xiàn)有的各種應用軟件不經(jīng)修改,就可以在不同藍牙設備之間進行數(shù)據(jù)傳輸和數(shù)據(jù)交換。它必須解決以下問題:
(1)怎樣支持IPv4 和IPv6 協(xié)議和其它可選協(xié)議。
(2)怎樣實現(xiàn)GN 和NAP。
(3)怎樣實現(xiàn)藍牙協(xié)議棧與現(xiàn)有網(wǎng)絡協(xié)議如TCP/ IP和PPP 等網(wǎng)絡協(xié)議無縫連接,從而通過藍牙硬件在下層建立一條虛擬的藍牙鏈路,使現(xiàn)有網(wǎng)絡應用程序就像在有線網(wǎng)絡中使用一樣。
3 PAN 的具體實現(xiàn)
3.1 實現(xiàn)高層協(xié)議與藍牙協(xié)議的無縫連接
要充分運用現(xiàn)有的各種協(xié)議,如TCP/ IP 協(xié)議和其它上層協(xié)議的接口,PAN 網(wǎng)絡需要在上層協(xié)議與藍牙協(xié)議棧之間建立一條藍牙無線鏈路。怎樣實現(xiàn)現(xiàn)有協(xié)議與藍牙協(xié)議的無縫連接? 筆者以Windows 平臺為例提出了一個解決方案,如圖3 所示。
在Windows 驅動程序設計構架中,現(xiàn)在的通訊協(xié)議(如TCP ,IPX/ SPX等) 都是建立在Miniport Driver 之上的。因此,只需實現(xiàn)一個Windows 關于NDIS 的Miniport 驅動程序(圖4) 即可。從TCP/ IP 等高層協(xié)議過來的數(shù)據(jù)通過Miniport 進入Dispatch Driver ,然后進入個人區(qū)域網(wǎng)應用程序,通過應用程序進入藍牙協(xié)議棧。當然,PAN Interface 也可以在Kernel Mode 層實現(xiàn)。通過PAN Interface ,數(shù)據(jù)就可以進入藍牙協(xié)議棧了(圖5) 。
3.2 網(wǎng)橋轉發(fā)算法(實現(xiàn)GN 和NAP)
為了實現(xiàn)GN 和NAP ,就必須在GN 和NAP 端實現(xiàn)一個虛擬網(wǎng)橋,實現(xiàn)數(shù)據(jù)的轉發(fā)。網(wǎng)橋轉發(fā)算法是藍牙個人區(qū)域網(wǎng)PAN 實現(xiàn)的關鍵技術。根據(jù)藍牙個人區(qū)域網(wǎng)的特點,筆者提出了網(wǎng)橋三個端口的模型,并提出了一個網(wǎng)橋轉發(fā)算法。
3.2.1 網(wǎng)橋轉發(fā)算法基本思想
網(wǎng)橋在一定程度上就相當于一個集線器。在它上邊可以有三種類型的端口:BNEP 端口(數(shù)據(jù)轉發(fā)是直接建立在BNEP[3]之上的) ,本地端口(服務端本身) 和外部網(wǎng)絡端口(如接入Internet) 。由于一個藍牙主設備只能連接七臺藍牙從設備,所以網(wǎng)橋的BNEP 端口最多能有七個;本地端口表示的就是提供服務設備自己,它只有一個;如果本設備支持NAP ,那么將會注冊一個外部網(wǎng)絡端口??梢?一個網(wǎng)橋最多有九個端口,它的主要功能就是根據(jù)相應的網(wǎng)橋轉發(fā)算法,把數(shù)據(jù)從一個藍牙設備轉發(fā)到其它的藍牙設備或者外部網(wǎng)絡,從而實現(xiàn)在不同設備間(GN) 或者和外部網(wǎng)絡(NAP) 通信的目的。在每一個BNEP 端口設置一個自學習標志位來標志來自這個端口的數(shù)據(jù)包的源地址和目的地址是否已經(jīng)被記憶下來,這樣就沒必要每次都去查找來自這個端口的每一個數(shù)據(jù)包的源地址或目的地址。如果要轉發(fā)的數(shù)據(jù)包不是來自內(nèi)部網(wǎng)絡,并且在端口列表中沒有找到目標端口,則默認為被轉發(fā)到外部網(wǎng)絡, 如果沒有外部網(wǎng)絡端口,則丟棄該包。另外,在每一個端口還有一個包過濾器,它可以過濾掉某些類型的網(wǎng)絡包和來自或發(fā)往某地址范圍段的網(wǎng)絡包。
3.2.2 算法具體步驟
(1) 有數(shù)據(jù)包到達網(wǎng)橋,該數(shù)據(jù)包可能來自本地設備、其它藍牙設備或外部網(wǎng)絡(如果實現(xiàn)了NAP) 。
(2) 從包頭中取得該數(shù)據(jù)包得源地址,檢查該數(shù)據(jù)包的是否來自外部網(wǎng)絡。若是,則檢查數(shù)據(jù)包的源端口是否自學習的;若不是,則記下該數(shù)據(jù)包的源地址并設置自學習標志位為TRUE。
(3) 從包頭中取得該數(shù)據(jù)包的類型。如果它是EARP/ ERARP 類型數(shù)據(jù)包,則把它作為廣播包,并對除源端口外的每一個端口進行廣播,然后轉到(8) 。
(4) 如果它是IPv4 , IPv6 或者其它類型的數(shù)據(jù)包,則檢查所記憶的目標端口是否是一個有效端口。如果所記憶的目標端口有效,則把所記憶的目標端口作為該數(shù)據(jù)包要轉發(fā)的目標端口。
(5) 如果該數(shù)據(jù)包的目標地址是一個廣播地址或多播地址,則把該數(shù)據(jù)包進行廣播或多播,然后轉到(8) ;否則,在除源端口外的所有端口中查找目標端口。
(6) 如果找到目標端口, 則記憶該目標端口;否則,若該網(wǎng)橋有默認端口(即外部網(wǎng)絡端口) ,并且源端口不是外部網(wǎng)絡端口,則把外部網(wǎng)絡端口作為目標口,若沒有外部網(wǎng)絡端口, 則丟棄該包, 然后轉到(8) 。
(7) 進行包過濾, 如果該包沒有被過濾掉, 則轉發(fā)該數(shù)據(jù)包到目標端口。
(8) 接收下一個到來的數(shù)據(jù)包,重復上述步驟。
4 模塊介紹
4.1 PAN UI
PAN UI 模塊是位于最上層的圖形用戶界面,它是與用戶交互的接口。它使用戶能夠方便快捷地完成相應操作,如建立網(wǎng)絡,進行數(shù)據(jù)交互等。
4.2 PAN Profile
PAN Profile 模塊是藍牙個人區(qū)域網(wǎng)PAN 實現(xiàn)的關鍵模塊。一方面,它與用戶界面打交道,另一方面,它又要負責與協(xié)議棧和網(wǎng)絡驅動程序的數(shù)據(jù)交互。它有以下功能:
①一方面它能提供PAN 服務,并等待接收來自客戶端的連接。
②另一方面它又能作為客戶端,發(fā)出建立連接請求,并接收來自服務端的響應。
③如果提供NAP服務,則還需實現(xiàn)一個網(wǎng)橋,詳見網(wǎng)橋算法。
4.3 Pan Interface
PAN Interface 模塊是與系統(tǒng)相關的模塊, 它直接和位于核心態(tài)的Virtual NIC 模塊進行交互,接收來自Virtual NIC 模塊的數(shù)據(jù)(即TCP/ IP 等上層協(xié)議發(fā)來的數(shù)據(jù))或發(fā)送數(shù)據(jù)到Virtual NIC(即TCP/ IP 等上層協(xié)議接收的數(shù)據(jù)) 。
4.4 Virtual NIC
Virtual NIC 模塊即網(wǎng)卡驅動部分,它位于Windows 系統(tǒng)的核心態(tài),實現(xiàn)了一個虛擬的藍牙網(wǎng)卡,直接與Windows 系統(tǒng)通信。
5 結束語
本文首先對PAN 藍牙協(xié)議進行了一個概括性的描述,然后對PAN 設計中會遇到的問題進行了闡述,并在最后提出了作者對問題的解決方法。本文描述了PAN 的設計和實現(xiàn)過程,提出了算法及解決方案,具有很強的實用性。 AN>