專利名稱:一種基于虛擬網卡的無線信道仿真方法
技術領域:
本發明涉及一種在Windows操作系統下,一種基于虛擬網卡的無線信道仿真方 法,屬于信息通信技術領域。
背景技術:
隨著無線IP網絡越來越廣泛的應用,對這些網絡的建模與仿真也成了一個重要 的環節。利用以太網的有線信道對無線信道進行仿真是一種廣為采用的方法。TCP/IP協議族分為四個概念層,自下而上分別為網絡接口層、網間層、傳輸層、 應用層。對于位于最底層網絡接口層并沒有詳細定義。由于底層與硬件的關聯十分緊密, 所以這部分的功能通常由網絡接口卡和相應的網卡驅動來完成。大致相當于開放系統互連 (0SI)七層模型中的物理層與數據鏈路層。通常在數學仿真中仿真軟件對協議族都會有一套專門的實現,而不是直接使用 操作系統的協議,這是由具體需求決定的。如OPNET、NS(Network Simulator)等軟件中, 應用程序、協議實現和網絡模擬器都被一起編譯形成一個單一的復雜的程序。由于結構 過于復雜,這樣的模擬器是很難開發、調試、驗證和擴展的。模擬器和應用程序之間缺少 API (Application Programming Interface,應用程序編程接口)支持也限制了其使用。在半實物仿真與交互仿真中,一方面仿真環境與真實環境的一致性直接影響到 仿真的可信度,另一方面在仿真過程中直接使用操作系統內置的協議能夠大大減小開發 的工作量。而在實際的仿真環境中底層的實現經常會面臨兩個問題首先,在仿真階段 往往還不具備真實的網絡接口卡及相關驅動;其次,無線網絡接口部分不一定以網絡接 口卡的形式提供,而Windows內置的TCP/IP協議是以NDIS(Network Driver Interface Specification,網絡驅動接口規范)驅動的形式提供的,無法在不符合NDIS規范的設備上 直接使用。
發明內容
本發明的目的是為了解決上述問題,提供一種基于虛擬網卡的無線信道仿真方 法,對無線信道的數據鏈路層與物理層進行仿真,底層的協議由仿真人員靈活訂制,同時底 層通信對上層是透明的,上層應用能夠直接使用操作系統自身TCP/IP協議,從而在最大程 度上保證仿真環境與真實環境的一致性。本發明的一種基于虛擬網卡的無線信道仿真方法,包括以下幾個步驟步驟一搭建仿真模型的硬件環境;搭建仿真系統所需的以太網,以及仿真成員內部的物理網卡和虛擬網卡。步驟二 構建仿真模型的仿真環境; 構建仿真環境,創建仿真成員的虛擬網卡和虛擬信道。步驟三用戶配置仿真成員的初始化參數;初始化仿真成員的位置參數(如地理坐標、移動方式等)和網絡參數(網絡地址、網絡性能、通信協議等)。步驟四仿真系統加載虛擬網卡驅動,完成內部初始化工作仿真系統根據用戶配置加載虛擬網卡驅動,啟動相關的進程和線程,并完成對網 卡地址、緩沖區、相關事件和異常報告等對象的分配或初始化工作。步驟五開始仿真,仿真成員進行數據收發;仿真數據從發送方經虛擬網卡和虛擬信道送達一個或多個接收方,并在到達接收 方的虛擬網卡之前進行針對信道的仿真處理。步驟六結束仿真,評估無線信道的性能。本發明的優點在于(1)配置靈活,可擴展性好。仿真模型中不依賴真實的無線通信設備,虛擬設備的 數量和參數可以隨意配置;(2)對底層透明,可重用性高。屏蔽了底層的硬件差異,無論底層采用何種設備,都 統一虛擬為以太網卡;(3)保證了仿真環境與真實環境的一致性,仿真結果更精確,提高了仿真可信度;(4)降低仿真人員的工作量,真實環境中的應用不需要改動就可直接移植到仿真 環境中進行測試與評估,避免了為仿真環境與真實環境各開發一套應用的重復勞動;反過 來,仿真環境中的應用也能夠很容易地移植到真實環境中來。
圖1是本發明的方法流程圖; 圖2是本發明仿真模型的硬件環境示意圖; 圖3是本發明虛擬網卡和虛擬信道的示意圖; 圖4是本發明步驟五中數據發送的流程圖; 圖5是本發明步驟五中數據接收的流程圖; 圖中
1-仿真成員2-虛擬網卡 3-虛擬信道4-物理網卡
201-待發送處理模塊202-異常報告 203-接收緩沖隊列 2011-發送緩沖隊列 2012-待發送事件 301-服務進程302-通信進程
3011-監視線程
3012-發送線程
3021-發送數據格式轉換模塊 3023-媒體接入控制協議 3025-接收數據預處理模塊
3013-接收線程 3022-發送緩沖區 3024-數據傳輸接口 3026-接收數據格式轉換模塊
具體實施例方式下面將結合附圖和實施例對本發明作進一步的詳細說明。本發明是一種基于虛擬網卡的無線信道仿真方法,流程如圖1所示,包括以下幾 個步驟步驟一搭建仿真模型的硬件環境;
如圖2所示,仿真模型包括n個仿真成員1,仿真成員K至仿真成員間通過 以太網相連,每個仿真成員1配備m塊虛擬網卡2和至少一塊物理網卡3,m> 1,仿真數據 通過虛擬網卡2進入虛擬信道3,在虛擬信道3中經過轉換后通過物理網卡4發送到以太網 上,經以太網到達其它仿真成員1。通常無線虛擬信道3的傳輸速率遠小于以太網,因此可 以采用多個虛擬信道3共用一塊物理網卡4的方式,不僅節省硬件資源,也增加了配置的靈 活性。步驟二 構建仿真模型的仿真環境;虛擬網卡2如圖3所示,包括待發送處理模塊201、異常報告202和接收緩沖隊列 203。待發送處理模塊201包含發送緩沖隊列2011和待發送事件2012 ;虛擬網卡2的驅動為NIC (Network Interface Card)驅動,NIC驅動的常用模式 是NDIS小端口驅動,NDIS小端口驅動是Windows設備小端口驅動的一種,位于NDIS的最 底層,直接控制NIC設備;虛擬網卡驅動運行在內核模式下。發送緩沖隊列2011用于暫存與上層交互的輸入數據,然后將輸入數據發送至虛 擬信道3,接收緩沖隊列203用于暫存與上層交互的輸出數據,然后將輸出數據發送至上 層。虛擬網卡2發送與接收的數據為以太網幀。虛擬網卡2為上層的每次發送請求觸發一次待發送事件2012。待發送事件2012 用于通知服務進程301發送緩沖隊列2011中有數據待發送。在數據發送過程中,如果超時則取消數據發送,通過異常報告來通知服務進程 301。異常報告可以用事件通知或異步IRP (I/O Request Packet, I/O請求包)等方式實 現。待發送處理模塊201、異常報告202、接收緩沖隊列203構成了虛擬網卡驅動的基 本框架,用于銜接上層與虛擬信道之間的數據交互。虛擬信道3如圖3所示,包括服務進程 301與通信進程302 ;虛擬信道3邏輯上是虛擬網卡驅動的下層。在真實環境中虛擬信道3 由網絡接口卡和網絡傳輸介質組成,而在仿真環境中由軟件方式實現。服務進程301和通 信進程302都運行在用戶模式下。服務進程301由一些線程組成,包括監視線程3011、發送線程3012和接收線程 3013。監視線程3011負責與虛擬網卡驅動的交互,發送線程3012和接收線程3013負責與 通信進程302的交互。工作在內核模式的虛擬網卡驅動與工作在用戶模式的監視線程3011 交互方式極為有限,本發明中虛擬網卡驅動對監視線程3011的通知采用事件觸發或異步 1/0(輸入輸出)的方式,監視線程3011對虛擬網卡2的通知及讀寫通過對虛擬網卡驅動的 同步或異步I/O實現。同為用戶模式的發送線程3012、接收線程3013與通信進程302的交 互方式很多,可通過消息、共享內存、命名管道、本地過程調用(LPC)等手段實現。通信進程302是仿真模型的核心,負責處理虛擬鏈路層與虛擬物理層的算法。通 信進程302包括發送數據格式轉換模塊3021、發送緩沖區3022、媒體接入控制(MAC)協議 3023、數據傳輸接口 3024、接收數據預處理模塊3025和接收數據格式轉換模塊3026。當虛擬網卡2向虛擬信道3發送數據時,數據經過發送線程3012到達通信進程 302,由發送數據格式轉換模塊3021轉換為適應虛擬物理層的數據格式再送入發送緩沖區 3022,發送緩沖區3022用于保存已由虛擬網卡2送達,但未發送到虛擬物理層的數據;媒體 接入控制協議3023負責媒體接入控制子層協議算法的仿真。
當虛擬網卡2從虛擬信道3接收數據時,數據經過數據傳輸接口 3024,經接收數據 預處理模塊3025處理并過濾后到達接收數據格式轉換模塊3026,接收數據格式轉換模塊 3026將來自虛擬物理層的數據轉換成以太網數據幀,并傳給服務進程的接收線程3013。數據傳輸接口 3024負責與物理網卡的通信。因為內核模式的實現過于復雜,所以將仿真的相關算法同網卡驅動脫離開來,統 一放在通信進程中實現。服務進程的作用就是將虛擬網卡中內核模式的輸入輸出數據流轉 換為用戶模式的相應數據流,并交給通信進程的仿真算法處理。步驟三用戶配置仿真成員的初始化參數;具體為1)初始化每個虛擬網卡2的IP地址和MAC (Media Access Controller,媒體訪問 控制)地址,每個虛擬網卡2的MAC地址不重復,而且虛擬網卡2的MAC地址與仿真系統中 物理網卡的MAC地址不沖突,例如,生成MAC地址的方法為a)前三個字節代表網卡廠商的OUI (組織唯一標示符),不要使用已由IEEE(美 國電氣和電子工程師協會)分配給網卡廠商的OUI。比如U/L位(Universally/ Locallyadministered bit,第一字節的次低位)為1的地址表明這是一個由網絡管理員分 配的本地管理地址,IEEE不會分配這樣的地址給網卡廠商;b)對于網卡的MAC地址,多播位(第一字節的最低位)應始終置0 ;c)后三字節無特殊要求,從0開始依次加1即可。2)如果設備不支持ARP (地址解析協議)或者為了簡化仿真模型省略ARP報文的 發送,則根據步驟1)中IP地址與MAC地址的對應關系配置靜態ARP列表。這是對操作系 統配置的改動,需要用到操作系統的ARP命令;3)初始化每個虛擬網卡2所在的子網。各個子網用于模擬無線網絡中使用不同頻 段的各個網絡,不同子網的成員在物理層是隔絕的;4)初始化每個虛擬網卡2的通信范圍;5)初始化每個仿真成員的虛擬地理位置,如果是移動節點還要配置移動方式;6)初始化每個虛擬網卡2子網的性能參數波特率、誤碼率、虛擬物理層的通信方 式(廣播/非廣播),這些參數與仿真系統所模擬的無線網絡中各子網性能參數一致;7)如果使用操作系統未集成的通信協議,則用戶進行建模,并初始化。如果全部使 用操作系統內置的通信協議(TCP、UDP、IP、以太網協議等),則略過此步驟。以下幾種類別的協議可由用 定制,需要用戶進行建模,并初始化a)用戶在上層應用中使用定制協議。這種情況用戶可自由定制,無特殊要求;b)用戶將協議封裝成協議驅動的形式。這種情況下用戶需遵循操作系統協議驅動 的規范,并對虛擬網卡添加這些協議的驅動;c)用戶在通信進程302中使用自定義的媒體接入控制協議3023。這種情況下用 戶可以在媒體接入控制協議3023中自由定制自己的時隙調度算法,并通過以下方式將媒 體接入控制協議3023嵌入到通信進程302中來 i.媒體接入控制協議3023向通信進程302提供三個接口函數=StartUp、 ShutDown與QuerySend。通信進程302通過StartUp啟動協議流程,通過ShutDown終止協 議流程,通過QuerySend向媒體接入控制協議3023提起發送請求。
Startup 函數說明函數原型void Startup (void);功能啟動媒體接入控制協議,開始運行自定義的時隙調度算法;調用時機仿真開始后調用。ShutDown 函數說明函數原型void ShutDown (void);功能結束媒體接入控制協議,停止時隙調度算法;調用時機仿真結束前調用。QuerySend 函數說明函數原型void QuerySend (UL0NG ulBytes);參數類型為無符號長整數類型,值為發送緩沖區3022中的剩余字節數;功能UlByteS大于0時,表示通信進程302向媒體接入控制協議3023提起發送 請求,媒體接入控制協議3023需要在下次分配到發送時隙時調用CanSendNo^見下文)通 知通信進程302 ;ulBytes等于0時,表示通信進程302無內容可發送,媒體接入控制協議 3023在收到下次發送請求之前毋須調用CanSendNow。調用時機通信進程302在發送緩沖區3022狀態發生改變時調用。發送緩沖區 的狀態改變包括新的待發送數據插入發送緩沖區;已發送完畢的數據從發送緩沖區中清 除。ii.通信進程302向媒體接入控制協議3023提供兩個接口函數fanSendNow和 CeaseSendingo媒體接入控制協議3023通過CanSendNow通知通信進程302開始發送數據, 通過CeaseSending通知通信進程302中止數據發送。CanSendNow 函數說明Ml^J^M :void CanSendNow (DWORD dwMicroseconds);參數類型為DWORD (無符號32位整數類型),值為本次分配的時隙長度,單位為微妙;功能通知通信進程302可以開始發送數據,并告知可用的時隙長度。通信進程 302從發送緩沖區3022中取出適量的數據幀發送至數據傳輸接口,若dwMicroseconds值 大于0,則在持續發送dwMicroseconds微妙后中止發送,若dwMicroseconds值等于0,表 示發送不受時間限制,在發生以下兩種情形之一時中止發送媒體接入控制協議3023調用 CeaseSending(見下文);或發送緩沖區發送完畢。通知通信進程302在中止發送后通過 QuerySend將發送緩沖區3022中的剩余字節數告知媒體接入控制協議3023 ;調用時機媒體接入控制協議3023在分配到發送時隙時調用。CeaseSending 函數說明Ml^J^M :void CeaseSending (void);功能通知通信進程302暫停發送數據;調用時機通信進程302尚未發送完畢但媒體接入控制協議3023需要提前中止發 送時調用。步驟四仿真系統加載虛擬網卡驅動,完成內部初始化工作仿真開始之前,仿真系統要根據用戶的配置加載虛擬網卡驅動,并完成一系列內部初始化工作,具體為1)初始化虛擬網卡驅動,包括a)為每個虛擬網卡的發送緩沖隊列和接收緩沖隊列分配內存空間;b)保存用戶為每個虛擬網卡設定MAC地址。虛擬網卡驅動通過NDIS函數庫中的 MiniportQueryInformation回調函數中對網卡硬件地址0ID_802_3_PERMANENT_ADDRESS 或者網卡當前使用地址0ID_802_3_CURRENT_ADDRESS的請求返回虛擬網卡的MAC地址。所述的MiniportQueryInformation是虛擬網卡驅動向NDIS提供的一個回調函 數,NDIS通過調用此函數查詢微端口驅動程序的性能和當前狀態,其函數原型為NDIS_STATUS MiniportQueryInformation(_in NDIS一HANDLE MiniportAdapterContext,_in NDIS_0ID Oid,_in PVOID InformationBuffer,_in ULONG InformationBufferLength,_out PULONG Bytesffritten,_out PULONG BytesNeeded)各參數的詳細含義見MSDN(Microsoft Developer Network)。當參數 Oid 為 0ID_802_3_PERMANENT_ADDRESS 或 0ID_802_3_CURRENT_ADDRESS 時,表明 NDIS 正在通過此 函數查詢MAC地址,虛擬網卡驅動需要將MAC地址的六字節復制到InformationBuffer指 向的內存地址中,并將BytesWritten指向的值賦為MAC地址的字節數(6),BytesNeeded指 向的值置O ;c)虛擬網卡驅動為每個虛擬網卡指定一個待發送事件指針2012,指針初始值為 空,稍后再通過服務進程進行初始化;d)虛擬網卡驅動為每個虛擬網卡指定一個用于異常報告202的IRP指針,指針初 始值為空,稍后再通過服務進程進行初始化;e)虛擬網卡驅動使用名為NdisMRegisterDevice的API注冊設備名和設備符號鏈接名。
NdisMRegisterDevice 是 NDIS 的 API,其函數原型為
NDIS_STATUS NdisMRegisterDevice(
_inNDIS_HANDLE NdisffrapperHandle,
_inPNDIS_STRING DeviceName,
_inPNDIS_STRING SymboIicName,
_inPDRIVER_DISPATCH MajorFunctions[],
_outPDEVICE_OBJECT * pDeviceObject,
_outNDIS_HANDLE ★ NdisDeviceHandle
);
各參·〔的詳細含義見MSDN。作用是創建一個命名的設備對象(名稱由參數
DeviceName指定),并為此設備對象創建一個用戶模式下可見的符號鏈接名(符號鏈接名由參數SymbolicName指定)。符號鏈接名會被服務進程所使用。NdisMRegisterDevice同 時還注冊了一組派遣函數(由參數MajorFimctions指定),派遣函數用來處理來自服務進 程的各種I/O操作。2)啟動并初始化服務進程301,包括a)啟動監視線程3011、接收線程3012和發送線程3013 ;b)監視線程3011通過名為CreateFile的API打開虛擬網卡,得到虛擬網卡的設 備句柄。CreateFile是操作系統的API,其函數原型為HANDLE WINAPI CreateFile (_in LPCTSTR lpFileName,_in DWORD dwDesiredAccess,_in DWORD dwShareMode,_in_opt LPSECURITY_ATTRIBUTES IpSecurityAttributes,_in DWORD dwCreationDisposition,_in DWORD dwFlagsAndAttributes,_in_opt HANDLE hTemplateFile);各參數的詳細含義見MSDN。第一個參數lpFileName要使用之前虛擬網卡驅動注 冊的設備符號鏈接名。CreateFile所返回的設備句柄會在未來的1/0操作中使用;c)監視線程3011創建待發送事件,并通過1/0操作將待發送事件的句柄傳給虛擬 網卡驅動,虛擬網卡驅動根據此名柄初始化待發送事件的指針(步驟五中將其簡稱為“注 冊待發送事件”);d)監視線程創建異常報告對象,通過異步1/0操作傳給虛擬網卡驅動。在此過程 中生成的IRP指針在虛擬網卡驅動的派遣函數中被虛擬網卡驅動捕獲并保存,并在未來處 理異常報告202時所使用。3)啟動并初始化通信進程302,包括a)為發送緩沖區3022分配內存空間;b)與服務進程的發送線程3011和接收線程3012建立數據通道。可以通過線程消 息、共享內存、命名管道、LPC等方式實現;c)初始化數據傳輸接口 3024,建立與虛擬信道中其它通信進程之間的數據通道。 可以通過Windows套接字(socket)、遠程過程調用(RPC)等方式實現。步驟五開始仿真,仿真成員1進行數據收發。(1)對數據發送過程進行仿真,如圖4所示;具體為①虛擬網卡驅動向服務進程301提交數據。服務進程301的監視線程3011在步驟四中已打開虛擬網卡2,向虛擬網卡驅動注 冊待發送事件2012,并等待網卡驅動的通知。當虛擬網卡驅動收到上層的發送請求時,如果 服務進程301注冊過待發送事件2012,則將數據放入發送緩沖隊列2011并觸發待發送事 件2012,通知服務進程301的監視線程3011。監視線程3011收到待發送事件2012后,從虛擬網卡2中讀出數據。如果服務進程301沒有注冊過待發送事件2012,則將數據丟棄,通 知上層發送結果,完成步驟①后虛擬網卡2進入等待階段;②服務進程301向通信進程302提交數據。服務進程301從虛擬網卡2中得到數據之后進行兩步并行的操作由發送線程 3012將此條數據送給通信進程302,同時監視虛擬網卡驅動的異常報告202以隨時獲取取 消發送的通知。完成此步驟②后服務進程301的發送線程3012進入等待階段;③通信進程302向虛擬物理層發送數據。通信進程302從服務進程301收到數據后不是立即發送,而是將數據通過發送 數據格式轉換模塊3021,將數據格式轉換為適合虛擬物理層的格式,然后放入發送緩沖區 3022暫存,并等待媒體接入控制協議3023為通信進程分配發送時隙。通信進程分配到發 送時隙后,將轉換過的數據通過數據傳輸接口 3024發送到虛擬物理層,然后依次發生通信 進程成功發送通知、服務進程成功發送通知和虛擬網卡驅動成功發送通知三個成功發送通 知,三個通知分別將成功發送通知給服務進程301、虛擬網卡驅動和上層。成功發送后,通信 進程302和虛擬網卡驅動將發送緩沖區3022和發送緩沖隊列2011中的數據刪除。由于數 據發送是異步的,當虛擬網卡驅動等待成功發送通知過程中可能會由于超時或其它原因取 消此條數據的發送,取消的過程由虛擬網卡驅動發起,產生三個取消發送通知虛擬網卡驅 動取消發送通知、虛擬網卡驅動取消發送通知和服務進程取消發送通知,分別通知上層、服 務進程和通信進程數據發送取消。然后通信進程302和虛擬網卡驅動將發送緩沖區3022 和發送緩沖隊列2011中的數據清除。發送數據結束。所述的轉換具體為i幀格式轉換。仿真環境所模擬的無線網絡在數據鏈路層的幀格式可能與以太網 并不一致,這種情況下需要將以太網幀的數據部分提取出來并按照真實設備的幀格式重新 封裝。ii幀長度轉換。以太網協議的默認最大傳輸單元是1500字節,可能與仿真系統所 模擬的設備并不一致。如果出現了不一致的情況,需要將以太網幀按照真實設備的最大的 傳輸單元進行拆分或重組。iii非廣播網中廣播報文與單播報文的轉換。仿真系統所模擬的無線網絡在虛擬 物理層可能使用非廣播的通信方式,這種情況下一條廣播報文需要通過轉換為多條單播報 文的方式來實現。(2)對數據接收過程進行仿真,如圖5所示;具體為①通信進程302從虛擬物理層收到數據。通信進程的接收數據預處理模塊3025負責執行虛擬信道的部分仿真功能,包括 兩部分i.對解析出的數據進行時延和誤碼的仿真處理;ii.判斷本機符合接收本次數據條件的虛擬網卡。接收數據預處理模塊3025根據每一條數據的附加信息計算得出符合數據接收條 件的虛擬網卡2,所述的數據附加信息包括數據發送的時刻;信道所在的子網;子網是否具有廣播能力;信道的時延和誤碼率參數;源地址與目的地址;數據發送時源節點的虛擬 位置等。這些附加信息由發送方填寫,并伴隨數據一起發送。通信進程根據這些信息判斷 本機哪些虛擬網卡符合接收條件。判斷的條件分三步i.通信進程根據此時本機的虛擬位置與附加信息中的源節點虛擬位置得到兩個 節點的相對距離,并與虛擬網卡的通信范圍進行比較。本機超出了源節點傳輸范圍的虛擬 網卡不應接收本次數據,對未超出源節點傳輸范圍的虛擬網卡進行步驟ii ;ii.比較虛擬網卡所在的子網與附加信息中本次數據傳輸的信道所在的子網,子 網不一致的虛擬網卡不應接收本次數據,其余虛擬網卡遵循步驟iii ;iii.虛擬物理層使用廣播通信方式的子網,到達步驟iii的所有虛擬網卡都允許 接收本次數據;虛擬物理層使用非廣播通信方式的子網,只有與附加信息中的目的地址匹 配的虛擬網卡才允許接收本次數據;如果接收數據預處理模塊3025找到了符合接收條件的虛擬網卡,則將經過預處 理后的數據發送給接收數據格式轉換模塊3026,按照標準以太網幀格式進行轉換后發送給 服務進程的接收線程3013,并告知服務進程應將本次數據送往哪些虛擬網卡;如果所有虛 擬網卡都不符合接收條件,則丟棄本次數據。②服務進程301將接收線程3013收到的數據通過監視線程3011傳給虛擬網卡驅 動;③虛擬網卡驅動將從服務進程301收到的數據存入接收緩沖隊列203,并通知上 層處理。NDIS的框架決定了上層的處理過程是異步的,因此虛擬網卡驅動中還需要一個接 收緩沖隊列。上層處理完畢后會調用虛擬網卡驅動在NDIS注冊的回調接口,此時可以將數 據從接收緩沖隊列中清除以釋放空間。接收數據結束;步驟六結束仿真,評估無線信道的性能;所有仿真成員1的數據收發完畢后,結束仿真,統計仿真結果,評估無線信道的性 能。實施例1 對無線自組織網絡路由協議進行仿真與評估;仿真模型描述仿真對象為無線自組織網絡,由大約20個高速移動的節點組成, 每個節點最多可使用五個無線通道。網絡MAC層基于TDMA(時分多址)協議,網絡層與傳 輸層分別使用IP協議和UDP協議。仿真模型用于評估在此環境下某種無線路由協議的網 絡吞吐量、平均端到端時延、丟包率等參數。對應的仿真模型由一個包含20臺主機的局域 網組成,每臺主機仿真一個節點,每臺主機上配有五塊虛擬網卡和至少一塊物理網卡。用戶 定制的部分包括虛擬信道的通信進程中媒體接入控制協議采用自定義的TDMA協議;在應 用層實現基于UDP的自定義路由協議。通過與傳統網絡仿真工具(如0PNET)的仿真結果對比,在同等模型下兩者的仿真 結果近似,說明本方法能夠在一定程度上保證仿真結果的準確性。而與0PNET等仿真工具 相比,本發明具有以下優點1)本發明能夠方便快捷地實現半實物仿真,只須將以太網仿真環境替換物理設備 或半實物模擬器即可。而0PNET以數學仿真方式為主,在半實物仿真方面有所欠缺,具體表現在 a)只有較高版本的0PNET中可以通過SITL (System-in-the-loop)模塊與物理設 備進行協同仿真,舊版本的無此功能;b)SITL與物理設備之間通過以太網卡或無線網卡連接,多個物理設備需要分配多 個物理網卡;而本發明面對多個物理設備只須分配多個虛擬網卡,節省了大量硬件資源。另 外,即使物理設備通過以太網卡以外的方式連接(比如串口、藍牙等),也能通過虛擬信道 轉換為符合虛擬網卡格式的數據。故本發明受硬件約束較小,配置更為靈活;2)本發明的仿真系統與真實系統保持了高度一致性,不但仿真結果可信度高,而 且仿真系統中的協議與應用程序可以很容易地遷移到真實系統中來,這可以大大節省開發 人員的工作量。相比之下0PNET仿真模型在真實系統中的可重用性就極為有限。
權利要求
一種基于虛擬網卡的無線信道仿真方法,其特征在于,包括以下幾個步驟步驟一搭建仿真模型的硬件環境;仿真模型包括n個仿真成員,仿真成員A1至仿真成員An之間通過以太網相連,每個仿真成員配備m塊虛擬網卡和至少一塊物理網卡,m≥1,仿真數據通過虛擬網卡進入虛擬信道,在虛擬信道中經過轉換后通過物理網卡發送到以太網上,經以太網到達其它仿真成員;步驟二構建仿真模型的仿真環境;虛擬網卡包括待發送處理模塊、異常報告和接收緩沖隊列;待發送處理模塊包含發送緩沖隊列和待發送事件;虛擬網卡的驅動為NDIS小端口驅動;NDIS為網絡接口規范,發送緩沖隊列用于暫存與上層交互的輸入數據,然后將輸入數據發送至虛擬信道,接收緩沖隊列用于暫存與上層交互的輸出數據,然后將輸出數據發送至上層;虛擬網卡發送與接收的數據為以太網幀;虛擬網卡為上層的每次發送請求觸發一次待發送事件;待發送事件用于通知虛擬信道中的服務進程此時發送緩沖隊列中有數據待發送;在數據發送過程中,如果超時則取消數據發送,通過異常報告來通知服務進程;虛擬信道包括服務進程與通信進程;虛擬信道邏輯上是虛擬網卡驅動的下層;服務進程包括監視線程、發送線程和接收線程;監視線程負責與虛擬網卡驅動的交互,發送線程和接收線程負責與通信進程的交互;通信進程負責處理虛擬鏈路層與虛擬物理層的算法;通信進程包括發送數據格式轉換模塊、發送緩沖區、媒體接入控制協議、數據傳輸接口、接收數據預處理模塊和接收數據格式轉換模塊;當虛擬網卡向虛擬信道發送數據時,數據經過服務進程中的發送線程到達通信進程,由發送數據格式轉換模塊轉換為適應虛擬物理層的數據格式再送入發送緩沖區,發送緩沖區用于保存已由虛擬網卡送達,但未發送到虛擬物理層的數據;媒體接入控制協議負責媒體接入控制子層協議算法的仿真;當虛擬網卡從虛擬信道接收數據時,數據經過數據傳輸接口,經接收數據預處理模塊處理并過濾后到達接收數據格式轉換模塊,接收數據格式轉換模塊將來自虛擬物理層的數據轉換成以太網數據幀,并傳給服務進程的接收線程;數據傳輸接口負責與物理網卡的通信;步驟三用戶配置仿真成員的初始化參數;具體為1)初始化每個虛擬網卡的IP地址和MAC地址,MAC為媒體訪問控制;每個虛擬網卡的MAC地址不重復,而且虛擬網卡的MAC地址與仿真系統中物理網卡的MAC地址不沖突;2)如果設備不支持地址解析協議或者省略地址解析協議報文的發送,則根據步驟1)中IP地址與MAC地址的對應關系配置靜態地址解析協議列表;3)初始化每個虛擬網卡所在的子網;4)初始化每個虛擬網卡的通信范圍;5)初始化每個仿真成員的虛擬地理位置,如果是移動節點配置移動方式;6)初始化每個虛擬網卡子網的性能參數波特率、誤碼率、虛擬物理層的通信方式,所述的通信方式為廣播或非廣播;7)如果使用操作系統未集成的通信協議,則對其進行建模,并初始化;步驟四仿真系統加載虛擬網卡驅動,完成內部初始化工作;仿真開始之前,仿真系統根據用戶的配置加載虛擬網卡驅動,完成內部初始化,具體為1)初始化虛擬網卡驅動,包括a)分配每個虛擬網卡的發送緩沖隊列和接收緩沖隊列內存空間;b)保存用戶為每個虛擬網卡設定MAC地址,虛擬網卡驅動通過NDIS函數庫中MiniportQueryInformation回調函數對網卡硬件地址OID_802_3_PERMANENT_ADDRESS或者網卡當前使用地址OID_802_3_CURRENT_ADDRESS請求返回虛擬網卡的MAC地址;c)虛擬網卡驅動為每個虛擬網卡指定一個待發送事件指針,指針初始值為空,然后再通過服務進程進行初始化;d)虛擬網卡驅動為每個虛擬網卡指定一個用于異常報告的IRP指針,所述的IRP為I/O Requst Packet,即I/O請求包,指針初始值為空,然后再通過服務進程進行初始化;e)虛擬網卡驅動使用NDIS中名為NdisMRegisterDevice的API注冊設備名和設備符號鏈接名,設備符號鏈接名會被服務進程所使用;NdisMRegisterDevice同時還注冊了一組派遣函數,派遣函數用來處理來自服務進程的各種I/O操作;所述的API全稱為Application Programming Interface,即為應用程序編程接口;2)啟動并初始化服務進程,包括a)啟動監視線程、接收線程和發送線程;b)監視線程根據虛擬網卡驅動注冊的設備符號鏈接名,通過名為CreateFile的API打開虛擬網卡,得到虛擬網卡的設備句柄;c)監視線程創建待發送事件,并通過I/O操作將待發送事件的句柄傳給虛擬網卡驅動,虛擬網卡驅動根據此名柄初始化待發送事件的指針;d)監視線程創建異常報告對象,通過對異步I/O操作傳給虛擬網卡驅動;在此過程中生成的IRP指針在虛擬網卡驅動的派遣函數中被虛擬網卡驅動捕獲并保存,并在未來處理異常報告時所使用;3)啟動并初始化通信進程,包括a)為發送緩沖區分配內存空間;b)與服務進程的發送線程和接收線程建立數據通道;c)初始化數據傳輸接口,建立與虛擬信道中其它通信進程之間的數據通道;步驟五開始仿真,仿真成員進行數據收發;(1)對數據發送過程進行仿真;具體為①虛擬網卡驅動向服務進程提交數據;首先服務進程的監視線程在步驟四中已打開虛擬網卡,向虛擬網卡驅動注冊待發送事件,并等待網卡驅動的通知;當虛擬網卡驅動收到上層的發送請求時,如果服務進程注冊過待發送事件,則將數據放入發送緩沖隊列并觸發待發送事件,通知服務進程的監視線程;監視線程收到待發送事件后,從虛擬網卡中讀出數據;如果服務進程沒有注冊過待發送事件,則將數據丟棄,通知上層發送結果,完成步驟①后虛擬網卡進入等待階段;②服務進程向通信進程提交數據;服務進程從虛擬網卡中得到數據之后進行兩步并行的操作由發送線程將此條數據送給通信進程,同時監視虛擬網卡驅動的異常報告以隨時獲取取消發送的通知;完成此步驟②后服務進程的發送線程進入等待階段;③通信進程向虛擬物理層發送數據;通信進程從服務進程收到數據后將數據通過發送數據格式轉換模塊,將數據格式轉換為適合虛擬物理層的格式,然后放入發送緩沖區暫存,并等待媒體接入控制協議為通信進程分配發送時隙;通信進程分配到發送時隙后,將轉換過的數據通過數據傳輸接口發送到虛擬物理層,然后依次發生通信進程成功發送通知、服務進程成功發送通知和虛擬網卡驅動成功發送通知三個成功發送通知,三個通知分別將成功發送通知給服務進程、虛擬網卡驅動和上層;成功發送后,通信進程和虛擬網卡驅動將發送緩沖區和發送緩沖隊列中的數據刪除;由于數據發送是異步的,當虛擬網卡驅動等待成功發送通知過程中由于超時或其它原因取消此條數據的發送,取消的過程由虛擬網卡驅動發起,產生三個取消發送通知虛擬網卡驅動取消發送通知、虛擬網卡驅動取消發送通知和服務進程取消發送通知,分別通知上層、服務進程和通信進程數據發送取消;然后清除通信進程和虛擬網卡驅動將發送緩沖區和發送緩沖隊列中的數據;發送數據結束;(2)對數據接收過程進行仿真;具體為①通信進程從虛擬物理層收到數據;通信進程的接收數據預處理模塊負責執行虛擬信道的部分仿真功能,包括兩部分i.對解析出的數據進行時延和誤碼處理;ii.判斷本機符合接收本次數據條件的虛擬網卡;接收數據預處理模塊根據每一條數據的附加信息判斷得出符合數據接收條件的虛擬網卡,所述的數據附加信息包括數據發送的時刻;信道所在的子網;子網是否具有廣播能力;信道的時延和誤碼率參數;源地址與目的地址;數據發送時源節點的虛擬位置;所述數據附加信息由發送方填寫,并伴隨數據一起發送;通信進程根據這些信息判斷本機符合接收條件的虛擬網卡;判斷的條件分三步1>通信進程根據此時本機的虛擬位置與附加信息中的源節點虛擬位置得到兩個節點的相對距離,并與虛擬網卡的通信范圍進行比較,本機超出了源節點傳輸范圍的虛擬網卡不接收本次數據,對未超出傳輸范圍的虛擬網卡進行步驟ii;2>比較虛擬網卡所在的子網與附加信息中本次數據傳輸的信道所在的子網,子網不一致的虛擬網卡不接收本次數據,其余虛擬網卡遵循步驟iii;3>虛擬物理層使用廣播通信方式的子網,到達步驟iii的所有虛擬網卡都接收本次數據;虛擬物理層使用非廣播通信方式的子網,只有與附加信息中的目的地址匹配的虛擬網卡才允許接收本次數據;如果接收數據預處理模塊找到了符合接收條件的虛擬網卡,則將經過預處理后的數據發送給接收數據格式轉換模塊,按照標準以太網幀格式進行轉換后發送給服務進程的接收線程,并告知服務進程應將本次數據送往指定虛擬網卡;如果所有虛擬網卡都不符合接收條件,則丟棄本次數據;②服務進程將接收線程收到的數據通過監視線程傳給虛擬網卡驅動;③虛擬網卡驅動將從服務進程收到的數據存入接收緩沖隊列,并通知上層處理;上層處理完畢后會調用虛擬網卡驅動在NDIS注冊的回調接口,此時將數據從接收緩沖隊列中清除以釋放空間;接收數據結束;步驟六結束仿真,評估無線信道的性能;所有仿真成員的數據收發完畢后,結束仿真,統計仿真結果,評估無線信道的性能。
2.根據權利要求1所述的一種基于虛擬網卡的無線信道仿真方法,其特征在于,所述 的虛擬網卡驅動運行在內核模式下。
3.根據權利要求1所述的一種基于虛擬網卡的無線信道仿真方法,其特征在于,所述 的服務進程和通信進程運行在用戶模式下。
4.根據權利要求1所述的一種基于虛擬網卡的無線信道仿真方法,其特征在于,所述 步驟三的1)中虛擬網卡生成MAC地址的方法為a)虛擬網卡MAC地址前三個字節代表網卡廠商的0UI,即組織唯一標示符,不使用由美 國電氣和電子工程師協會分配給網卡廠商的OUI ;b)虛擬網卡MAC地址的多播位即第一字節的最低位,始終置0;c)虛擬網卡MAC地址的后三字節從0開始依次加1。
5.根據權利要求1所述的一種基于虛擬網卡的無線信道仿真方法,其特征在于,所述 步驟三的7)中用戶進行建模,并初始化具體為a)用戶在上層應用中使用定制協議;b)用戶將協議封裝成協議驅動的形式,用戶需遵循操作系統協議驅動的規范,并對虛 擬網卡添加協議的驅動;c)用戶在通信進程中使用自定義的媒體接入控制協議,用戶在媒體接入控制協議中自 由定制自己的時隙調度算法,并通過以下方式將媒體接入控制協議嵌入到通信進程中i.媒體接入控制協議向通信進程提供三個接口函數StartUp、ShutDown與 QuerySend ;通信進程通過StartUp啟動協議流程,通過ShutDown終止協議流程,通過 QuerySend向媒體接入控制協議提起發送請求;ii.通信進程向媒體接入控制協議提供兩個接口函數=CanSendN0w和CeaseSending, 媒體接入控制協議通過CanSendNow通知通信進程開始發送數據,通過CeaseSending通知 通信進程中止數據發送。
6.根據權利要求1所述的一種基于虛擬網卡的無線信道仿真方法,其特征在于,所述 步驟五③中所述的通信進程從服務進程收到數據后將數據通過發送數據格式轉換模塊,將 數據格式轉換為適合虛擬物理層的格式,其轉換具體為i幀格式轉換,當仿真環境所模擬的無線網絡在數據鏈路層的幀格式與以太網不一致 時,將以太網幀解析出來并按照真實設備的幀格式重新封裝;ii幀長度轉換,以太網協議的默認最大傳輸單元是1500字節,當與仿真系統所模擬的設備不一致時,將以太網幀按照真實設備的最大的傳輸單元進行拆分或重組;iii非廣播網中廣播報文與單播報文的轉換,當仿真系統所模擬的無線網絡在虛擬物 理層使用非廣播的通信方式時,將一條廣播報文轉換為多條單播報文。
全文摘要
本發明公開了一種基于虛擬網卡的無線信道仿真方法,包括以下幾個步驟,步驟一搭建仿真模型的硬件環境;步驟二構建仿真模型的仿真環境;步驟三用戶配置仿真成員的初始化參數;步驟四仿真系統加載虛擬網卡驅動,完成內部初始化工作;步驟五開始仿真,仿真成員進行數據收發;步驟六結束仿真,評估無線信道的性能;本發明所述的仿真方法配置靈活,可擴展性好;對底層透明,可重用性高;本發明保證了仿真環境與真實環境的一致性,仿真結果更精確,提高了仿真可信度;降低仿真人員的工作量,很容易實現真實環境與仿真環境中應用的互相移植,避免了為仿真環境與真實環境各開發一套應用的重復勞動。
文檔編號H04W24/06GK101887379SQ201010210848
公開日2010年11月17日 申請日期2010年6月18日 優先權日2010年6月18日
發明者李少松, 熊華鋼, 王海梁, 陳優子, 陳俊延 申請人:北京航空航天大學