NS3中文教程详解.docx
- 文档编号:25319509
- 上传时间:2023-06-07
- 格式:DOCX
- 页数:53
- 大小:72.38KB
NS3中文教程详解.docx
《NS3中文教程详解.docx》由会员分享,可在线阅读,更多相关《NS3中文教程详解.docx(53页珍藏版)》请在冰豆网上搜索。
NS3中文教程详解
一、简介
1.什么是NS-3?
NS是一个离散事件驱动网络模拟器。
官方定义:
(from)
ns-3isadiscrete-eventnetworksimulatorforInternetsystems,targetedprimarilyforresearchandeducationaluse.ns-3isfreesoftware,licensedundertheGNUGPLv2license,andispubliclyavailableforresearch,development,anduse.
ns-3isintendedasaneventualreplacementforthepopularns-2simulator.Theprojectacronym“nsnam”deriveshistoricallyfromtheconcatenationofns(networksimulator)andnam(networkanimator).
2.NS-3vsNS-2
NS-3虽然冠以一个“3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度上说,仅仅继承了一个名称而已。
NS-3基本上是一个新的模拟器,不支持NS-2的API。
NS-3是完全用C++编写的(也有可选的Python接口),而NS-2一部分模块使用C++而另一部分使用OTcl。
因而NS-3最大的特点就是脚本可以C++或Python语言,而在NS-2中,我们使用的是OTcl。
NS-3的功能仍旧在开发中,因此它远没有NS-2完善(当然NS-2的维护也在进行中)。
NS-3并不包含目前所有NS-2的功能,但它具有某些新的特性:
正确的多网卡处理、IP寻址策略的使用、更详细的模块等等。
Lateststablerelease:
(November20,2008)
4.NS-3的一些名词解释
POSIX:
PortableOperatingSystemInterface可移植的操作系统的接口
一组操作系统API的协议/标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其他操作系统。
Doxygen:
DocumentationGenerator
支持C++、C、Java、Objective-C、Python、IDL、Fortran、VHDL、PHP、C#等各种语言的文档生成器,用于从源代码中生成说明文档。
(类似于我之前使用过的Sandcastle,貌似更加强大些,有必要得学习一下。
)
nam:
NetworkAnimator
基于Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。
(参考)
Mercurial
NS-3代码维护使用的源码版本控制管理系统
Waf
NS-3项目使用的新一代的基于Python的构建系统(BuildSystem)
WireShark
一种GUI包嗅探器。
由于NS-3能生成.pcap文件,因此可以使用类似于WireShark的软件对数据进行分析
tcpdump
另一种包嗅探器。
在Linux下使用CLI进行数据分析
2资源 网络资源
NS-3用户有必要知道几个重要的网站:
主站点位于,提供NS-3系统的基本信息。
详细文档位于主站点的您也可以从这个网页上得到系统架构的相关信息。
维基百科网页可以作为NS-3主站点的补充。
您可以在那里找到用户和开发者的FAQs,以及相关问题的解决途径,第三方的共享代码、论文等等。
NS-3的源码可以在找到。
读者也可以在名为ns3-dev的源码仓库找到当前的NS-3开发树。
还有NS-3的之前发行版本和最新测试版本的代码。
源码管理系统Mercurial
复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。
有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件,CVS(ConcurrentVersionSystem)或许是其中最常见的一个。
NS-3项目采用Mercurial系统作为它的源码管理系统。
尽管读者在阅读本教程时不需要知道太多的Mercurial相关知识,但我们建议读者能够熟悉Mercurial,并用于查看NS-3源码。
Mercurial的网址为,读者可以从上面获取到这个软件配置管理系统(SoftwareConfigurationmanagement,SCM)的二进制程序和源码。
Mercurial的开发者Selenic提供了一个Mercurial教程,网址为,以及快速入门指南:
.
在NS-3的主页上,读者也可以获取到有关Mercurial和NS-3配合使用的最常用信息。
编译系统Waf
读者下载NS-3的源码到本地系统之后,需要对源码进行编译来生成可执行程序。
正如源码管理方式多种多样,编译源码也有多种工具。
最常用的工具是make.Make最出名的一点:
它可能是编译大型和高可配置型系统最难的一种方法。
因此,有很多替代工具被开发出来。
最近,大型高可配置系统的编译工具大多选择用Python语言来开发。
NS-3的编译系统采用了Waf。
它是用Python开发的新一代编译管理系统。
读者不必掌握python,即可编译现有的NS-3项目。
如果读者想要扩展现有的NS-3系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。
对于想了解Waf细节的读者,可以访问.
开发环境
正如以上所述,NS-3的脚本由C++或者Python编写。
从开始,NS3的API提供了python语言接口,但是所有的模块都是由C++编写的。
这里,我们假定读者掌握C++知识和了解面向对象的相关概念。
我们将在用到一些高级的概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。
但是我们也不希望本教程变成C++教程,所以我们希望读者能够掌握基本的C++命令。
在网站上和书籍中,你可以找到无数的关于C++知识的信息。
如果读者是个C++新手,那么您在继续阅读本指南之前可能需要找一些C++教程或者网站,至少必须熟悉一下C++的基本语言特征。
例如,Cplusplus教程。
NS-3系统开发过程中使用了许多的GNU工具链(toolchain)组件。
所谓软件的工具链是指在给定环境中可用编程工具的集合。
如果读者想要快速地了解一下GNU工具链所包含的内容,请浏览. NS-3使用gcc,GNUbinutils,以及gdb.但是,我们并不使用GNU编译系统工具(buildsystemtools),既不用make,也不用autotools,而是使用Waf来作为编译管理工具。
通常,NS-3使用者的工作环境为Linux或者类Linux系统。
对于Windows环境,有几种可以不同程度模拟Linux环境的软件,比如Cygwin。
NS-3支持在Cygwin环境下的开发。
Windows用户可以浏览获取该软件(虽然有许多工程维护者使用MinGW,但是MinGW现在还没有得到官方支持)。
Cygwin可以提供许多流行的Linux系统命令。
但是,某些情况下它也会出现问题,因为它毕竟只是Linux系统的模拟。
Cygwin和Windows中其他程序的交互也有可能会导致程序出现问题。
如果读者正在使用Cygwin或者MinGW;并使用着Logitech的某些软件产品,我们或许可以让您少点麻烦:
建议您去看一看MinGWFAQ。
搜索Logitech并阅读FAQ条目:
“为什么当我编译源码时,make经常崩溃,留下一个文件”。
无论您相信与否,当运行Logitech时,Logitech进程监视器潜入了每个正在系统中运行的动态连接库(DLL)当中。
它可能导致您的Cygwin或者MinGw的动态连接库奇怪地中止,常常也会阻止调试器的运行。
所以当运行Cygwin的时候,一定要小心您的Logitech软件。
替代Cygwin的一种选择是安装虚拟机,比如在VMware上安装Linux虚拟机。
套接字编程
我们假定读者对本教程所举例子中的Berkeley套接字API基本熟悉。
如果您不了解套接字,我们建议您学习一下这些API和一些常见的使用例程。
TCP/IPSocketsinC这本书可以帮助您很好地理解TCP/IP套接字。
网站包含了SocketinC书中所举例子的源码。
如果读者理解了该书中的前四章(如果读者没有这本书的话,可以看上面网站中的源代码),您会更好的理解本教程的内容。
这里还有一本关于多播套接字(MulticastSockets)的书籍(MulticastSockets,MakofskeandAlmeroth)。
如果您想学习本书中有关多播的例子,该书里面有些资料您可能需要了解。
NS3的两个例子
1./*-*-Mode:
C++;c-file-style:
"gnu";indent-tabs-mode:
nil;-*-*/);
2.("PacketSize",UintegerValue(1024));
3.
4.ApplicationContainerclientApps=(0)); See the
5. * GNU General Public License for more details.
6. *
7. * You should have received a copy of the GNU General Public License
8. * along with this program; if not, write to the Free Software
9. * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
10. */
11.#include "ns3/"
12.#include "ns3/"
13.#include "ns3/"
14.#include "ns3/"
15.#include "ns3/"
16.#include "ns3/"
17.);
18. ("PacketSize", UintegerValue (1024));
19. ApplicationContainer clientApps =
20. (nWifi - 1));
21. (Seconds );
22. (Seconds );
23. Ipv4GlobalRoutingHelper:
:
PopulateRoutingTables ();
24. Simulator:
:
Stop (Seconds );
25. ("third");
26. ("third", (0));
27. ("third", (0), true);
28. Simulator:
:
Run ();
29. Simulator:
:
Destroy ();
30. return 0;
31.}
NS3中文教程:
3下载及编译软件
首先感谢此稿的翻译工作人员,正是因为他们的劳动才让我们这些初学者有捷径可取。
下载ns-3
从现在起,我们假定读者使用的工作环境为Linux或者仿Linux环境(Linux,Cygwin等等.)并且已经安装了可用的GNU工具链,而且还安装了Mercurial(分布式版本控制系统)和Waf软件。
细节已经在ns-3网页中详述过,参见以下链接:
源码可以在网站上的Mercurial源码库下载到.你也可以从链接处下载一个tar格式压缩包,或者直接使用Mercurial从源码库下载。
除非有特殊需要,我们推荐使用Mercurial从源码库下载。
tar格式压缩包下载,请参见本节最后部分。
最简单的方法就是使用Mercurial源码库下载一个ns-3-allinone压缩包,此压缩包内含一套脚本集来管理各种子系统下的ns-3下载和安装。
我们推荐你使用这个压缩包来简化你的ns-3安装。
使用Mercurial下载ns-3
作为练习,我们首先在home目录下建立一个目录并取名为repos,用来存放本地Mercurial源码库,注意:
在本教程随后内容中,我们假定你已经这样做了。
如果使用如下的方法,可以在Linux的shell中下载到一份ns-3-allinone软件包(假定你已经安装了Mercurial):
cd
mkdirrepos
cdrepos
hgclone
当Mercurail的hg命令执行后,可以看到如下结果:
destinationdirectory:
ns-3-allinone
requestingallchanges
addingchangesets
addingmanifests
addingfilechanges
added31changesetswith45changesto7files
7filesupdated,0filesmerged,0filesremoved,0filesunresolved
当clone命令运行结束以后,在前述建立的repos目录下,会出现一个ns-3-allinone目录,而且含有如下文件:
* * * README
注意:
你实际上仅仅下载了一些Python脚本,下一步就是利用这些脚本根据需要下载并来安装ns-3软件包。
如果你访问如下链接:
就会发现若干源码库,其中很多是ns3开发团队专用的。
其中在源码库org/你会发现名为的源码库,这是ns-3的第一个稳定版本。
还有一些分散的源码库名为,它为保留了参考记录。
保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回归测试时。
至少做一次测试来验证所有的程序都正确编译了。
当前的开发版ns-3的快照存放在中;相关的参考记录存放在链接中。
ns3开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他们仍在开发中,有一些未发布过的代码。
所以如果你不需要最新的特性的话还是考虑使用发行版。
由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的ns-3-dev,但是你可以根据自己的需要选择其他的版本,并替换这里的”ns-3-dev”,(例如,或,在下文中,你可以通过访问源码库列表或者访问ns3开始网页找到最新的ns-3发布版软件。
当你从源码库下载完后,继续切换进入你自己建立的ns-3-allinone目录中。
我们现在使用脚本来下载ns-3需要使用的各个部件。
继续在你的shell中输入以下命令(如果你想使用任意发行版你可以将ns-3-dev替换为你选择的发行版的名字,例如""和"")。
./-nns-3-dev-rns-3-dev-ref-traces
注意,-n选项的默认参数为ns-3-dev,-r选项的默认参数为ns-3-dev-ref-traces,所以上述命令中这两个选项的参数实际上是多余的。
我们使用这个例子来描述如何指定源码库。
你只需简单键入如下命令就可以使用默认参数来下载ns-3-dev:
./
当hg(Mercurial)命令执行时,你可以看到如下的信息:
#
#GetNS-3
#
Cloningns-3branch
=>hgclonens-3-dev
requestingallchanges
addingchangesets
addingmanifests
addingfilechanges
Chapter3:
GettingStarted8
added4634changesetswith16500changesto1762files
870filesupdated,0filesmerged,0filesremoved,0filesunresolved
这些输出信息显示下载脚本已经从源码库中下载到了实际的ns-3源码,紧接着,你就会看到这样的信息:
#
#Gettheregressiontraces
#
SynchronizingreferencetracesusingMercurial.
=>hgclonens-3-dev-ref-traces
requestingallchanges
addingchangesets
addingmanifests
addingfilechanges
added86changesetswith1178changesto259files
208filesupdated,0filesmerged,0filesremoved,0filesunresolved
这表明下载脚本为你下载了参考记录文件。
下载脚本被设计成自适应的,它能检测在一些系统平台上某些ns-3模块不被支持,在你的系统平台上,你可能看不到这些系统不支持的源码被下载。
然而,在大多数系统平台上这样的过程会显示如下:
#
#GetPyBindGen
#
Requiredpybindgenversion:
tofetch pybindgen;thiswillfailifnonetworkconnectionisavailable.HitCtrl-=>bzrcheckout-rrevno:
640pybindgenpybindgen
Fetchwassuccessful.
这些信息显示了下载脚本在为你下载Python绑定生成器的过程,下一步你就可能看到如下的信息(不同的系统平台表现有所不同),
#
#GetNSC
#
RequiredNSCversion:
nscfromclonensc
requestingallchanges
addingchangesets
addingmanifests
addingfilechanges
added273changesetswith17565changesto15175files
10622filesupdated,0filesmerged,0filesremoved,0filesunresolved
这些信息显示了下载脚本在为你下载网络仿真器支架程序(NSC)的过程。
当复制命令结束,你在~/repos/ns-3-allinone目录下会有几个新目录:
**ns-3-dev-ref-traces/pybindgen/
*ns-3-dev/nsc/README
继续进入ns-3-dev目录,你会见到如下的文件:
AUTHORSexamples/regression/scratch/waf*
bindings/LICENSEsrc/*
ns3/RELEASE_NOTESutils/wscript
doc/READMEsamples/VERSION
现在可以准备编译ns-3软件了。
使用Tarball下载ns-3
使用tarball下载ns-3比使用Mercurail下载ns-3要简单一些,因为需要下载的各个部分都已经预先被打包在一个压缩包中了,你只需要选择一个发行版版本,下载并且解压就可以。
如上所述,在Mercurial下载方法中,是在home目录下创建一个repos目录,保存本地Mercurial源码库。
你也可以建立一个tarball目录来下载。
(注意:
本教程后面会假定你把它下载到了repoa目录,所以请留意这个选择)。
如果你选择了tarballs方法下载,你可以键入如下命令来下载一份ns-3的发行版(当然,可以根据需要选择你想要的版本):
cd
mkdirtarballs
cdtarballs
wgetxjf如果你切换到目录,你会看到下述文件:
*README
现在就可以编译ns-3软件包了。
编译ns-3
使用编译
如果你是第一次编译ns-3软件包,建议使用allinone环境,它会为你以最常用的方式配置工程。
切换到你在上文下载一节中创建的目录下。
如果你使用Mercurial下载,请进入~/repos目录下的ns-3-allinone目录,如果你使用tarball下载,找到~/tarballs目录下类似的目录,键入如下的命令,并请耐心等待:
./
编译脚本开始编译下载的ns3时,你会看到大量常见的编译器输入信息。
最后你会看到如下编译成功的好消息:
Waf:
Leavingdirectory‘/home/craigdo/repos/ns-3-allinone/ns-3-dev/build’
’build’finishedsuccessfully
一旦工程编译好,你就可以不再使用ns-3-allinone脚本包了。
你已经从其中获取必要的东西,现在是你直接同Waf交互的时候了,它位于ns-3-dev目录中,并不在ns-3-allinone目录中。
切换到ns-3-dev目录下(或者你下载的版本的相应目录下):
cdns-3-dev
使用Waf编译
我们使用waf来配置和编译ns-3工程软件包,这一点不是严格必须的,但是做一个简单的介绍是很有必要的,起码可以了解如何修改工程的配置。
也许你能做出的最有用的配置修改就是编译工程的优化版本了,默认你会将你的工程编译为调试版本,让我们来使工程做出优化的编译。
为了通知waf进行优化编译,你需要执行如下的命令:
./waf-doptimizedconfigure
这会Waf可能会切换到其他目录收集信息.当编译系统检查各种依存关系时,你可以看到类似如下的输出结果:
Checkingforprogramg++:
ok/usr/bin/g++
Checkingforprogramcpp:
ok/usr/bin/cpp
Checkingforprogramar:
ok/usr/bin/ar
Checkingforprogramranlib:
ok/usr/bin/ranlib
Checkingforg++:
ok
(鉴于长度限制,省略)
Checkingforprogramvalgrind:
ok/usr/bin/valgrind
----SummaryofoptionalNS-3features:
ThreadingPrimitives:
enabled
RealTimeSimulator:
enabled
EmulatedNetDevice:
enabled
GNUScientificLibrary(GSL):
enabled
TapBridge:
enabled
GtkConfigStore:
enabled
XmlIo:
enabled
SQlitestatsdataoutput:
enabled
NetworkSimulationCradle:
enabled
PythonBindings:
enabled
PythonAPIScanningSuppor
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NS3 中文 教程 详解