一种基于虚拟网卡的无线信道仿真方法

文档序号:7752581阅读:226来源:国知局
专利名称:一种基于虚拟网卡的无线信道仿真方法
技术领域
本发明涉及一种在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日
发明者李少松, 熊华钢, 王海梁, 陈优子, 陈俊延 申请人:北京航空航天大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1