利用NS-3平台分析802.11无线网络协议性能
2022-05-09李珊娜安志强
李珊娜,安志强
(北京交通大学 信息中心,北京 100044)
0 引 言
IEEE 802.11协议是一种无线局域网协议,主要包括两种类型,即独立型网络(以下简称ad hoc网络)和基础型网络(以下简称Sta-AP网络)。ad hoc网至少由两个工作站直接通信组成,其中一个工作站负责接入点AP的工作,工作站间彼此可以直接通信,两者间的距离必须在可以直接通信的范围内[1];Sta-AP网至少包含一个接入点AP和一个工作站,接入点负责基础型网络所有的传输[2]。
该文主要介绍利用NS-3平台仿真不同的网络拓扑结构,通过调整AP数量、节点之间的距离、节点移动速度等参数设置不同的网络环境。实验主要设计模拟三个节点拓扑结构、五个节点拓扑结构、五个节点远距离拓扑结构、六个节点两个AP拓扑结构的网络环境,在每一种拓扑结构下对比Sta-AP网络和ad hoc网络的性能参数,得出一系列结论为现实网络环境搭建提供辅助决策。
实验中利用Wireshark和NS3的FlowMonitor功能作为网络性能分析手段,在网络发送端节点上加载NS-3的OnOff应用,产生发送数据包流量,在网络接收端节点上加载NS-3的PacketSinkHelper应用模拟接收数据包应用。当节点安装ad hoc协议时,通过加载不同的路由协议和设置节点移动参数比较其网络性能差异情况,也验证了路由协议的部分特性,发现Wireshark和NS-3的FlowMonitor在特定情况下获取网络流量的区别,最终得出结论为FlowMonitor方法本身的局限性导致这样的现象。
1 NS-3仿真平台
NS-3是为网络研究和教育而开发的网络仿真平台,它提供了一个分组数据网络如何工作和运行的模型,也为用户提供了一个用于仿真实验的仿真引擎。NS-3使用经典的Unix语言作为环境工具,在GNU/Linux平台下开发,用C++语言实现,兼容时下流行的Python[3]。
NS-3仿真流程主要通过编写网络仿真脚本实现,根据实际仿真对象和仿真场景选择相应的仿真模块,主要包括以下内容:
(1)生成网络节点[4]:NS-3中网络节点是基本计算设备的抽象,节点由C++类中的Node类来描述,Node类提供了管理计算设备所需的各种方法,如网卡、应用程序、协议栈等[5]。
(2)安装网络设备:不同的网络类型有不同的网络设备,网络设备由C++中的NetDevice类来描述,NetDevice类提供管理连接节点和信道的各种方法,如CsmaNetDevice、WiFiNetDevice和PointToPointNetDe-vice等。
(3)安装协议栈:NS-3网络中一般是TCP/IP协议栈,依据网络选择具体协议栈,如是UDP还是TCP,选择具体的路由协议(OLSR、AODV和Global等),并为其配置相应的IP地址。
(4)安装应用层协议:C++中用Application类来描述被仿真的应用程序,这个类提供了管理仿真时用户层应用的各种方法。依据选择的传输层协议选择相应的应用层协议[6]。
通过以上网络仿真脚本的编写,完成网络场景配置。由此可见,搭建NS-3网络仿真场景和搭建实际网络类似。实验中各种网络拓扑结构的模拟都将采用上述过程和方法,熟练使用NS-3仿真流程尤为重要,可以参考官网的方法和实例。
2 性能分析工具
2.1 Wireshark
Wireshark是一个网络封包分析软件。网络封包分析软件的功能是撷取网络封包,并显示出最为详细的网络封包资料。Wireshark使用WinPCAP作为接口,直接与网卡进行数据报文交换。使用Wireshark将得到大量的冗余数据包列表,使用捕捉过滤器和显示过滤器会有助于在大量的数据中迅速定位所需信息。实验中着重分析Wireshark产生的pcap文件,它反映了网络真实的交互过程及性能数据[7]。
2.2 FlowMonitor
FlowMonitor是为NS-3设计的网络监控功能,它自动检测网络中所有的流,可以方便地收集存储NS-3生成的网络性能数据。NS-3提供了FlowMonitor-Help类,可以方便地创建FlowMonitor。它使用安装在网络节点中的探针来跟踪节点交换的数据包,并进行测量一些参数。数据包根据它们所属的流进行划分,其中每个流根据探测器的特征定义,即包含协议、源地址、源端口、目的地址、目的端口的五元组。收集每个流的统计信息可以以XML格式导出,也可以直接访问探针以请求关于每个流的特定统计数据。
3 仿真内容与结果分析
在客户端安装相同的应用产生网络流量[8],通过Wireshark和FlowMonitor来监控服务器端每秒接收网络包的数量。下面将分别介绍不同网络拓扑结构下的实验结论。
3.1 三个节点网络拓扑
三个节点组成等边三角形的拓扑结构,如图1所示,每个网络节点都将同时安装Sta-AP和ad hoc协议。其中n0作为发送端节点,n2为接收端节点,n0节点上安装由OnOffHelper类生成的OnOff应用,通过监测n0至n2的网络流量得出实验结论。
图1 三个节点拓扑结构
当n0和n2之间的距离小于294米时,从图2中得出结论ad hoc性能更好一些;当n0和n2之间的距离等于294米时,三角形高度等于255米时,模拟ad hoc和Sta-AP协议,n2每秒接收的数据包都为0;当距离不变,三角形高度调整为50米时,Sta-AP协议下n2每秒接收的数据包为107个,而ad hoc协议下n2每秒接收的数据包仍为0个。由此可见,当超过一定距离范围时,Sta-AP表现的更好。
图2 不同距离时每秒接收包的数量
既然超过一定距离时Sta-AP表现更好,尝试在当n0和n2之间的距离等于294米时,三角形高度等于50米时加载路由协议,可以发现加载AODV协议[9]时ad hoc表现的更好,加载OLSR协议时[10],Sta-AP表现更好。
3.2 五个节点网络拓扑
五个节点可以互相通信,每个网络节点都将安装Sta-AP或ad hoc协议,当节点安装ad hoc协议时,同时也加载路由协议。结构如图3所示。实验中两条链路将产生网络传输流量,第一条为n0作为发送端节点,n2为接收端节点;第二条为n3作为发送端节点,n4为接收端节点。n0、n3节点上安装由OnOffHelper类生成的OnOff应用,通过监测两条链路的网络流量得出实验结论。
图3 五个节点拓扑结构
从图4、图5的实验结果可以发现,无论AP节点是静止还是移动,ad hoc模式下接收包的数量总是Sta-AP模式的两倍。
通过分析Wireshark产生的pcap抓包文件可以解释上述结论的原因。通过比较Sta-AP和ad hoc模式下一个包的传输时间,发现ad hoc模式下n0到n2用时0.004 449 s,Sta-AP模式下n0到n2用时0.008 898 s,所以ad hoc模式下接收包的数量总是Sta-AP模式的两倍。Sta-AP模式下n0节点要先连接n1(AP节点)传输用时0.004 449 s,然后n1再连接到n2传输用时0.004 449 s,所以累计就是0.008 898 s。因此,这也是这种网络拓扑结构下ad hoc模式比Sta-AP模式性能更胜一筹的原因。
图4 AP静止时每秒接收包的数量
图5 AP移动时每秒接收包的数量
3.3 五个节点远距离的网络拓扑
通过设置n0到n2之间、n3到n4之间不同的远距离长度如600米、1 500米、3 000米,比较ad hoc模式和Sta-AP模式的性能,如图6所示。每个网络节点都将安装Sta-AP或ad hoc协议,当节点安装ad hoc协议时,同时也加载路由协议。
图6 节点速度变化后的性能
实验中设置除了n1节点外的节点一直都在移动,比较n1节点静止和移动状态下,两个协议的性能。
实验结果发现不管中间节点n1静止还是移动,ad hoc模式都比Sta-AP模式性能更好。随着距离的增加,增加节点的移动速度时,无论是ad hoc模式还是Sta-AP模式,服务端收到的包都在增加。
3.4 六个节点两个AP的网络拓扑
这个场景选取n0、n1为两个AP节点,n2、n3为客户端节点,负责发送数据包,n4和n5为服务端节点,用于接收数据包。左侧的n2、n3连接n0即AP1(SSID=wifi1),右侧n4、n5连接n1即AP2(SSID=wifi2),AP1和AP2之间用有线连接起来,每个网络节点都将安装Sta-AP或ad hoc协议。实验中两条链路产生网络传输流量,第一条flow1为n3作为发送端节点,n5为接收端节点,第二条flow2为n2作为发送端节点,n4为接收端节点。拓扑结构如图7所示。
图7 六个节点两个AP的网络拓扑
//创建使用P2P链路的两个节点n0和n1,每一个节点安装点到点的网络设备,在它们之间有一个点到点的信道。两个设备被配置在一个有2 ms传输延时的信道上,以5 Mbps的速率传输数据[11]。
NodeContainer p2pNodes;
p2pNodes.Create (2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate",StringValue ("5Mbps"));
pointToPoint.SetChannelAttribute("Delay",StringValue ("2ms"));
NetDeviceContainer p2pDevices;
p2pDevices = pointToPoint.Install (p2pNodes);
//创建左侧无线自组网节点n2和n3,并将n0作为AP1节点。AP1是个双模节点,安装有Sta-AP和PointToPoint两个网络设备。
NodeContainer leftAdhocNodes;
leftAdhocNodes.Create(2);
leftAdhocNodes.Add(p2pNodes.Get(0));
//创建右侧无线自组网节点n4和n5,并将n1作为AP2节点。AP2是个双模节点,安装有Sta-AP和PointToPoint两个网络设备。
NodeContainer rightAdhocNodes;
rightAdhocNodes.Create(2);
rightAdhocNodes.Add(p2pNodes.Get(1));
//NS3缺省的设置是802.11a采用的频段,实验中设置为802.11b协议。
WifiHelper wifi;
wifi.SetStandard(WIFI_PHY_STANDARD_80211b);
//初始化WIFI信道和物理层
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default ();
//设置传输损耗模型[12]
wifiPhy.Set("EnergyDetectionThreshold",DoubleValue(-80));
wifiPhy.Set("CcaMode1Threshold",DoubleValue(-81));
YansWifiChannelHelper wifiChannel;[13]
wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
wifiChannel.AddPropagationLoss("ns3::FriisPropagationLossModel");
wifiPhy.SetChannel (wifiChannel.Create ());
//分别为左侧和右侧节点装载Wifi协议
WifiMacHelper wifiMac;
wifiMac.SetType ("ns3::AdhocWifiMac");
NetDeviceContainer leftdevices = wifi.Install (wifiPhy,wifiMac,leftAdhocNodes);
NetDeviceContainer rightdevices = wifi.Install (wifiPhy,wifiMac,rightAdhocNodes);
//设置移动模型,让节点n2、n3、n4、n5移动起来[14]
mobility.SetMobilityModel ("ns3::RandomWaypointMobilityModel","Speed",StringValue(speedConstantRandom VariableStream.str ()),
"Pause",StringValue (pauseConstantRandomVariableStream.str ()), "PositionAllocator", PointerValue (taPositionAlloc));
mobility.SetPositionAllocator (taPositionAlloc);
mobility.Install(leftAdhocNodes.Get(0));
mobility.Install(leftAdhocNodes.Get(1));
mobility.Install(rightAdhocNodes.Get(0));
mobility.Install(rightAdhocNodes.Get(1));
//设置移动模型,让节点n0、n1移动起来
Ptr
CreateObject
positionAlloc ->Add(Vector(200,100, 0));
positionAlloc ->Add(Vector(2800,100, 0));
mobility.SetPositionAllocator(positionAlloc);
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(p2pNodes);
//实验中使用OnOff模式模拟产生流量,设置n2向n4节点发送流量,设置On状态下的速率和发包大小
OnOffHelper onoff1("ns3::UdpSocketFactory", InetSocketAddress (rightAdhocInterfaces.GetAddress(0),45));
onoff1.SetAttribute ("PacketSize", UintegerValue (packetSize));
onoff1.SetAttribute ("DataRate", StringValue ("3000000bps"));
onoff1.SetAttribute("OnTime",StringValue("ns3::ConstantRandomVariable[Constant=1]"));
onoff1.SetAttribute("OffTime",StringValue("ns3::ConstantRandomVariable[Constant=0]"));
//将n2设置为发送数据包节点
ApplicationContainer app1=onoff1.Install(leftAdhocNodes.Get(0));
app1.Start(Seconds (var->GetValue (m_dataStart, m_dataStart + 1)));
app1.Stop (Seconds (800.0))
//实验中使用PacketSinkHelper模拟接收数据包,将n4设置为接收数据包节点。
PacketSinkHelper sink2 ("ns3::UdpSocketFactory", InetSocketAddress (rightAdhocInterfaces.GetAddress(0),45));
ApplicationContainer app2=sink2.Install(rightAdhocNodes.Get(0));
app2.Start(Seconds (var->GetValue (m_dataStart, m_dataStart + 1)));
app2.Stop (Seconds (800.0));
//实验中使用 FlowMonitorHelper监控各个节点的流量
FlowMonitorHelper flowmon;
Ptr
NS_LOG_INFO ("Run Simulation.");
Simulator::Stop(Seconds(800.0));
Simulator::Run ();
monitor->CheckForLostPackets();
Ptr
std::map
//监控各个节点的流量并输出
for (std::map
{
Ipv4FlowClassifier::FiveTuplet=classifier->FindFlow(i->first);
//监控flow1的流量并输出发送包和接收包的数量
if ((t.sourceAddress == "10.1.2.2" && t.destinationAddress == "10.1.3.2" && t.destinationPort==45))
{
std::cout<<"Flow"< ess<<"->"< std::cout<<"Ap1-Sta1 transmitted packets:"< std::cout<<"Ap2-Sta1 received packets:"< } //监控flow2的流量并输出发送包和接收包的数量[15] else if ((t.sourceAddress == "10.1.2.1" && t.destinationAddress == "10.1.3.1" && t.destinationPort==45)) { std::cout<<"Flow "< std::cout<<"Ap1-Sta2 transmitted packets:"< std::cout<<"Ap2-Sta2 received packets:"< } 实验结果表明(见图8),如果客户端节点不安装任何路由协议,将不会发送任何数据包,安装路由协议后,将有数据流量产生。当所有节点都静止时,ad hoc模式比Sta-AP模式性能更好,当除了两个AP节点静止其他所有节点都移动时,尤其是远距离时,Sta-AP模式性能更好。当两个AP共用一个信道时,彼此有干扰发生。 图8 不同信道数量的传输性能 当选择六个节点两个AP的拓扑结构,选择 802.11b协议模拟时,通过FlowMonitor和Wireshark监测流量的差距很大。起初分析是由于FlowMonitor的参数MaxPerHopDelay引起的,这个参数设置每一跳的最大延时,缺省值为10秒,如果超过最大延时将被认为丢包。但当分析Wireshark的pcap抓包文件,发现每一跳的延时都没有超过10秒。 图9 802.11a协议下的FlowMonitor流量监测 将802.11b协议换作802.11a协议重复模拟上述现象时,发现通过FlowMonitor和Wireshark监测流量的差距很小,如图9所示。使用Wireshark监测flow1接收包数为217个,flow2接收包数为4 479个;使用FlowMonitor监测flow1接收包数为158个,flow2接收包数为4 476个。由此推断FlowMonitor方法本身的局限性导致这样的现象。 该文主要研究了通过NS-3平台仿真不同网络拓扑结构,充分比较ad hoc模式和Sta-AP模式性能情况。利用Wireshark和FlowMonitor监测分析数据包,得出一系列实验结果,为搭建真实网络环境提供依据。Ad hoc模式提供有限的无线传输范围,传输速度是Sta-AP模式的两倍。Sta-AP模式必须要连接有线网,可以拓展无线网的范围,但是传输速度也减少一半,因为它需要花费时间传输信号到AP而不是直接发送到目的节点。FlowMonitor方法本身的局限性导致。3.5 FlowMonitor和Wireshark的区别
4 结束语