实验设计:
- 九个节点的ad-hoc网络,路由协议采用最短路由选择算法
实验目的:
- 采用Floyd-Warshall算法实现ad-hoc网最短路由选择
- 学习NS3仿真模拟器
实验设置:
- 开发环境:Windows 10 Pro + VS2012 Express
- 开发工具:NS3+ Mercurial
- 开发语言:C++
实验心得:
Mercurial:
-
基于pyhton的轻量级分布式版本控制
-
基于 GNU General Public License (GPL) 授权的开源项目
-
分布式:更轻松的管理。更健壮的系统。对网络的依赖性更低。
NS3:
-
06年开源项目
扫描二维码关注公众号,回复: 4707172 查看本文章 -
离散事件模拟器,C++语言编写。
-
仿真脚本语言:Python与C++。
-
可视化工具NetAnim
-
可生成PCAP包trace文件供仿真分析
最短路由选择算法:
-
静态路由算法
-
目的:在一个由router构成的子网内,算法根据信道带宽,通信延时,队列长度,平均通信量,通信距离等指标,计算各router间通信最短路由表
-
常见:Dijsktra,Floyd
Floyd-Warshall算法:
-
是解决任意两点间的最短路径
-
通常可以在任何图中使用,包括有向图]、带负权边的图
-
O(n^3)的算法复杂度
-
UDPServer用来收发包
-
UDP client则发包和接受来自Server的回应
-
UDP client 可有带CONNECT和不带CONNECT,和TCP通信的区别在于建立连接无需三次握手
Ad hoc 网络:
-
前身是分组无线网(Packet Radio Network)。研究源于军事通信的需要,并已经持续了近20年。
-
Ad Hoc源自于拉丁语,意思是“for this”引申为“for this purpose only”,即Ad hoc网络是一种有特殊用途的网络。
-
IEEE802.11标准委员会采用了“Ad hoc网络”一词来描述这种特殊的自组织对等式多跳移动通信网络,Ad hoc网络就此诞生。
-
Ad Hoc结构是一种省去了无线中介设备AP而搭建起来的对等网络结构,只要安装了无线网卡,计算机彼此之间即可实现无线互联。
-
原理是网络中的一台计算机主机建立点到点连接,相当于虚拟AP,而其他计算机就可以直接通过这个点对点连接进行网络互联与共享。
IPv4:
-
IPv4,是互联网协议(Internet Protocol,IP)的第四版,也是第一个被广泛使用,构成现今互联网技术的基础的协议。
-
Ipv4可以运行在各种各样的底层网络上,比如端对端的串行数据链路(PPP协议和SLIP协议) ,卫星链路等等。局域网中最常用的是以太网。
-
基于IPv4的网络难以实现网络实名制,一个重要原因就是因为IP资源的共用,因为IP资源不够,所以不同的人在不同的时间段共用一个IP,IP和上网用户无法实现一一对应。而IPv6的普及将改变现状,因为IPv6一个重要的应用将是实现网络实名制下的互联网身份证/VIeID,
NS3编程:
-
wifiHelper类,指定无线链路标准,涉及传输速率等网络参数
-
第一代wifi标准 80211(80211b)
1997年完成,传输速率支持1Mbps 和 2Mbps。支持采用FHSS(跳频)和DSSS(直接序列扩频),采用不同技术的设备是无法兼容的。
WifiHelper wifi; wifi.SetStandard (WIFI_PHY_STANDARD_80211b);
-
-
YansWifiPhyHelper:描述天线相关参数,依赖于YansWifiChannelHelper 指定无线电传播模型:包括传播延时和衰减模型
YansWifiPhyHelper wifiPhy = YansWifiPhyHelper::Default (); YansWifiChannelHelper wifiChannel; wifiChannel.SetPropagationDelay ("ns3::ConstantSpeedPropagationDelayModel"); wifiChannel.AddPropagationLoss ("ns3::LogDistancePropagationLossModel"); wifiPhy.SetChannel (wifiChannel.Create ());
-
Mac层设备根据802.11b标准,设置传输速率1Mbps,采用DSSS拓频技术,DSSS技术将2.4G频段划分为14个信道,以chipping sequence 处理数据串,如待传送的数据为1, 则用 展频码“01001000111”代替1,展频码自身都够冗余校验,提升抗干扰能力。
wifi.SetRemoteStationManager ("ns3::ConstantRateWifiManager", "DataMode",StringValue ("DsssRate1Mbps"), "ControlMode",StringValue ("DsssRate1Mbps"));
-
InternetStackHelper 类为节点聚合TCP/UDP/IP等功能所需协议,这里使用继承了ns3中IPv4路由协议实现ns3::IPv4RoutingHelper增加了最短路由算法的ShortestPathRouterHelper
ShortestPathRoutingHelper sr; Ptr<ShortestPathRoutingTable> srt = CreateObject<ShortestPathRoutingTable> (); sr.Set ("RoutingTable", PointerValue (srt)); //对现有节点nodes聚合IP/TCP/UDP功能。 InternetStackHelper internet; internet.SetRoutingHelper (sr); internet.Install (nodes);
-
Ipv4AddressHelper 类为网络设备分配IPv4地址
Ipv4AddressHelper ipv4; ipv4.SetBase ("10.1.1.0", "255.255.255.0"); Ipv4InterfaceContainer iface = ipv4.Assign (devices);
-
取代third.cc里的路由信息语句,此处ShortestPathRoutingTable类获悉各路由节点IP信息,并更新静态最短路径路由表
for (uint16_t i = 0; i < numNodes; i++) { srt->AddNode (nodes.Get (i), iface.GetAddress (i)); } srt->UpdateRoute (60);
-
任取通信距离大于可大范围的网络设备分别安装UDP服务端应用和UDP客户端应用,进行测试
-
当 Simulator::Run 被调用时,系统会开始遍历预设事件的列表并执行。首先它会在1.0 s时运行事件,这个事件会使echo服务端应用生效。接下来仿真器会运行在t=2.0 s时的事件,即让echo客户端应用开始。
UdpServerHelper echoServer (9); ApplicationContainer serverApps = echoServer.Install (nodes.Get (8)); serverApps.Start (Seconds (1.0)); serverApps.Stop (Seconds (20.0)); UdpClientHelper client (iface.GetAddress (8), 9); client.SetAttribute ("MaxPackets", UintegerValue (2)); client.SetAttribute ("Interval", TimeValue (Seconds (1))); client.SetAttribute ("PacketSize", UintegerValue (1000)); ApplicationContainer clientApps; clientApps = client.Install (nodes.Get (1)); clientApps.Start (Seconds (2.0)); clientApps.Stop (Seconds (20.0)); Simulator::Run (); Simulator::Destroy ();