NS3网络仿真(7): Wifi节点
来源:互联网 发布:淘宝怎么做爆款 编辑:程序博客网 时间:2024/05/20 11:21
http://blog.csdn.net/lights_joy/article/details/46868631
快乐虾
http://blog.csdn.net/lights_joy/
欢迎转载,但请保留作者信息
在上一节中,我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP,再连上几个节点。这也是NS3中的示例third.cc干的事情,只是我们用Python实现。
[plain] view plain copy
- // Default Network Topology
- //
- // Wifi 10.1.3.0
- // AP
- // * * * *
- // | | | | 10.1.1.0
- // n5 n6 n7 n0 -------------- n1 n2 n3 n4
- // point-to-point | | | |
- // ================
- // LAN 10.1.2.0
与上一节一样,先构造p2p网络,再构建总线型网线:
[python] view plain copy
- # 构建点对点连接
- p2pNodes = ns.network.NodeContainer()
- p2pNodes.Create (2)
- pointToPoint = ns.point_to_point.PointToPointHelper()
- pointToPoint.SetDeviceAttribute ("DataRate", ns.core.StringValue ("5Mbps"))
- pointToPoint.SetChannelAttribute ("Delay", ns.core.StringValue ("2ms"))
- p2pDevices = pointToPoint.Install (p2pNodes)
- # 构建总线连接
- nCsma = 3
- csmaNodes = ns.network.NodeContainer()
- csmaNodes.Add (p2pNodes.Get (1))
- csmaNodes.Create (nCsma)
- csma = ns.csma.CsmaHelper()
- csma.SetChannelAttribute ("DataRate", ns.core.StringValue ("100Mbps"))
- csma.SetChannelAttribute ("Delay", ns.core.TimeValue (ns.core.NanoSeconds (6560)))
- csmaDevices = csma.Install (csmaNodes)
接着构建无线网络:
[python] view plain copy
- # 构建Wifi连接
- nWifi = 3
- wifiStaNodes = ns.network.NodeContainer()
- wifiStaNodes.Create (nWifi)
- wifiApNode = p2pNodes.Get (0)
- channel = ns.wifi.YansWifiChannelHelper.Default ()
- phy = ns.wifi.YansWifiPhyHelper.Default ()
- phy.SetChannel (channel.Create ())
接着配置AP:
[python] view plain copy
- # 配置AP
- wifi = ns.wifi.WifiHelper.Default ()
- wifi.SetRemoteStationManager ("ns3::AarfWifiManager")
- mac = ns.wifi.NqosWifiMacHelper.Default ()
- ssid = ns.wifi.Ssid ("ns-3-ssid")
- mac.SetType ("ns3::StaWifiMac",
- "Ssid", ns.wifi.SsidValue (ssid),
- "ActiveProbing", ns.core.BooleanValue (False))
- staDevices = wifi.Install (phy, mac, wifiStaNodes)
- mac.SetType ("ns3::ApWifiMac",
- "Ssid", ns.wifi.SsidValue (ssid))
- apDevices = wifi.Install (phy, mac, wifiApNode);
接着配置无线节点的位置参数:
[python] view plain copy
- # 配置无线节点的位置
- mobility = ns.mobility.MobilityHelper()
- mobility.SetPositionAllocator ("ns3::GridPositionAllocator",
- "MinX", ns.core.DoubleValue (0.0),
- "MinY", ns.core.DoubleValue (0.0),
- "DeltaX", ns.core.DoubleValue (5.0),
- "DeltaY", ns.core.DoubleValue (10.0),
- "GridWidth", ns.core.UintegerValue (3),
- "LayoutType", ns.core.StringValue ("RowFirst"))
- mobility.SetMobilityModel ("ns3::RandomWalk2dMobilityModel",
- "Bounds", ns.mobility.RectangleValue (ns.mobility.Rectangle (-50, 50, -50, 50)))
- mobility.Install (wifiStaNodes)
- mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel")
- mobility.Install (wifiApNode)
接着安装协议栈:
[python] view plain copy
- # 安装协议栈
- stack = ns.internet.InternetStackHelper()
- stack.Install (csmaNodes)
- stack.Install (wifiApNode)
- stack.Install (wifiStaNodes)
配置IP,这个和上一节一样,只是加上10.1.3.0网段而已:
[python] view plain copy
- # 配置IP
- address = ns.internet.Ipv4AddressHelper()
- address.SetBase (
- ns.network.Ipv4Address("10.1.1.0"),
- ns.network.Ipv4Mask("255.255.255.0"))
- p2pInterfaces = address.Assign (p2pDevices)
- address.SetBase (
- ns.network.Ipv4Address("10.1.2.0"),
- ns.network.Ipv4Mask("255.255.255.0"))
- csmaInterfaces = address.Assign (csmaDevices)
- address.SetBase (
- ns.network.Ipv4Address("10.1.3.0"),
- ns.network.Ipv4Mask("255.255.255.0"))
- address.Assign (staDevices)
- address.Assign (apDevices)
接下来模拟一个Echo服务,这个与上一节相同,只是Client安装在了Wifi节点上。
[python] view plain copy
- # 配置应用程序
- echoServer = ns.applications.UdpEchoServerHelper (9)
- serverApps = echoServer.Install (csmaNodes.Get (nCsma))
- serverApps.Start (ns.core.Seconds (1.0))
- serverApps.Stop (ns.core.Seconds (20.0))
- echoClient = ns.applications.UdpEchoClientHelper (csmaInterfaces.GetAddress (nCsma), 9)
- echoClient.SetAttribute ("MaxPackets", ns.core.UintegerValue (5))
- echoClient.SetAttribute ("Interval", ns.core.TimeValue (ns.core.Seconds (1.0)))
- echoClient.SetAttribute ("PacketSize", ns.core.UintegerValue (1024))
- clientApps = echoClient.Install (wifiStaNodes.Get (nWifi - 1))
- clientApps.Start (ns.core.Seconds (2.0))
- clientApps.Stop (ns.core.Seconds (20.0))
接下来的部分与上一节几乎完全相同,只是加上了Simulator.Stop,因为如果没有这个函数调用,那么将导致Simulator.Run永远不会停止:
[python] view plain copy
- # 全局路由管理器根据节点产生 的链路通告为每个节点建立路由表
- ns.internet.Ipv4GlobalRoutingHelper.PopulateRoutingTables()
- ns.core.Simulator.Stop (ns.core.Seconds (10.0));
- pointToPoint.EnablePcapAll ("third");
- csma.EnablePcap ("third", csmaDevices.Get (1), True)
- phy.EnablePcap ("third", apDevices.Get (0))
- anim = ns.netanim.AnimationInterface('third.xml')
- anim.SetConstantPosition(p2pNodes.Get(0), 10, 10)
- anim.SetConstantPosition(csmaNodes.Get(0), 30, 10)
- anim.SetConstantPosition(csmaNodes.Get(1), 40, 10)
- anim.SetConstantPosition(csmaNodes.Get(2), 50, 10)
- anim.SetConstantPosition(csmaNodes.Get(3), 60, 10)
- anim.EnablePacketMetadata(True)
- # 开始仿真
- ns.core.Simulator.Run()
- ns.core.Simulator.Destroy()
看看NetAnim显示的仿真结果:
再看看third-0-1.pcap的内容:
如我们所愿,802.11协议,呵呵~~~~~
0 0
- NS3网络仿真(7): Wifi节点
- NS3网络仿真(7): Wifi节点
- NS3仿真wifi网络环境
- NS3网络仿真(8): 实时仿真
- NS3网络仿真(2):first.py
- NS3网络仿真(3): NetAnim
- NS3网络仿真(4): DataRate属性
- NS3网络仿真(5): 数据包分析
- NS3网络仿真(11): ARP
- NS3网络仿真(12): ICMPv4协议
- NS3网络仿真
- NS3网络仿真(6): 总线型网络
- (一)Ns3网络仿真软件简单介绍
- NS3网络仿真(1):开发环境搭建
- NS3网络仿真(9): 构建以太网帧
- NS3网络仿真(10): 解析以太网帧
- NS3网络仿真(13): FdNetDevice的问题
- NS3网络仿真(14): TCP连接与端口扫描
- 自己实现spring
- Android数据库更新并保留原来数据的实现
- Android应用开发学习笔记03--处理设备显示和方向
- Hmac对摘要加密后,怎么把他解密回来?
- 集线器和交换机的区别
- NS3网络仿真(7): Wifi节点
- SpannableString和SpannableStringBuilder的使用
- Python3+Scrapy实现网页爬虫
- win7 错误事件WMI
- OpenCV 2.4.10 + VS2010 配置,imread读取不到图片
- 使用caffe训练时Loss变为nan的原因
- 【golang】Go 性能优化技巧
- AS填坑
- 04-广播、多播、组播、单播?