Ubuntu下NS-3初步讲解

1 NS3介绍

官网:https://www.nsnam.org/

引用官网的介绍:

ns-3 is a discrete-event network simulator for Internet systems, targeted primarily for research and educational use. ns-3 is free software, licensed under the GNU GPLv2 license, and is publicly available for research, development, and use.

NS-3是一个离散的事件驱动的网络系统模拟器,旨在为科研和教学服务。NS-3是免费的软件,使用GNU GPLv2证书,对研究,开发,和使用开放。目前(2016年10月24日)的最新版本是ns-3.27。稳定版本是ns-3.26。几乎每三到四个月就会更新一个版本。ns3之前有ns2。但是ns2与ns3区别很大。强烈建议使用ns3.另外,ns3.26版本是支持c++11。所以建议使用最新的版本。

官方提供了说明文档、教程文档、模块库文档、API文档等。这些文档很重要。

可以通过网址https://www.nsnam.org/ns-3-26/documentation/获取。

这里写图片描述

官网提供了PDF格式和html格式。下载PDF格式更好,本地查看,不受网络限制。

需要说明的是,上面的文档都是英文的。如果英文好,直接阅读这些文档,就可以入门NS3了。

但是肯定有英文不好的同学喽,怎么办呢?还是有办法的。有一本书,名字是《ns-3网络模拟器基础及应用》,走淘宝就可以了。这本书就是上面的官方文档的翻译版本。如果英文好的话,别花冤枉钱了。

2 安装

根据ns3-tutorial文档的说明,来进行安装。网上也有博客说明安装步骤。大家可以参考。需要说明的是,NS3安装以及配置都是ubuntu下进行的。

对于Windows系统用户来说,最好使用双系统,因为在Windows下使用虚拟机来做的话,太慢了。个人建议用双系统。如果你自己使用的就是linux的话,那就更好了。

在安装NS3前需要安装一些依赖库,否则,安装NS3会出错。

sudo apt-get install gcc g++ Python
sudo apt-get install mercurial
sudo apt-get install bzr
sudo apt-get install gdb valgrind
sudo apt-get install gsl-bin libgsl0-dev libgsl0ldbl
sudo apt-get install flex bison
sudo apt-get install g++-3.4 gcc-3.4
sudo apt-get install tcpdump
sudo apt-get install sqlite sqlite3 libsqlite3-dev
sudo apt-get install libxml2 libxml2-dev
sudo apt-get install libgtk2.0-0 libgtk2.0-dev
sudo apt-get install vtun lxc
sudo apt-get install uncrustify
sudo apt-get install doxygen graphviz imagemagick
sudo apt-get install texlive texlive-pdf texlive-latex-extra texlive-generic-extra texlive-generic-recommended
sudo apt-get install texinfo dia texlive texlive-pdf texlive-latex-extra texlive-extra-utils texlive-generic-recommended
sudo apt-get install python-pygraphviz python-kiwi python-pygoocanvas libgoocanvas-dev
sudo apt-get install libboost-signal-dev libboost-filesystem-dev

主要有上面这些。安装之后,再安装Tutorial文档中的步骤进行,下载NS3,编译。

详细过程请看Tutorial文档。

我在安装的时候遇到了错误。其中大部分错误应该是没有安装依赖的库造成的。如果在安装过程中出了错误,请看看终端上面显示的错误,是不是依赖的库没有安装?如果是因为有些库没有安装的话,可以先安装提示的库,然后在向下进行安装。

如果上面依赖的库安装完成之后,按照Tutorial文档中的下载过程下载NS3便可,就不多说了,下载过程简单。要看各位的网速了。
下载完成之后,目录截图如下:


这里写图片描述

完成之后,就是要编译这个工程了。
其实我们下载的NS3文件没有IDE来打开看是肯定不行的,稍后会说明如何在eclipse中打开我们下载的NS3。

首先编译并运行一下NS3。看看是否安装成功。此时的NS3文件总大小大约150M左右。我使用的是waf进行配置和编译。这里完全不用看Tutorial文档了。里面说的太啰嗦了。

打开终端,进行到下载的NS3目录下,(是在上面的目录下打开命令行终端),输入以下运行命令:

./waf configure --build-profile=debug --enable-examples --enable-tests

这一行命令是为了配置NS3。

命令中的点号代表当前目录,当前命令下的waf文件,waf文件是一个python。是NS3自带的。

通过上面的命令,使用当面目录下的waf文件配置NS3,并使得编译版本为debug模式,同时使得实例代码和测试代码可用。

终端上输出日志如下:

Setting top to                           : .
Setting out to                           : build
Checking for 'gcc' (c compiler)          : /usr/bin/gcc
Checking for cc version                  : 4.2.1
Checking for 'g++' (c++ compiler)        : /usr/bin/g++
Checking boost includes                  : 1_46_1
Checking boost libs                      : ok
Checking for boost linkage               : ok
Checking for click location              : not found
Checking for program pkg-config          : /sw/bin/pkg-config
Checking for 'gtk+-2.0' >= 2.12          : yes
Checking for 'libxml-2.0' >= 2.7         : yes
Checking for type uint128_t              : not found
Checking for type __uint128_t            : yes
Checking high precision implementation   : 128-bit integer (default)
Checking for header stdint.h             : yes
Checking for header inttypes.h           : yes
Checking for header sys/inttypes.h       : not found
Checking for header sys/types.h          : yes
Checking for header sys/stat.h           : yes
Checking for header dirent.h             : yes
Checking for header stdlib.h             : yes
Checking for header signal.h             : yes
Checking for header pthread.h            : yes
Checking for header stdint.h             : yes
Checking for header inttypes.h           : yes
Checking for header sys/inttypes.h       : not found
Checking for library rt                  : not found
Checking for header netpacket/packet.h   : not found
Checking for header sys/ioctl.h          : yes
Checking for header net/if.h             : not found
Checking for header net/ethernet.h       : yes
Checking for header linux/if_tun.h       : not found
Checking for header netpacket/packet.h   : not found
Checking for NSC location                : not found
Checking for 'mpic++'                    : yes
Checking for 'sqlite3'                   : yes
Checking for header linux/if_tun.h       : not found
Checking for program sudo                : /usr/bin/sudo
Checking for program valgrind            : /sw/bin/valgrind
Checking for 'gsl'                       : yes
Checking for compilation flag -Wno-error=deprecated-d... support : ok
Checking for compilation flag -Wno-error=deprecated-d... support : ok
Checking for compilation flag -fstrict-aliasing... support       : ok
Checking for compilation flag -fstrict-aliasing... support       : ok
Checking for compilation flag -Wstrict-aliasing... support       : ok
Checking for compilation flag -Wstrict-aliasing... support       : ok
Checking for program doxygen                                     : /usr/local/bin/doxygen
---- Summary of optional NS-3 features:
Build profile                 : debug
BRITE Integration             : not enabled (BRITE not enabled (see option --with-brite))
Build directory               : build
Build examples                : enabled
Build tests                   : enabled
Emulated Net Device           : enabled (netpacket/packet.h include not detected)
Emulation FdNetDevice         : not enabled (needs netpacket/packet.h)
File descriptor NetDevice     : enabled
GNU Scientific Library (GSL)  : enabled
GtkConfigStore                : enabled
MPI Support                   : enabled
NS-3 Click Integration        : not enabled (nsclick not enabled (see option --with-nsclick))
NS-3 OpenFlow Integration     : not enabled (Required boost libraries not found, missing: system, signals, filesystem)
Network Simulation Cradle     : not enabled (NSC not found (see option --with-nsc))
PlanetLab FdNetDevice         : not enabled (PlanetLab operating system not detected (see option --force-planetlab))
PyViz visualizer              : enabled
Python Bindings               : enabled
Real Time Simulator           : enabled (librt is not available)
SQlite stats data output      : enabled
Tap Bridge                    : not enabled (linux/if_tun.h include not detected)
Tap FdNetDevice               : not enabled (needs linux/if_tun.h)
Threading Primitives          : enabled
Use sudo to set suid bit      : not enabled (option --enable-sudo not selected)
XmlIo                         : enabled
'configure' finished successfully (1.944s)    

上面命令完成之后,编译NS3,在终端输入命令:

./waf build

该命令会编译整个NS3。编译完成之后,在终端会显示如下日志信息:

这里写图片描述

编译完成之后,整个NS3文件大小大约在1.2G左右。此后,在此输入build命令,终端输出信息如下:

这里写图片描述

其中,根据终端中的提示信息,还有四个模块没有编译。这是因为这四个模块并不是必须的。你可以在使用到的时候再添加也不晚。我在做的时候,没有用到过。所以我一直没有添加。

下面运行NS3,测试一下,在终端输入命令:

./test.py -c core

这一行命令会测试整个NS3的代码。在终端的日志信息会输出每一个测试用例。这个过程会比较久。

下面运行NS3 Hello代码,在终端输入命令:

./waf --run hello-simulator

上面代码完成之后,在终端会输出信息:

这里写图片描述

至此就完成了NS3的安装。

3 eclipse中配置NS3

下面说说如何在eclipse中配置NS3。

https://www.nsnam.org/wiki/HOWTO_configure_Eclipse_with_ns-3

这个网址是官方给出的如何在eclipse中配置NS3的过程。但是这个过程复杂难懂。本来挺简单的事情,我在看这个文章的时候觉得写得太复杂。

下面我一方面截图一方面文字说明,一步步来。

首先,我们进入刚刚下载的NS3目录下,在终端打开,输入命令行:

./waf clean

这样做可清除NS3项目的编译。从上面我们知道,编译之后NS3工程有1.2G左右,太大了。但是运行此命令之后,工程要小很多。一会儿再配置eclipse中,需要导入该NS3文件。

3.1 安装eclipse

可从
http://www.eclipse.org/downloads/packages/eclipse-ide-cc-developers/neon2
这个网址下载对应的eclipse c++版本。具体安装过程就不多说了。

3.2 安装mercurial eclipse 插件

百度一下 google一下就可以了。

https://www.nsnam.org/wiki/HOWTO_configure_Eclipse_with_ns-3
这个网址里面在说明如何安装这个插件的时候说的不清楚。不用看。记得安装mercurial插件就行。

我给一个参考网址:
http://wireframesketcher.com/support/install/installing-mercurial-plugin.html
可以参考这个进行安装。

3.3 新建c++工程

安装成功之后,随便打开一个命令行终端,输入eclipse命令即可启动eclipse。

这里写图片描述

打开之后,File->new C++ project

这里写图片描述

输入项目工程名字,选择空工程和Linux GCC,next->Finish即可。

新建工程目录如下:


这里写图片描述

然后在工程上右键鼠标,选择Import...按钮

这里写图片描述

选择File System,然后Next

这里写图片描述

点击Browse按钮,选择我们下载的NS3目录,全选。我这里是把ns326目录导入ns327工程。然后点击Finish按钮。
导入成功之后,工程结构图如下,我已ns326项目实例:

这里写图片描述

3.4配置waf Build

工程右键鼠标,选择properties。

这里写图片描述

选择c/c++ build->builder settings
填写其中的build command和build directory。

其中的ns326必须替换成你自己新建的工程的名字。完成之后,选择Behavior.

这里写图片描述

严格按照图中的选择。然后点击OK。

3.5配置Configure External Runner

点击eclipse中的Run->External Tools->External Tools Configuration

这里写图片描述

在最左边Program上面有一排按钮,第一个按钮新建配置,点击,会出现图中所示的右边的三个空白行要填写,填写内容如下:

这里写图片描述

Name 随机自己起名字,不重要,自己看得懂就行。
下面的三个Location、Working Directory、 Arguments按照上面的填写。
其中上面出现ns3字样的地方,需要换成你自己新建的工程的名字。 其他的内容按照上面的字符串填写。

Location指定的是waf文件的位置。
Working Directory指的是工作目录。
Arguments指定的是参数,字符串参数,基本不用,按照图中书写就行。

完成之后,点击Run按钮,会弹出一个框:

这里写图片描述

这里需要输入一个运行代码文件名,这里输入hello-simulator。
为什么输入这个名字呢?
因为我们上面配置了工作目录,Working Directory,这里指定的目录下有一个hello-simulator.cc文件,所以可以运行这个代码。

点击OK按钮,在eclipse控制台输出信息如下:

这里写图片描述

3.6 配置Configure Runner

点击eclipse界面上的Run -> Run Configuration

这里写图片描述

左边有一个c/c++ application。 上面的按钮第一个新建一个,就会出现上面图中的右边的界面,Main选项卡下Project为你自己新建的工程文件名。

第二个c/c++ application为你自己的工程中可以运行的文件,这个工程配置的编译之后的代码都放在build目录下,这个build目录在你自己的工程目录下,点击Browse按钮,选择可执行文件。然后,选择Environment选项卡

这里写图片描述

点击New...新建一个变量LD_LIBRARY_PATHValue值就是上面的图中所示。记得把ns3换成你自己的工程的名字。

还有最下面有两个选择,勾选第一个Append environment to native environment.然后点击RUN按钮就会运行上面的Working Directory中配置的对应的编译代码文件,在控制台就会有输出信息。

3.7 Miscellaneous tips

打开任意命令行终端,输入

pkg-config --cflags libxml-2.0

回车

这里写图片描述

然后右键鼠标,Properties->C/C++ General->Paths and Symbols->Languages下的GNU C++点击Add按钮,

这里写图片描述

把命令行输出的/usr/include/libxml2复制到图中所有位置。然后重新编译整个工程。

这一步貌似可以不要。我后来新建的工程,没有用这个,也照样运行的良好。可省略。

至此,完成了全部的配置。

4 编译和运行

编译

关于编译ns3工程,有两种方式

一种是命令行模式,在工程目录下,直接输入命令

./waf build

即可编译整个 项目

这里写图片描述

第二种是使用eclipse->Run->External Tools->External Tools Configuration

这里写图片描述

点击右下角的RUN按钮,编译的日志输出会在eclipse的控制台输出。

对于这两种方式,我建议使用命令行终端。

因为eclipse界面上日志输出,在工程大的情况下,非常卡,耗时耗力,在终端上要好很多。

运行

同样有两种方式。

第一种使用命令行:

这里写图片描述

这种方式可以添加运行参数,其中的hello-simulator是默认工作目录下的代码。如果是想要运行其他目录下的代码,比如examples目录下的代码,这需要把hello-simulator替换成/examples/xxx/xxx就可以运行了。

第二种方式eclipse界面,Run -> Run Configuration选项

这里写图片描述

想要运行什么代码,只需要选择c/c++ application选项就可以了。

对于以上两种运行方式,个人建议使用eclipse界面。简单方便。命令行要输入很多字符,很容易出错。

5 安装python插件

NS3中可以使用python开发,不过我没有用过。如果想用的话,可以在eclipse中安装python插件。即使不用python开发,安装python插件,可以对数据进行处理,也是不错的选择。

点击eclipse界面中的Help->install new software

这里写图片描述

选择第一个pydev即可。第二个不用选。一路Next就可以了。

6 后记

上面的过程,大家看着可能感觉很麻烦。确实如此,整个的过程可能花一天的时间才能搞好,并且还是顺利的情况下。如果出现奇奇怪怪的问题,可能要很久时间才能搞好。

不过,其实完成上面的过程一次之后,下面如果在配置就很容易了。

编译就是,/waf build运行的话直接使用eclipse界面完成。

如果想再新建工程,直接新建c++工程,然后导入原来的NS3工程就可以。需要做的就是配置configration。

如果想使用ns3最新版本,直接下载ns3最新版本之后,新建c++工程,然后再导入下载的最新版本文件就可以了,然后再配置configuration就可以了。

最后,就可以苦逼的玩耍了~


NS3常用命令汇总:

./waf clean

./waf configure --build-profile=debug --enable-sudo --enable-examples --enable-tests./test.py -c core

./waf --run hello-simulator

运行程序命令行:

./waf --run "examples/wireless/wifi-simple-learn-tcptest

Eclipse快速操作组合键

ctrl+shift+r : 打开资源
ctrl+o : 快速outline
ctrl+e : 快速切换编辑器
alt+shift+r : 重命名
shift+enter : 在当前行之下,添加空白行
ctrl+shift+enter: 在当前行之上,添加空白行
alt+方向键 : 将当前行内容上下移动
Ctrl+T : 显示一个类的继承关系
Ctrl+shift+X : 转换成大写字母
Ctrl+shift+Y : 转换成小写字母


sudo su root权限

磁盘挂载:

sudo ntfsfix /dev/sda7

双系统情况下,ubuntu打开文件系统时候,有时候不能访问Windows系统文件,会出现磁盘挂载出现问题的提示,可以使用该命令修复,之后就可以打开Window系统文件。

不过,要注意sda7其中的7不能照抄。按照自己ubuntu系统标记改成对应的数字。


没有声音:

登录ubuntu系统是没有声音的,反正我的是没有,开启方法:
root登录后打开终端输入:

pulseaudio --start --log-target=syslogsudo sh -c echo “pulseaudio –start –log-target=syslog” >> /etc/environment

只需运行这一次,以后每次启动 音量调节 都可以使用。

如果每次启动都可以这样: /etc/rc.local 中加入 pulseaudio --start --log-target=syslog 语句。


gnuplot使用命令:

进入.plt文件所在的目录,打开终端,输入命令:

gnuplot xxxx.plt

回车即可生成png或者eps图片文件。即可查看效果图。


netanim使用命令:

进入netanim所在的目录下,命令行输入:

./NetAnim

回车之后进入NetAnim界面,打开xml文件即可。


wireshark使用命令:

进入wireshark-2.0.1所在的目录下,命令行输入:

sudo wireshark

如果有异常,尝试输入:

sudo ldconfigwireshark

查看和杀死进程:

ps -ekill pid

如果还杀不死,使用

kill -9 pid

推荐阅读更多精彩内容

  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 3,602评论 0 5
  • 官网 中文版本 好的网站 Content-type: text/htmlBASH Section: User ...
    不排版阅读 1,890评论 0 3
  • 第一章 1.Linux是一套免费使用和自由传播的类UNIX操作系统,它可以基于Intel x86系列处理器以及Cy...
    yansicing阅读 1,072评论 0 8
  • feisky云计算、虚拟化与Linux技术笔记posts - 1014, comments - 298, trac...
    不排版阅读 2,236评论 0 4
  • Linux习惯问题: 在vim编辑时,按了ctrl + s后,再按ctrl + q就可以继续执行了。ctrl + ...
    光着脚的鞋阅读 1,776评论 1 10