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