ns-3网络仿真(简易脚本解析)
ns-3简易脚本解析
- 点对点有线网络(first.cc)
- 头文件
- 命名空间
- NS_LOG_COMPONENT_DEFINE
- main()函数中的准备工作
- 创建网络拓扑
点对点有线网络(first.cc)
目录 examples/tutorial/first.cc
这个脚本创建了一个包含了两个节点的有线网络
其链路层使用了点对点协议(Point-To-Point,PPP),传输分组
一个完整的ns-3脚本按照编写顺序可以分成以下几部分
头文件
ns-3是一个由不同模块组成的程序库,模拟脚本通过调用各个模块提供的API进行网络模拟,而每个模块的API都被统一存放在“<模块名>module.h”中。这样在添加头文件时,只需要知道所需模块名就可以调用相关内容,在编译后的build/ns3目录下找到这些头文件。
Core模块和network模块头文件是所有脚本必须包括的,他们分别定义了ns-3的核心功能(如模拟事件和事件调度)和基本的网络组件(如网络节点,分组和地址等)。
Internet和application模块尽管不是必须的,但也是大部分脚本经常会调用的模块,其中Internet模块定义了TCP/IP协议栈,application模块定义了应用层的分组收发模型(如贪婪模型,ON/OFF模型)
#include"ns3/core-module.h" //core模块
#include"ns3/network-module.h" //network模块
#include"ns3/internet-module.h" //internet模块
#include"ns3/point-to-point-module.h" //point to point 模块
#include"ns3/application-dodule.h" //application模块
命名空间
整个ns-3源代码都受到”ns-3“命名空间保护,这样可以将ns3项目和非ns3项目隔离,起到很好的保护作用,也便于和其他项目整合。因此每一个脚本开始都需要声明命名空间,在ns3中使用标准库函数需要添加std命名空间,如std::cout std::min;
using namespace ns3;
NS_LOG_COMPONENT_DEFINE
允许在该脚本中使用Log系统中的宏定义打印辅助信息,如打印调试信息的NS_LOG_DEBUG宏和打印错误信息的NS_LOG_ERROR宏等等。
NS_LOG_COMPONENT_DEFINE
尽管这是一个可选步骤,建议添加,辅助信息对代码调试和模拟流程都十分有用。
main()函数中的准备工作
后续操作都需要在main中完成,在正式开始之前,我们还需要一些预备工作。
CommandLine cmd;
cmd.Parse(argc,argv); //读取命令行参数Time::SetResolution(Time::Ns); //最小时间单元:ns//打印指定LOG组件信息
LogComponentEnable("UdpEchoClientApplication",LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication",LOG_LEVEL_INFO);
创建网络拓扑
搭建网络拓扑,在物理网络中,一个网络拓扑由若干结点和链接结点的信道组成。在ns3中,结点和信道分别被抽象为Node和Channel以及结点中连接信道的网络设备NetDevice类三个C++类。不同类型的信道对应不同类型NetDevice和Channel子类。例如,对First脚本中的点对点(PPP)信道来说,其对应的网络设备类是PointToPointNetDevice,信道类是PonitToPointChannel。一般来说,NetDevice主要负责实现链路层协议,Channel主要实现物理层协议
First脚本中Node,Channel和NetDevice类的对象关系如下,其中箭头代表传输方向。
Node(NetDevice) <-->Channel<-->Node(NetDevice)结点0 结点1
下面在脚本中构建上述节点结构和网络拓扑
NodeContainer nodes;
nodes.Creat(2); //创建网络结点PointToPointHelper pointToPoint //PPP信道助手类
//配置PPP信道属性
pointToPoint.SetDeviceAttribute("DataRate",StringValue("5Mbps")); //传输速率属性
pointToPoint.SetDeviceAttribute("Delay",StringValue("2ms")); //传输延迟属性NetDeviceContainer devices; //创建网络设备
devices = pointToPoint.Install(nodes); //链接结点与信道InternetStackHelper stack; //为节点安装TCP/IP协议栈的助手是InternetStackHelper
stack.Install(nodes); //为node容器中的结点安装TCP/IP协议Ipv4AddressHelper address; //为网络设备分配ip地址
address.SetBase("10.1.1.0","255.255.255.0");Ipv4InterfaceContainer interfaces=address.Assign(devices);
//建立一个两个结点的有线网络,从物理层到传输层分别安装了PPP和TCP/IP协议族,可以运行基于TCP/IP应用进行通信UdpEchoServerHelper echoServer (9); //监听9号端口//在结点一种安装应用程序
ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));
serverApps.Start (Seconds (1.0));
serverApps.Stop (Seconds (10.0));//配置客服端程序属性
UdpEchoClientHelper echoClient (interfaces.GetAddress (1), 9);
echoClient.SetAttribute ("MaxPackets", UintegerValue (1));
echoClient.SetAttribute ("Interval", TimeValue (Seconds (1.0)));
echoClient.SetAttribute ("PacketSize", UintegerValue (1024));ApplicationContainer clientApps = echoClient.Install (nodes.Get (0));
clientApps.Start (Seconds (2.0));
。。。。。。。。。。。。。。。。。clientApps.Stop (Seconds (10.0));
ns-3网络仿真(简易脚本解析)相关推荐
- NS-3网络仿真平台搭建及可视化
面向5G车联网仿真平台的搭建 本博客是基于SRTP(面向5G车联网仿真平台设计与开发)而搭建的"面向5G车联网的网络仿真平台",以供大家学习使用. 目录 前言概述 准备工作 下载n ...
- Windows平台下NS2网络仿真环境的搭建
NS2(Network Simulator 2) 是一种针对网络技术的源代码公开的.免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术 ...
- 网络仿真软件性能比较
[导读]网络仿真技术是一种通过建立网络设备和网络链路的统计模型, 并模拟网络流量的传输, 从而获取网络设计或优化所需要的网络性能数据的仿真技术.由于仿真不是基于数学计算, 而是基于统计模型,因此,统计 ...
- Ns2简单有限网络仿真实验
Ns2简单有限网络仿真实验 1.编写Otcl脚本文件yy.tcl 2.终端:ns yy.tcl即可进行仿真 注意:在 建立一条UDP的联机时,不要忘记添加 $ns attach-agent $n3 $ ...
- 视频动作定位的分层自关注网络:ICCV2019论文解析
视频动作定位的分层自关注网络:ICCV2019论文解析 Hierarchical Self-Attention Network for Action Localization in Videos 论文 ...
- NS2网络仿真的过程
NS2网络仿真的过程可以总结为: 1.初始化 创建ns simulator 创建.tr文件(记录仿真结果) 创建.nam文件(记录仿真过程) 设置结束函数 设置 ...
- NS3网络仿真项目(二)——入门指南
官网给出NS3的资料主要分为以下几种: 1. NS3入手指南(Tutorial) 主要介绍如何下载.安装.以及简单的功能.实例程序讲解 2. NS3使用手册(Manual) 主要介绍NS3仿真器的结构 ...
- Linux下VCS与Verdi联合仿真简易教程及例子示范
VCS与Verdi联合仿真简易教程及例子示范 最近在公司实习,最近也恰好在学习Linux下的IC设计环境,涉及到了VCS与Verdi联合仿真等内容,也切身感觉到,和学校学习的内容是如此的不同,此篇便来 ...
- ns2安装详细过程与网络仿真
ns2安装详细过程与网络仿真 博客分类: Networks TclLinuxUnixGCCVC++ 简单的说,NS-2是一个网络模拟器,所以经常被用到网络课的教学中. NS-2是OpenSource的 ...
最新文章
- 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
- python操作word填表_Python 自动化办公—Word 文本操作命令
- FPGA:下一代机器人感知处理器
- CE5.0 - romimage.exe如何填充eboot.bin中的pTOC特殊指针生成.nb0
- Java动态代理代码案例:使用cglib实现对无接口的类进行动态代理
- 四则运算栈c语言程序,四则运算 
c语言编程
- 知识付费小程序源码支持流量主-瀑布流
- web测试与app测试异同
- 【转】状态压缩动态规划
- java8 lambda表达式Stream对List常用操作总结
- Tomcat下访问HTML页面乱码的解决方法
- 【软件资源】VS2013软件安装全教程!(附VS各版本下载地址)
- itsm安装部署(Vmware)
- 老徐自述:《软件自动化测试实战解析_基于Python3编程语言》
- 教程 |「川言川语」:用神经网络RNN模仿特朗普的语言风格
- e 服务器怎么注册不了怎么办,IMVU注册不了怎么办 服务器错误怎么办
- angular学习-数据绑定
- html 列表设置nth,html – 使用nth-child进行CSS编号
- docker虚拟化之订制python环境
- 广西大学oj1042(小西的数据结构作业)