NS3学习1

本文介绍了ns-3中的模块结构,包括model、example、helper和test文件夹的用途。通过创建网络拓扑、安装协议、配置IP地址和路由,以及设置网络应用程序来演示如何构建和运行一个网络模拟。重点讨论了使用UDPecho客户端和服务器进行流量分析,以及利用FlowMonitor收集性能统计数据的过程。
摘要由CSDN通过智能技术生成

1. ns-3 modules

在ns-3中,模块的实现都遵循一个层次结构。
在这里插入图片描述

model文件夹包含所有LTE协议、体系结构、接口和算法的源代码。开发人员可探索模型文件夹及其源文件,以更改LTE核心级源代码。例如,开发人员使用lte-enb-mac.cc来更改任何LTE基站(BS)的介质访问控制(MAC)协议的更改。

example文件夹包含LTE模拟程序,最终用户可以用来了解如何编写LTE模拟。例如,用户可以探索lena-x2-handover.cc来了解如何在LTE网络中编写移动场景。

helper文件夹包含可用于设置模拟程序的源代码。为了建立LTE网络模拟,最终用户使用lte-helper.cc和epc-helper.cc.通常,助手文件夹包含用于设置网络架构、接口和协议的所有助手类

test文件夹中包含了该模块的各种单元测试用例的源代码。例如,lte测试文件夹包含了所有用于检查lte节点的行为、协议、接口和算法的各种测试程序。

理解一个ns-3程序的结构

1.导入所有必要的ns-3头文件。
2.为程序定义日志记录组件。模拟程序允许包含必要的日志语句,如信息、警告、错误、异常、断言和调试详细信息。在运行模拟时,可以启用或禁用任何日志语句
3.设置一个模拟拓扑结构并配置它。在编写模拟程序之前,建议先绘制模拟网络拓扑结构:

   3.1.使用ns-3节点容器类创建节点。在ns-3中,主机和其他网络设备被称为节点,用户可以安装必要的协议,将其配置为一个特定的网络设备。识别拓扑结构中涉及的节点类型,如主机、路由器、交换机、接入点(APs)和BSs,并使用ns-3 NodeContainer类为每种类型创建所需的节点数量。
   
   3.2 使用合适的通信信道连接节点,并安装必要的通信协议,以获得与这些节点关联的NetDevices(网络接口卡(NIC))。例如,需要使用ns-3网络NetDeviceContainer类来收集必要的有线或无线/移动网络设备
   
   3.3  使用ns-3 InternetStackHelper类在节点上安装传输控制协议(TCP)/互联网协议(IP)。因此,我们可以分配IP地址并安装路由协议。
   
   3.4 配置IP地址。我们需要通过设置合适的网络id和子网掩码来识别和创建网络地址的类型。然后,我们可以使用ns-3 NetDeviceContainer类将IP地址配置给各自的NetDevice。
   
   3.5 配置路由协议以互连拓扑结构中涉及的不同网络

4.接下来,确定在各种节点上安装和运行所需的网络应用程序:

   4.1 确定需要在哪些节点上安装客户端或服务器应用程序,然后为这些客户端和服务器应用程序配置合适的IP地址和端口号。
   4.2 配置客户端和服务器应用程序流量流特征,如数据包大小、数据包间隔和数据包数量。
   4.3 在所选的节点上安装网络应用程序。
   4.4 配置应用程序的启动和停止时间

5 在所有节点上安装FlowMonitor(ns-3类)以收集所有流量统计信息。虽然不是必需在节点上安装FlowMonitor应用程序,但从吞吐量、延迟、数据包丢失和抖动度量等方面来分析网络应用程序在模拟拓扑上的性能是很重要的。

6.在节点上配置数据包捕获和跟踪(这是可选的)。这可以帮助您收集在模拟拓扑中交换的各种数据包,并可能使用wireshark或tcpdump数据包分析工具来检查数据包的细节
7.配置动画界面(这是可选的)。它可以帮助您使用NetAnim可视化工具查看以下模拟执行和结果:

7.1 启用节点间的各种数据包交换跟踪功能。
7.2 启用路由表跟踪功能。
7.3 启用计数器表跟踪功能。
7.4 启用流监控器的统计信息捕获。
  1. 使用 Simulator::Stop()配置模拟的停止时间。在使用流监视器时,必须停止模拟;否则,模拟永远不会结束。
  2. 开始使用Simulator::run()运行模拟。此语句将启动模拟执行

10.将流监视器的结果转换为一个XML文件,以使用NetAnim进行可视化
11 使用 Simulator::Destroy()来清理模拟资源。清理内存、设备和文件等模拟资源一点很重要。

第一次网络模拟

通常,ns-3模拟程序是用C++编写的,.cc文件一般保存在ns-allinone-3.36/ ns-3.36/scratch/文件夹下

在这里插入图片描述

1.分别在节点0和节点1上安装UDP echo客户端和服务器应用程序,并配置以下UDP echo客户端应用程序流量特征:
最大数据包:要发送的最大数据包(例如,10个)
时间间隔:echo客户端应用程序应该以什么速度发送一个数据包。例如,将间隔设置为0.1意味着每秒发送10个数据包。
数据包大小:按字节数配置每个数据包大小(例如,1,024)

2.监视UDP回显客户端和服务器如何在网络中交换数据包。

3.查看在节点0和节点1处处理的实际数据包

4.生成一个可以与NetAnim一起使用的动画XML文件。

5.从吞吐量、延迟、抖动和数据包丢失等方面分析UDP流的性能。

程序的逐步实现

1.首先,导入所有必要的ns-3头文件:

   1.1 core-module用于访问ns-3的所有核心特性,例如在处理事件、启动和停止模拟执行、日志记录、跟踪和属性方面的模拟器活动。

   1.2 network-module用于访问网络套接字特性、数据包表示等。
   
   1.3 internet-module用于访问和安装TCP/IP协议和应用程序模块,用于在节点上安装各种TCP/UDP应用程序。

  1.4 接下来,特定于模拟,使用point-to-point-module来访问和使用P2P通道。

  1.5 最后,我们使用netanim-module来支持动画,并使用 flow-monitor-module来收集流级统计数据,如吞吐量、延迟、抖动和数据包丢失:
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/netanim-module.h"
#include "ns3/flow-monitor-module.h"
using namespace ns-3

2.在ns-3中,实际的模拟执行从main()函数开始。因此,我们需要在main()函数中编写实际的代码。在main()中编写了以下相关代码:
2.1 根据我们在模拟活动中给出的拓扑图,我们首先使用 NodeContainer.将两个主机创建为两个节点。
2.2 然后,我们根据我们的要求(1 Gbps速度,1 ms延迟)创建和配置 PointToPointHelper::

 NodeContainer nodes;
 nodes.Create (2);
 PointToPointHelper pointToPoint;
 pointToPoint.SetDeviceAttribute ("DataRate", 
StringValue ("1Gbps"));
 pointToPoint.SetChannelAttribute ("Delay", StringValue 
("1ms"));

2.3.接下来,在这些节点上安装P2P协议,该节点使用P2P通道连接它们。因此,它将两个设备返回到NetDeviceContainer设备:第一个设备是节点0网卡,第二个设备是节点1网卡:

NetDeviceContainer devices;
devices=pointToPoint.Install(nodes);

2.4.现在,在节点上安装TCP/IP协议。然后,在网络ID 192.168.1.0下配置网络设备容器设备的IP地址。节点0得到192.168.1.1,节点1得到192.168.1.2:

InternetStackHelper stack;
stack.Install(nodes);
Ipv4AddressHelper address;
address.SetBase("192.168.1.0","255.255.255.0");
Ipv4InterfaceContainer interfaces=address.Assign(devices);

3.创建流量应用程序,并将其安装在特定的ns-3节点上:
3.1首先,创建一个UDP echo 服务器应用程序,并将其安装到节点1上。配置其开始和停止时间:

uint64_t port=9;
UdpEchoServerHelper echoServer(port);
ApplicationContainer serverApps=echoServer.Install(nodes.Get(1));
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));

3.2 接下来,创建一个UDP echo 客户端应用程序,并将其安装在节点0上。配置其流量特征,如要发送的最大包数、包发送间隔和包大小。然后,根据要发送的数据包数,配置UDP echo客户端启动和停止时间:

UdpEchoClientHelper echoClient(interfaces.GetAddress(1),port);
echoClient.SetAttribute("MaxPackets",UintegerValue(10000000));
echoClient.SetAttribute("Interval",TimeValue(Seconds(0.001));
echoClient.SetAttribute("PacketSize",UintegerValue(1024));
ApplicationContainer clientApps = echoClient.Install 
(nodes.Get (0));
clientApps.Start (Seconds (2.0));
clientApps.Stop (Seconds (10.0));

4.在所有节点上安装FlowMonitor,以收集流级统计信息。通过这样做,在模拟结束时,我们可以查看和分析每个流量流的吞吐量、延迟、抖动和数据包丢失:

Ptr<FlowMonitor> flowmon;
FlowMonitorHelper flowmonHelper;
flowmon=flowmonHelper.InstallAll();

5.在所有节点上启用数据包捕获。通过这样做,在模拟结束时,可以使用wireshark或tcpdump工具查看生成的pcap文件

pointToPoint.EnablePcapAll ("first");

6.配置动画界面。通过这样做,在完成模拟执行后,将生成一个动画XML文件。可以使用NetAnim查看XML文件,并可视化模拟执行:

 AnimationInterface anim ("first_animation.xml");
 anim.EnablePacketMetadata (); 

7.使用Simulator::Stop()配置模拟的停止时间,并将其停止时间值设置为大于客户端和服务器应用程序的停止计时器值:

 Simulator::Stop (Seconds(11.0));

8.开始使用模拟器运行Simulator::run():

Simulator::Run ();

9.将流监视器的结果转换为一个XML文件,以便在模拟结束时进行解析和查看它:

flowmon->SerializeToXmlFile ("first_flowmetrics.xml", true, true);

10.清理模拟资源

Simulator::Destroy ();
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值