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网络仿真(简易脚本解析)相关推荐

  1. NS-3网络仿真平台搭建及可视化

    面向5G车联网仿真平台的搭建 本博客是基于SRTP(面向5G车联网仿真平台设计与开发)而搭建的"面向5G车联网的网络仿真平台",以供大家学习使用. 目录 前言概述 准备工作 下载n ...

  2. Windows平台下NS2网络仿真环境的搭建

    NS2(Network Simulator 2) 是一种针对网络技术的源代码公开的.免费的软件模拟平台,研究人员使用它可以很容易的进行网络技术的开发,而且发展到今天,它所包含的模块几乎涉及到了网络技术 ...

  3. 网络仿真软件性能比较

    [导读]网络仿真技术是一种通过建立网络设备和网络链路的统计模型, 并模拟网络流量的传输, 从而获取网络设计或优化所需要的网络性能数据的仿真技术.由于仿真不是基于数学计算, 而是基于统计模型,因此,统计 ...

  4. Ns2简单有限网络仿真实验

    Ns2简单有限网络仿真实验 1.编写Otcl脚本文件yy.tcl 2.终端:ns yy.tcl即可进行仿真 注意:在 建立一条UDP的联机时,不要忘记添加 $ns attach-agent $n3 $ ...

  5. 视频动作定位的分层自关注网络:ICCV2019论文解析

    视频动作定位的分层自关注网络:ICCV2019论文解析 Hierarchical Self-Attention Network for Action Localization in Videos 论文 ...

  6. NS2网络仿真的过程

    NS2网络仿真的过程可以总结为: 1.初始化     创建ns simulator     创建.tr文件(记录仿真结果)     创建.nam文件(记录仿真过程)     设置结束函数     设置 ...

  7. NS3网络仿真项目(二)——入门指南

    官网给出NS3的资料主要分为以下几种: 1. NS3入手指南(Tutorial) 主要介绍如何下载.安装.以及简单的功能.实例程序讲解 2. NS3使用手册(Manual) 主要介绍NS3仿真器的结构 ...

  8. Linux下VCS与Verdi联合仿真简易教程及例子示范

    VCS与Verdi联合仿真简易教程及例子示范 最近在公司实习,最近也恰好在学习Linux下的IC设计环境,涉及到了VCS与Verdi联合仿真等内容,也切身感觉到,和学校学习的内容是如此的不同,此篇便来 ...

  9. ns2安装详细过程与网络仿真

    ns2安装详细过程与网络仿真 博客分类: Networks TclLinuxUnixGCCVC++ 简单的说,NS-2是一个网络模拟器,所以经常被用到网络课的教学中. NS-2是OpenSource的 ...

最新文章

  1. 2022-2028年中国氟硅橡胶产业发展动态及投资前景分析报告
  2. python操作word填表_Python 自动化办公—Word 文本操作命令
  3. FPGA:下一代机器人感知处理器
  4. CE5.0 - romimage.exe如何填充eboot.bin中的pTOC特殊指针生成.nb0
  5. Java动态代理代码案例:使用cglib实现对无接口的类进行动态代理
  6. 四则运算栈c语言程序,四则运算   c语言编程
  7. 知识付费小程序源码支持流量主-瀑布流
  8. web测试与app测试异同
  9. 【转】状态压缩动态规划
  10. java8 lambda表达式Stream对List常用操作总结
  11. Tomcat下访问HTML页面乱码的解决方法
  12. 【软件资源】VS2013软件安装全教程!(附VS各版本下载地址)
  13. itsm安装部署(Vmware)
  14. 老徐自述:《软件自动化测试实战解析_基于Python3编程语言》
  15. 教程 |「川言川语」:用神经网络RNN模仿特朗普的语言风格
  16. e 服务器怎么注册不了怎么办,IMVU注册不了怎么办 服务器错误怎么办
  17. angular学习-数据绑定
  18. html 列表设置nth,html – 使用nth-child进行CSS编号
  19. docker虚拟化之订制python环境
  20. 广西大学oj1042(小西的数据结构作业)

热门文章

  1. DCDC电感下方铜箔如何处理
  2. Guice——轻量级注解Guice简单之美
  3. 从奥本海默的浮沉谈科学与政治的关系
  4. 《IT经理世界》:腾讯的瓶颈
  5. WMS系统后端开发-货位管理
  6. 测试自动化平台 | 测试开发工程师的进阶之路
  7. Entity Framework增删改查
  8. 【C++】两个队列实现一个栈
  9. windows一键启动多程序个程序
  10. 北斗中小渔船安全动态监控信息解决方案