快乐虾

http://blog.csdn.net/lights_joy/

欢迎转载,但请保留作者信息

在上一节中。我们仿真了一个总线型网络,这一节尝试将上一节中的n0变成一个无线的AP。再连上几个节点。这也是NS3中的演示样例third.cc干的事情。仅仅是我们用Python实现。

// 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网络。再构建总线型网线:

# 构建点对点连接
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)

接着构建无线网络:

# 构建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:

# 配置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);

接着配置无线节点的位置參数:

# 配置无线节点的位置
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)

接着安装协议栈:

# 安装协议栈
stack = ns.internet.InternetStackHelper()
stack.Install (csmaNodes)
stack.Install (wifiApNode)
stack.Install (wifiStaNodes)

配置IP,这个和上一节一样,仅仅是加上10.1.3.0网段而已:

# 配置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节点上。

# 配置应用程序
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永远不会停止:

# 全局路由管理器依据节点产生 的链路通告为每一个节点建立路由表
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协议。呵呵~~~~~



NS3网络仿真(7): Wifi节点的更多相关文章

  1. NS3网络仿真(6): 总线型网络

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 在NS3提供的第一个演示样例first.py中,模拟了一个点对点的网络,接下来的一个演示样例代码模 ...

  2. NS3网络仿真(2):first.py

    1    安装基本模块 11  安装Python 12  安装PTVS 13  加入对python-279的支持 2    在vs2013下编译NS3 3    编译NetAnim 4    在vs2 ...

  3. NS3网络仿真(3): NetAnim

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3提供的演示样例first.py中,并没有生成NetAnim所须要的xml文件,本节我们尝试 ...

  4. NS3网络仿真(12): ICMPv4协议

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ICMP的全称是 Internet ControlMessage Protocol . 其目的就是 ...

  5. NS3网络仿真(9): 构建以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在NS3使用了一个叫Packet的类来表示一个数据帧,本节尝试用它构造一个以太网帧. 以下是一个典 ...

  6. NS3网络仿真(11): ARP

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 ARP(Address ResolutionProtocol,地址解析协议)协议的基本功能就是通过 ...

  7. NS3网络仿真(4): DataRate属性

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在first.py中创建了一个点到点的信道,且配置了两个属性: pointToPoint = ns ...

  8. NS3网络仿真(10): 解析以太网帧

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载.但请保留作者信息 解析以太网帧的过程是构建以太网帧的逆过程,当我们接收到一个以太网帧时,仍然以上一节中的ARP帧为例 ...

  9. NS3网络仿真(5): 数据包分析

    快乐虾 http://blog.csdn.net/lights_joy/ 欢迎转载,但请保留作者信息 在我们生成的xml文件里.是不包括生成的数据包的数据的,在我们的脚本中加入以下的语句: point ...

随机推荐

  1. Beyond Compare 30天评估期结束解决办法

    打开Beyond Compare 4,提示已经超出30天试用期限制 解决方法: 1.修改文件 修改C:\Program Files\Beyond Compare 4\BCUnrar.dll ,这个文件 ...

  2. Memcached特性及优缺点

    为了加快文件访问速度且提供多个使用者.需要在内存中建立内存缓存数据的管理减小读写磁盘的次数及保证数据的更新.因为需要使用cache缓存.   1.Memcached 主要特性 a.数据仅存在于内存中, ...

  3. centos 7 smplayer vlc播放器

    centos7安装多媒体播放器SMPlayer 2017-03-13 21:37:14 分类: LINUX 转自:https://wiki.centos.org/TipsAndTricks/Multi ...

  4. iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)

    参考链接:http://www.cocoachina.com/industry/20140321/8024.html NSPredicate Cocoa提供了一个NSPredicate类,它用来指定过 ...

  5. 【Luogu】P2422良好的感觉(单调栈)

    题目链接 写代码能力需要极大提升.我在五分钟之内想到了单调栈,然后花了一个小时的时间去看我单调队列为啥写错了…… 首先这题需要转换自己的思维.枚举所有“最小点”,然后看它往左往右最大能扩展多少. 维护 ...

  6. [BZOJ1419] Red is good(期望DP)

    传送门 逆推 只不过顺序还是顺着的,思想是逆着的 f[i][j]表示还剩下i张红牌,j张黑牌的期望值 那么边界是 f[i][0]=i,因为只剩i张红牌 f[0][j]=0,只剩黑牌,显然直接停止最优 ...

  7. POJ 1067: Wythoff Game【博弈】

    经典的威佐夫博奕把黄金分割常数乘以k(k=m-n)即为奇异点,此时奇异点是用小数据观察出来的,具体的数学证明,观察到黄金分割常数是无理数,再加上高斯函数[kφ]的形势将自然数分割成两个等价类很容易想到 ...

  8. HashTable的构造函数有哪些

    HashTable:在并发的环境下,使用synchronized将整张表锁住: HashTable构造函数有: public Hashtable(int initialCapacity, float ...

  9. jvm gc回收机制

    jdk8取消永久代,增加metaspace元空间.使用本地内存,不使用堆内存. jstat -gcutil jstat -gccause pid 1 每格1毫秒输出结果jstat -gccause p ...

  10. 【HDOJ5980】Find Small A(签到)

    题意:不知道 思路:队友写的 #include <stdio.h> #include <vector> #include <algorithm> #include ...