无线通信与网络系统性仿真实验设计

2018-12-05 02:45孙彦景芦楠楠王艳芬张晓光
实验技术与管理 2018年11期
关键词:吞吐量数据包信道

孙彦景, 陈 岩, 芦楠楠, 李 松, 王艳芬, 张晓光

(中国矿业大学 信息与控制工程学院, 江苏 徐州 221116)

无线通信与网络发展的趋势是从通信到上层应用网络的高度融合。传统的通信与网络割裂式实验教学导致学生系统认知不强、所学知识零散,不利于培养学生系统性与工程性思维。因此,有必要改变分别开设实验课程和设计实验的模式,围绕通信系统与计算机网络系统构建科学、系统且相对独立的系统性教学实验体系,构建起从底层通信到高层网络系统逐步递增模式的全过程系统实验教学环节,增强专业实验的连续性,提升实验教学质量,使得信息与通信工程相关实验教学符合“新工科”教学发展理念。

本文以无线通信网络协议设计仿真实验为例,利用NS3(Network Simulator 3)软件,针对无线局域网IEEE 802.11标准中的MAC协议进行了物理层到应用层的整体性仿真实验设计。该实验可用于无线通信及网络的相关研究和教学,并可进一步开展无线局域网络MAC协议的相关研究和信息与通信工程的一系列课程实验教学。

1 NS3简介

NS3是一个离散事件驱动的网络模拟工具,是一种较新的开源仿真软件,可以对网络中物理层到应用层的所有研究进行仿真,因而成为研究网络的有效实验工具[1-4]。该软件应用于实验教学中,可以有效构建专业课程群整体连续性实验,培养学生系统性与工程性认知[5]。

图1为NS3仿真实验的基本流程[7],若现有模块无法满足仿真需要,应添加修改模块并重新编译。

图1 NS3网络仿真实验基本流程

根据仿真需要创建的脚本主要包括4部分内容:

(1) 网络仿真场景及相关参数;

(2) 事件跟踪函数,用于统计仿真实验数据;

(3) 仿真参数传递入口,用于每次仿真向仿真脚本传递参数值,避免仿真脚本频繁修改;

(4) 信息结果处理程序,用于处理事件跟踪函数统计的仿真数据,并输出当次实验结果。

为方便仿真不同参数下的网络性能,需要借助Linux脚本语言,在不同参数下自动执行仿真脚本,并将仿真输出结果输出至文件中。仿真结束后,利用脚本语言处理仿真输出文件,输出最终仿真结果。如果需要进一步修改实验,可以按照上述步骤重复进行。

2 无线局域网MAC协议

一种新的无线通信技术的应用,需要与之相配套的网络协议的支持;针对特定的应用场景,也需要特定的组网方式来保证系统的有效性与可靠性[8]。因此,对现代通信系统网络的研究不仅是物理层点对点通信技术,网络协议与资源分配也是重点研究方向。在无线网络中,媒体接入控制(medium access control,MAC)层作为物理层的上一层,直接关系到通信信道的使用与分配问题。此外,MAC层向上层网络传输正确接收到的数据包,是通信与网络结合的关键。因此,在无线网络的研究中,MAC层协议的设计与改进成为一个主要的研究方向。尤其是针对新的网络应用场景与异构网络融合的研究,原有的理论研究结果无法得到有效验证。与新兴技术同步进行的MAC协议设计研究在初始阶段难以在硬件设备上实验验证[9],因此,软件仿真成为一种有效的研究和实验方式。

在现有的IEEE802.11无线局域网络中,MAC协议为分布式协调方式(distributed coordination function,DCF)[10],其中包含Basic机制和RTS/CTS机制。在Basic机制中,当节点检测到信道空闲时间长于分布式帧间间隙(DIFS)时,节点将信道视为空闲,数据迟1个DIFS后立刻发送,如图2所示。数据包传输完成,目的节点在正确接收数据后延迟SIFS时间后发送ACK帧,源节点接收到ACK后,此次传输完成。当信道再次空闲持续长达DIFS之后,进入下一次接入竞争。

图2 Basic机制

然而当一次传输中同时有多个节点发送数据时,会发生冲突,使数据无法成功传输,浪费信道资源。浪费的时间是冲突节点中传输的最长数据的时间。

采用CSMA/CA协议(RTS/CTS机制),可减少信道资源浪费。如图3所示,在数据发送之前,通过发送RTS和CTS帧进行数据传输的请求与确认。目的节点接收到数据帧后,同样通过ACK确认此次传输完成。在发送RTS过程中,会发生多个节点发送冲突,造成信道资源的浪费,冲突持续时间为RTS传输时间加上1个DIFS时间。但RTS帧长度远小于数据帧长度,因此冲突时间远小于CSMA/CD机制中的冲突时间,可以有效减少信道资源浪费,因此被广泛应用于无线网络中。

图3 RTS/CTS机制

此外,当网络中的节点有数据要发送时,在发送之前会执行二进制指数退避机制[10],在数据发送之前会选择一定的退避窗口,当信道空闲时执行退避计数器减操作。若信道忙,则退避计数器冻结,停止计数。当退避计数器减至0且信道状态空闲则发送数据,否则继续退避。若一次发送失败,进入下一次退避重传,同时退避窗口翻倍,直至数据传输成功。若退避窗口达到最大时仍传输失败,则放弃此次数据传输,进行丢包处理。

对DCF协议性能的研究往往以Bianchi所提出的离散Markov模型为基础[11]。该模型可以有效模拟DCF协议中退避过程。

3 基于NS3的仿真实验

本文采用NS3中的WiFi模块设计MAC协议性能分析的仿真实验。在仿真实验中,需要赋予网络中各节点WiFi设备的功能。节点在NS3中为实际通信设备的抽象,包括应用程序、网络设计及驱动等一系列实际设备特性。图4为NS3中WiFi设备的结构,各模块含义为[12]:

图4 NS3中WiFi设备结构

Application:设备上所安装的用户应用程序的抽象,即数据的产生程序;

WifiNetDevice:对实际设备中网络设备的抽象,包含网卡硬件与驱动程序;

MACHigh:WiFi设备高层MAC抽象,用于设置WiFi网络设备类型(AP,Station,Adhoc);

DcaTxOp与MacRxMiddle:分别用于处理发送队列与接收队列中数据包发送与接收;

MacLow:涉及DCF中控制帧和数据帧的发送与接收;

DcfManager:DCF机制的具体实现及节点收发状态监听管理;

WifiPhy:实际发送过程中物理层收发处理,包含物理层接收信号强度、SNR、误码率、发送功率等相关信息;

WifiChannel:仿真所用信道模型。

在NS3中实现WiFi网络仿真场景的基本流程为:

(1) 创建节点:为仿真网络场景创建设备节点;

(2) 创建Wifi类并设置协议标准;

(3) 创建WifiMAC协议类并设定协议的类型与参数;

(4) 创建WifiPhy类并设置相关参数;

(5) 创建WifiNetDevice;

(6) 创建WifiChannel类并设置信道传输模型及相关参数;

(7) 将不同的WifiMAC协议与WifiPhy类组合成WiFi类并封装到WifiNetDevicel类中,将不同的WifiNetDevice分别安装至不同的节点上;

(8) 将网络中的所有节点的WifiPhy类中的信道设置成所生成的WifiChannel,以将所有节点放置在一个信道内工作;

(9) 为每个节点分配网络地址(IP地址);

(10) 为每个节点安装应用,包括应用类型、应用的目的节点和网络接口。

完成上述操作,可以建立一个完整的WiFi网络仿真场景应用于教学实验中,使学生掌握硬件设备实现各功能的方法,并通过修改仿真参数获得不同的仿真结果。因此,需要为仿真脚本添加参数入口、数据收集、结果输出功能。

在NS3仿真中,通过添加“cmd.AddValue”代码,并与命令行或“.sh”脚本联合使用,可在不修改脚本的情况下进行不同参数的仿真,例如:

CommandLine cmd;

cmd.AddValue (″nwifi″,″number of station″, nwifi);

cmd.Parse (argc, argv);

其中cmd.AddValue函数参数分别表示:传递变量的形式参数名、参数注释、脚本中对应的变量名。如上述脚本在执行命令之后添加-nwifi=30,可将该次仿真中的nwifi变量值设置为30。

NS3是离散事件驱动的模拟器,因此对仿真过程中的数据进行收集是通过监听仿真过程中的离散事件来实现的,通过在仿真中为相应的事件设置触发回调函数来完成数据收集。如需要追踪编号为0的节点上的MAC层接收到的总数据包大小,即可通过以下代码实现:

Config::Connect (″/NodeList/0/DeviceList/*/Mac/MacRx″, MakeCallback (&DevRxTrace))

将事件的触发回调函数设置为DevRxTrace。编写DevRxTrace函数如下:

void

DevRxTrace (std::string context, Ptr p)

{

mac_bytesTotal += p->GetSize ()

}

通过以上仿真设置,编号为0的节点每接收到一个数据包,总接收数据大小mac_bytesTotal加上该数据包大小,从而达到仿真信息跟踪收集的目的。

在程序脚本最后,对仿真过程中收集到的相关信息作计算处理并打印或写入相关文件中即可。之后利用gnuplot软件[13-14]对仿真结果绘制图形即可完成仿真,可直观查看到仿真结果。

4 实验结果

本文根据Bianchi的研究分别进行了系统平均吞吐量随节点数、初始退避窗口大小、最大退避阶数变化的性能仿真,并与理论分析结果做对比。为更好地对比Bianchi模型的理论结果,本文对实验结果进行归一化处理。

图5为DCF中不同机制与参数下系统平均吞吐量随节点数变化的仿真及理论曲线,可以看出仿真实验所得结果较接近理论计算结果。

图5 系统吞吐量与节点数关系的NS3仿真与Matlab数值计算比较

图6为RTS/CTS模式下的平均系统吞吐量与初始退避窗口大小之间关系的NS3仿真图和Matlab数值计算图,设置最大退避阶数为6,可见两者贴合程度较高。

图6 RTS/CTS模式下系统吞吐量与最小退避窗口关系的NS3仿真与Matlab数值计算比较

图7为basic模式下的平均系统吞吐量与初始退避窗口之间关系的NS3仿真图和Matlab数值计算图,设置最大退避阶数为6,可见两者的贴合程度较高。

图7 Basic模式下系统吞吐量与最小退避窗口关系的NS3仿真结果与Matlab数值计算结果

图8为DCF中的平均系统吞吐量与最大退避阶数之间关系的NS3仿真图和Matlab数值计算图,最小退避窗口设置为32,可见仿真结果较贴近于理论计算值。

图8 系统吞吐量与最大退避阶数关系的NS3仿真结果与Matlab数值计算结果

5 总结

本文对在NS3中搭建WiFi网络MAC协议仿真的过程进行了详细描述,具体描述仿真过程中对通信与网络实现整体性搭建方法。实验仿真了IEEE 802.11标准中MAC层DCF机制,仿真结果与理论计算结果贴合度较高,实验设计成功。可在此实验的基础上进一步进行无线网络MAC协议的研究与教学工作,以及信息与通信工程的一系列课程群整体教学实验设计。

猜你喜欢
吞吐量数据包信道
基于Jpcap的网络数据包的监听与分析
SmartSniff
2017年3月长三角地区主要港口吞吐量
2016年10月长三角地区主要港口吞吐量
2016年11月长三角地区主要港口吞吐量
基于导频的OFDM信道估计技术
一种改进的基于DFT-MMSE的信道估计方法
基于MED信道选择和虚拟嵌入块的YASS改进算法
2014年1月长三角地区主要港口吞吐量
一种基于GPU的数字信道化处理方法