1 NS3介绍
引用官网的介绍:
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
网友评论