ns3入门案例1 first.cc
1、目录结构
example:1、根文件下自带示例结构,作为良好的参考资源
2、src环境下中各模块中example作为资源
build: 编译后文件以及可执行文件
src:各模块源代码
2、新代码运行
将新脚本放在scratch文件夹中,该目录默认在waf编译环境内。可以通过直接编译./waf运行
first代码解析
拓扑:点对点网络---最简单
1 头文件
脚本通过各个模块提供的API进行网络模拟,每个模块的API放在“模块名-module.h”下。其中core与network为必须模块。另外,脚本中使用非ns3库中函数,也需要在这一步添加
#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/internet-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/applications-module.h"
2 名字空间
将ns3项目与非ns3项目分离。使用标准库函数需要添加std名字空间,如
using namespace ns3;
3 NS_LOG_COMPONENT_DEFINE
脚本使用宏定义打印辅助信息
NS_LOG_COMPONENT_DEFINE ("FirstScriptExample");
4 int main()函数
读取命令行参数、设置模拟单元、开启log组件
Time::SetResolution (Time::NS);LogComponentEnable ("UdpEchoClientApplication", LOG_LEVEL_INFO);LogComponentEnable ("UdpEchoServerApplication", LOG_LEVEL_INFO);
5、网络拓扑创建
基本设置节点:Node
ns3中节点、信道、与节点中连接信道的网络设备分别对应于Node、Channel、NetDevice三个类(英文名字可以看出)。其中,信道与网络设备有着与之对应的多个子类。该网络中使用助手类构建网络(--Helper)。代码设置节点。设置PPP【点对点】的属性,并通过Install()在节点中安装设备。Install()返回NetDevice对象。
NodeContainer nodes;nodes.Create (2);PointToPointHelper pointToPoint;pointToPoint.SetDeviceAttribute ("DataRate", StringValue ("5Mbps"));pointToPoint.SetChannelAttribute ("Delay", StringValue ("2ms"));NetDeviceContainer devices;devices = pointToPoint.Install (nodes);
6、安装TCP/IP协议族
安装协议,其中包括:TCP和UDP。网络层的IP与路由协议
InternetStackHelper stack;stack.Install (nodes);Ipv4AddressHelper address;address.SetBase ("10.1.1.0", "255.255.255.0");Ipv4InterfaceContainer interfaces = address.Assign (devices);
通过InternetStackHelper助手安装协议栈stack,并通过Intall(nodes)安装在节点中
IP地址通过AddressHelper设置并通过Assign()函数安装在节点中设备中。
7 安装应用程序
可以有不同的应用程序协议分发模块,first采用UdpEcho应用程序。
利用服务器助手,初始化监听9号端口。利用服务器助手将其安装在其中的一个节点中,编号为1,同样使用Install()函数,并设置在1s后启动,10s后结束。
UdpEchoServerHelper echoServer (9); ApplicationContainer serverApps = echoServer.Install (nodes.Get (1));serverApps.Start (Seconds (1.0));serverApps.Stop (Seconds (10.0));
客户端助手接收来自1编号的IP地址,并从9号端口接收。MaxPackets、Interval、PacketSize分别对应echoClient的三个属性。为最大发送分组数、发送间隔与发送包裹大小(负载)。客户端安装在结点0中,在2s时开始,10s时结束。
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));
8、数据生成
first未涉及
9、启动与结束
Simulator::Run ();Simulator::Destroy ();return 0;
执行之前定义的操作。Run()按顺序执行;Destroy()执行清除操作。
以上为first中所有操作,对于整体ns3把握还不完善。需要理解过程后进一步通过案例分析。
ns3入门案例1 first.cc相关推荐
- ns3 入门案例2:third.cc
代码分析 1 头文件 #include "ns3/core-module.h" #include "ns3/point-to-point-module.h" # ...
- ns3入门(1)——第一个案例first.cc
ns3入门(1)--第一个案例first.cc 一.安装ns3 安装没啥可说的,参考一下别人的网站吧. 说下我的环境吧,ubuntu16.04,仅此. 1.安装eclipse https://blog ...
- 语音分类入门案例: 英文数字音频分类
语音分类入门案例: 英文数字音频分类 本项目是一个全流程的语音分类项目,内容简单,适合想要涉猎音频分类的小白学习. 推荐将本项目Fork成为自己的项目并运行,以获得更好的学习体验!! 项目地址:语音分 ...
- 2021年大数据Flink(八):Flink入门案例
目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...
- Python:Scrapy的安装和入门案例
Scrapy的安装介绍 Scrapy框架官方网址:http://doc.scrapy.org/en/latest Scrapy中文维护站点:http://scrapy-chs.readthedocs. ...
- Vue安装配置以及入门案例
Vue Vue简介 Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架.与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用.Vue 的核心库只关注视图层,不 ...
- AOP配置开发入门案例
该AOP开发入门案例采用XML文件方式配置开发(非注解方式)共包含一个xml文件和4个Java类,创建好web工程后引入相应jar包(文末会给出),建好包(若自定义包名注意更改类中的包名),将xml文 ...
- python与人工智能编程-总算明白python人工智能编程入门案例
Python是非常简洁的一种脚本语言,写同样的程序,代码量仅为java的三分一,除了性能没有Java强之外,它的优点还是相当多的.以下是小编为你整理的python人工智能编程入门案例 下载Active ...
- mybatis基于注解的入门案例
mybatis基于注解的入门案例: 把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句 同时需要在SqlMa ...
最新文章
- PostgreSQL参数优化对比性能测试
- 成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘
- Oracle PL/SQL之LOOP循环控制语句
- C开源hash代码uthash的用法总结(1)
- Postman下载与安装
- htmlentities和htmlspecialchars 的区别
- 两种“新型”的javaweb后门(jspx和Java Logger)
- vue实例的参数说明
- JAVA项目面试总结 电商系统 OA办公系统 P2P网贷
- C语言课设-单位车辆调度管理
- 小米ui开发 android9,基于安卓10,小米9推送MIUI 10 9.8.22开发版
- During sturtup program exited with code 0xc0000139的解决办法!
- java饼图_java 百分比饼图的实现代码
- TCP拥塞控制和宽容
- 更改iTunes(macOS下)备份路径至移动硬盘
- Maven - 5、私服详解
- 基于3D视觉的三维人体重建方法漫谈
- 支持幻灯片演示的思维导图软件NovaMind_我是亲民_新浪博客
- 回溯法求解装载问题(DFS + 剪枝策略)
- 有哪些常见的游戏建模软件?游戏建模师的工作日常