ns3学习总结
ns3简介
ns3关键概念
节点
ns3是一个网络simulator,为了防止混淆,使用节点来代替主机,用来表示基本设备的抽象;
使用Node类来进行描述,具体调用科研使用NodeContainer 类,比如:
1 | NodeContainer nodes; |
应用
需要被仿真的用户程序被抽象成为应用,在Application类中进行了描述;它的实例还有UdpEchoClientApplication以及UdpEchoServerApplication等等,前者用来回显服务端所回复的分组;
信道
网络中数据里流过的媒介成为信道,在channel类中进行了描述,它提供了管理通信子网对象和把节点连接到它们的各种方法,几个信道模型的实例包括:CsmaChannel,PointToPointChannel 以及WifiChannel;
网络设备
这个概念相当于硬件设备以及软件驱动的总和,网络设备在ns3中安装在节点上面,使得节点通过信道和其他节点通信,一个节点可以通过多个网络设备同时连接到多条信道上面。主要在NetDevice类中进行了描述,这部分也允许开发者自定义。几个网络设备的实例包括:CsmaNetDevice,PointToPointNetDevice以及Wi-FiNetDevice。
拓扑帮助
可以使用拓扑生成器来让配置IP等等任务变得容易。同时拓扑生成器还能帮助整合例如创建网络设备,配置MAC地址,把网络设备装到节点上面,设置节点协议栈,连接网络设备到信道等等分立的工作。这部分主要在Helper类中。
ns3优化技术
logging系统
logging等级
一共由低到高提供了7个等级:
- LOG_ERROR—记录错误信息;
- LOG_WARN—记录警告信息;
- LOG_DEBUG—记录一些调试信息;
- LOG_INFO—记录一些程序相关的信息;
- LOG_FUNCTION一当有函数被调用时,该调用信息就被记录;
- LOG_LOGIC—对于整体逻辑的描述;
- LOG_ALL-包含上述的所有信息。
脚本中设置记录模块
在脚本中可以使用进行记录,
1 | LogComponentEnable ( "UdpEchoClientApplication",LOG_LEVEL_INFO) ; |
在first.cc这个例子中,大致的效果为:
在环境变量中设置
可以使用:
1 | export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:UdpEchoServerApplication=level_all|prefix_func|prefix_time' |
在外部环境变量设置等级,并且覆盖文件中的等级的效果,现在大致的效果如下:
prefix_func增加了函数调用信息,prefix_time增加了时间信息;
自定义logging代码
在first.cc中有一句代码:
1 | NS_LOG_COMPONENT_DEFINE("FirstscriptExample"); |
这个代码向ns-3系统中注册了“FirstScriptExample”这个组件,通过记录组件,可以在仿真脚本中使用Logging系统进行自定义的输出语句;
然后可以在代码中创建节点之前的位置添加:
1 | NS_LOG_INFO("Creating Topology"); |
此时重新编译是没有效果的,因为没有激活这个组件,可以用如下两种方法激活:
在代码中添加:
1
LogComponentEnable ("FirstScriptExample", LOG_LEVEL_INFO);
在外部环境变量激活
1
export NS_LOG=FirstScriptExample=info
效果如下:
方法1没有覆盖之前的环境变量。ns3安装
参考http://www.soolco.com/post/94032_1_1.html;
尝试了使用官方文档https://www.nsnam.org/wiki/Installation 的bake进行安装但是比较不成功,建议参考上述博客进行安装。安装依赖建议使用清华源。安装过程和编译过程比较消耗时间,建议虚拟机或者真机保证4GB以上的内存。
ns3依赖
1 | # ubuntu18.04 使用;使用-y可以自动确认,可以改成.sh脚本,chmod赋予权限之后使用。 |
1 | # 这部分pip相关 如有需要请换源之后处理 |
ns3安装
在右侧链接地址https://www.nsnam.org/releases/
下载想要的版本。然后根据一下指令解压安装,版本号自行修改,我安装的是3.34
1 | tar xjf ns-allinone-3.34.tar.bz2 # 解压 |
使用以下编译:
1 | ./build.py --enable-examples --enable-test |
之后根据编译的提示来进行另外的调整
查看一些细节可以:
1 | cd ns-3.34 |
最后进行测试: 这部分巨花时间,大概得2-3个小时
1 | ./test.py |
验证是否安装成功
1 | ./waf --run hello-simulator # 验证是否安装成功 |
我使用virtualbox虚拟机大概做了一个18.04的镜像,账户是cs144,密码是123456,如有需要自行取用。