ns3学习总结

ns3简介

ns3关键概念

节点

ns3是一个网络simulator,为了防止混淆,使用节点来代替主机,用来表示基本设备的抽象;

使用Node类来进行描述,具体调用科研使用NodeContainer 类,比如:

1
2
NodeContainer nodes;
nodes.Create (2)''

应用

需要被仿真的用户程序被抽象成为应用,在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
2
LogComponentEnable ( "UdpEchoClientApplication",LOG_LEVEL_INFO) ;
LogcomponentEnable ("UdpEchoserverApplication",LOG_LEVEL_INFO);

在first.cc这个例子中,大致的效果为:

image-20211009205558340
image-20211009205558340
在环境变量中设置

可以使用:

1
export 'NS_LOG=UdpEchoClientApplication=level_all|prefix_func|prefix_time:UdpEchoServerApplication=level_all|prefix_func|prefix_time'

在外部环境变量设置等级,并且覆盖文件中的等级的效果,现在大致的效果如下:

image-20211009205733732
image-20211009205733732

prefix_func增加了函数调用信息,prefix_time增加了时间信息;

自定义logging代码

在first.cc中有一句代码:

1
NS_LOG_COMPONENT_DEFINE("FirstscriptExample");

这个代码向ns-3系统中注册了“FirstScriptExample”这个组件,通过记录组件,可以在仿真脚本中使用Logging系统进行自定义的输出语句;

然后可以在代码中创建节点之前的位置添加:

1
NS_LOG_INFO("Creating Topology");

此时重新编译是没有效果的,因为没有激活这个组件,可以用如下两种方法激活:

  1. 在代码中添加:

    1
    LogComponentEnable ("FirstScriptExample", LOG_LEVEL_INFO);
  2. 在外部环境变量激活

    1
    export NS_LOG=FirstScriptExample=info

效果如下:

方法1
方法1
方法1没有覆盖之前的环境变量。

方法2
方法2

ns3安装

参考http://www.soolco.com/post/94032_1_1.html;

尝试了使用官方文档https://www.nsnam.org/wiki/Installation 的bake进行安装但是比较不成功,建议参考上述博客进行安装。安装依赖建议使用清华源。安装过程和编译过程比较消耗时间,建议虚拟机或者真机保证4GB以上的内存。

ns3依赖

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# ubuntu18.04 使用;使用-y可以自动确认,可以改成.sh脚本,chmod赋予权限之后使用。
sudo apt-get -y install g++ python3
sudo apt-get -y install g++ python3 python3-dev pkg-config sqlite3
sudo apt-get -y install python3-setuptools git
sudo apt-get -y install qt5-default mercurial
sudo apt-get -y install gir1.2-goocanvas-2.0 python-gi python-gi-cairo python-pygraphviz python3-gi python3-gi-cairo python3-pygraphviz gir1.2-gtk-3.0 ipython ipython3
sudo apt-get -y install openmpi-bin openmpi-common openmpi-doc libopenmpi-dev
sudo apt-get -y install autoconf cvs bzr unrar
sudo apt-get -y install gdb valgrind
sudo apt-get -y install uncrustify
sudo apt-get -y install doxygen graphviz imagemagick
sudo apt-get -y install texlive texlive-extra-utils texlive-latex-extra texlive-font-utils dvipng latexmk
sudo apt-get -y install python3-sphinx dia
sudo apt-get -y install gsl-bin libgsl-dev libgsl23 libgslcblas0
sudo apt-get -y install tcpdump
sudo apt-get -y install sqlite sqlite3 libsqlite3-dev
sudo apt-get -y install libxml2 libxml2-dev
sudo apt-get -y install cmake libc6-dev libc6-dev-i386 libclang-6.0-dev llvm-6.0-dev automake
sudo apt-get -y install python3-pip
sudo apt-get -y install libgtk-3-dev
sudo apt-get -y install vtun lxc uml-utilities
sudo apt-get -y install libboost-signals-dev libboost-filesystem-dev
1
2
3
4
5
6
# 这部分pip相关 如有需要请换源之后处理
sudo pip3 install --upgrade pip
python3 -m pip install --user cxxfilt
pip3 install pygccxml
pip3 install CastXML
pip3 install PyBindGen

ns3安装

在右侧链接地址https://www.nsnam.org/releases/下载想要的版本。然后根据一下指令解压安装,版本号自行修改,我安装的是3.34

1
2
3
4
tar xjf ns-allinone-3.34.tar.bz2 # 解压
chmod -R 777 ns-allinone-3.34 # 修改权限
ls
cd ns-allinone-3.34 # 切换到解压目录下

使用以下编译:

1
./build.py --enable-examples --enable-test

之后根据编译的提示来进行另外的调整

查看一些细节可以:

1
2
cd ns-3.34
./waf --build-profile=debug --enable-examples --enable-test configure

最后进行测试: 这部分巨花时间,大概得2-3个小时

1
./test.py

验证是否安装成功

1
./waf --run hello-simulator # 验证是否安装成功

我使用virtualbox虚拟机大概做了一个18.04的镜像,账户是cs144,密码是123456,如有需要自行取用。