logo资料库

NS3 中文教程(tutorial 翻译).pdf

第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
资料共54页,剩余部分请下载后查看
NS3教程翻译
1.1 致 NS-2 用户
1.2 共享 contributing
1.3 教程内容组织
2.1 网络资源
2.2 源码管理系统 Mercurial
2.3 编译系统 Waf
2.4 开发环境
2.5 套接字编程
3.1 下载 ns-3
3.1.1 使用 Mercurial 下载 ns-3
3.1.2 使用 Tarball 下载 ns-3
3.2 编译 ns-3
3.3 测试 ns-3
./test.py -c core
47 of 47 tests passed (47 passed, 0 failed, 0 crashed, 0 valgrind errors)
Waf: Entering directory‘/home/craigdo/repos/ns-3-allinone/ns-3-dev/build’
./waf --regression
Entering directory ‘/home/craigdo/repos/ns-3-allinone/ns-3-dev/build’
cd build/debug/regression/traces/second.ref tcpdump -nn -tt -r second-2-0.pcap
cd ../../../../..
4.2.3 Ns3 Namespace
4.2.5 Main Function
4.2.6.2 使用 PointToPointHelper 类
4.2.7 Applications 类
4.2.7.1 UdpEchoServerHelper 类
4.2.7.2 UdpEchoClientHelper 类
4.2.8 Simulator 类
4.2.9 创建自己的脚本
5 Tweaking NS3 (NS3 调整?)
5.1 日志模块的使用
5.1.3 为你的代码增加日志功能
可以通过几个宏调用日志组件给仿真增加新的日志功能。我们可以在scratch 目录中的 myfirst.cc 中做。
5.2 使用命令行参数
5.2.1 重载默认属性
5.2.2 钩挂自己的参数值
5.3 使用Tracing系统
5.3.1 ASCII 码Tracing
5.3.2 PCAP 格式Tracing
1 简介 http://www.nsnam.org/docs/release/tutorial/tutorial_1.html#Introduction NS-3 的主文档由四部份组成: NS-3 Doxygen 手册 模拟器公共 API 的说明文档 NS-3 教程 (本教程 Tutorial) NS-3 参考手册 (Reference Manual) NS-3 维基百科 本指南的目的是向 NS-3 新用户以结构化的方式介绍 NS-3 系统。常常,新用户很难 通过繁冗的参考手册收集到对当前仿真任务有用的实质信息。在本教程中,我们将通 过 几个仿真实例向读者介绍和阐释 NS-3 的主要概念和特点。 随着本教程的深入,我们会介绍完整的 NS-3 文档,并指出源代码的具体位置,以 便于对 NS-3 软件系统运行机制感兴趣的研究者做深入的钻研。 开始之前,有几个要点需要读者注意: NS-3 并不是 NS-2 的扩展,而是一个全新的模拟器。虽然二者都由 C++编写,但 NS-3 并 不支持 NS-2 的 API。NS-2 中的一些模块已经被移植到了 NS-3。在 NS-3 开发的过程 中, NS-3 项目组会继续维护 NS-2,同时也会研究过渡和整合机制。 NS-3 是开源的。NS-3 项目努力为研究者提供一个开放的环境来共享他们自己的软件。 1.1 致 NS-2 用户 对于熟悉 NS-2 的读者来说,NS-3 和 NS-2 最明显的区别是脚本语言的选择。NS-2 使用 OTcl 脚本语言,仿真的结果可以通过网络动画器 nam(Network Animator nam)来 演示。在 NS-2 中,如果仅使用 C++语言而不用 OTcl,仿真过程是不可能运行起来的(即, 只有 main()函数而没有任何 OTcl 语句)。另外,NS-2 的许多模块由 C++编写,其他的 用 OTcl 语言编写。而在 NS-3 中,仿真器全都由 C++编写,仅仅带有可选择性的 Python 语言绑定。因此,仿真脚本可以由 C++或者 Python 语言编写。某些仿真结果可以通过 nam 演示,但是新的动画演示器也正在开发之中。由于 NS-3 可以生成 pcap 包 trace 文 件,也可以利用其他工具通过 trace 文件来分析仿真过程。在本教程中,我们先重点讲 解使用 C++编写脚本,并通过 trace 文件来分析仿真结果。 NS-3 和 NS-2 也有一些相似之处 (比如二者都是基于 C++对象,一些 NS-2 的模块 已移植到了 NS-3 上)。在本教程中,我们将强调 NS-3 和 NS-2 的区别。 我们经常听到一个疑问:“我到底是要继续使用 NS-2,还是转向 NS-3 呢?” 答 案视情况而定。虽然 NS-3 现在还没有包含所有的 NS-2 模块,但是另一方面,NS-3 也有一些新的功能(比如,能正确地处理节点上的多重接口,使用 IP 地址,与因特网协 议和设计保持一致,以及更加详细的 802.11 模块等)。NS-2 的模块可以被移植到 NS-3 中(移植帮助文档正在准备之中)。NS-3 的多个前端也正在积极开发中。同时,NS-3 开发者也相信(部分早期用户也已证明)NS-3 已经可以充分使用,也是用户进行新仿真项 目时的一个富有吸引力的选择。
1.2 共享 contributing NS-3 是由学术研究者开发和使用的用于网络科研和教学的仿真器。它依赖于研究 者们持续不懈地努力,开发新模块、调试和维护已有模块、并共享成果。为了鼓励研究 者像支持 NS-2 那样支持 NS-3,我们希望 NS-3 的开发者遵守下面几条规则:
基于 GNU GPLv2 兼容性的开放源码许可 维客 共享代码(Contributed Code) 页(类似于 NS-2 的共享代码页) Src/contrib. 目录(我们会保留您共享的代码) 开放的错误追踪器(bug tracker) NS-3 开发者会很乐意帮助潜在的代码共享者们,提供 NS-3 仿真器的入门途径(请联系我 们) 我们也意识到,如果您正在读本教程,对 NS-3 项目的共享或许还不在您当前最关 心的事,但是我们希望您知道,“共享”是 NS-3 项目的灵魂。即使是给我们写一个关 于您使用 NS-3 的经验便条(例如:“这个教程的章节条理不够清晰”),通知某些文档 已过时等等,我们将会感激之至。 1.3 教程内容组织 本指南假定新用户可能会顺着以下思路了解 NS-3: 尝试下载和编译 NS-3 尝试运行几个简单的示例程序 查看仿真结果并试图调整仿真 因此,我们将大体按照这个顺序来组织本教程。 2 资源 2.1 网络资源 http://www.nsnam.org/docs/release/tutorial/tutorial_5.html#Resources NS-3 用户有必要知道几个重要的网站: 主站点位于 http://www.nsnam.org, 提供 NS-3 系统的基本信息。 详细文档位于主站 点的 http://www.nsna m.org/doc uments.html. 您也可以从这个网页 上得到系统架构的相关信息。
维基百科网页 http://www.nsnam.org/wiki 可以作为 NS-3 主站点的补充。您可以在 那里找到用户和开发者的 FAQs,以及相关问题的解决途径,第三方的共享代码、论文 等等。 NS-3 的源码可以在 http://code .nsna m.org 找到。读者也可以在名为 ns3-dev 的源码 仓库找到当前的 NS-3 开发树。还有 NS-3 的之前发行版本和最新测试版本的代码。 2.2 源码管理系统 Mercurial 复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。有很 多种方法可以实现这种管理,读者可能已听说过某些版本控制软件,CVS(Concurrent Version System)或许是其中最常见的一个。 NS-3 项目采用 Mercurial 系统作为它的源码管理系统。尽管读者在阅读本教程时 不需要知道太多的 Mercurial 相关知识,但我们建议读者能够熟悉 Mercurial,并用于查 看 NS-3 源码。Mercurial 的网址为 http://www.selenic.com/mercurial/,读者可以从上面获 取到这个软件配置管理系统(Software Configuration management, SCM)的二进制程序和 源码。Mercurial 的开发者 Selenic 提供了一个 Mercurial 教程,网址为 http://www.selenic.com/mercurial/wiki/index.cgi/Tutorial/,以及快速入门指南: http://www.selenic.com/mercurial/wiki/index.cgi/QuickStart/ . 在 NS-3 的主页上,读者也可以获取到有关 Mercurial 和 NS-3 配合使用的最常用信 息。 2.3 编译系统 Waf 读者下载 NS-3 的源码到本地系统之后,需要对源码进行编译来生成可执行程序。 正如源码管理方式多种多样,编译源码也有多种工具。最常用的工具是 make. Make 最 出名的一点:它可能是编译大型和高可配置型系统最难的一种方法。因此,有很多替代 工具被开发出来。最近,大型高可配置系统的编译工具大多选择用 Python 语言来开发。 NS-3 的编译系统采用了 Waf。它是用 Python 开发的新一代编译管理系统。读者不 必掌握 python,即可编译现有的 NS-3 项目。如果读者想要扩展现有的 NS-3 系统,大 多数情况只需了解 Python 知识的很少且非常直观的一个子集。 对于想了解 Waf 细节的读者,可以访问 http://code.google.com/p/waf/ . 2.4 开发环境 正如以上所述,NS-3 的脚本由 C++或者 Python 编写。从 NS-3.2 开始,NS3 的 API 提供了 python 语言接口,但是所有的模块都是由 C++编写的。这里,我们假定读者掌 握 C++知识和了解面向对象的相关概念。我们将在用到一些高级的概念或者读者可能不 熟悉的语言特性、习惯用语或设计模式时适当地花些时间复习它们。但是我们也不希望
本教程变成 C++教程,所以我们希望读者能够掌握基本的 C++命令。在网站上和书籍 中,你可以找到无数的关于 C++知识的信息。 如果读者是个 C++新手,那么您在继续阅读本指南之前可能需要找一些 C++教程 或者网站,至少必须熟悉一下 C++的基本语言特征。例如,Cplusplus 教程。 NS-3 系统开发过程中使用了许多的 GNU 工具链(toolchain)组件。所谓软件的工 具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一下 GNU 工具 链所包含的内容,请浏览 http://en.wikipedia.org/wiki/GNU_toolchain . NS-3 使用 gcc, GNU binutils,以及 gdb. 但是,我们并不使用 GNU 编译系统工具(build system tools), 既不用 make,也不用 autotools,而是使用 Waf 来作为编译管理工具。 Owner 2011-02-27 11:02:05 -------------------------------------------- If you can run g++, then you will be able to run gdb; gdb can only use debugging symbols that are generated by g++; Owner 2011-02-27 11:21:00 -------------------------------------------- cygwin is the simulator of LINUX 通常,NS-3 使用者的工作环境为 Linux 或者类 Linux 系统。对于 Windows 环境, 有几种可以不同程度模拟 Linux 环境的软件,比如 Cygwin。NS-3 支持在 Cygwin 环境 下 的开发。Windows 用户可以浏览 http://www.cygwin.com/ 获取该软件(虽然有许多工程 维 护者使用 MinGW,但是 MinGW 现在还没有得到官方支持)。Cygwin 可以提供许多 流行 的 Linux 系统命令。但是,某些情况下它也会出现问题,因为它毕竟只是 Linux 系 统的 模拟。Cygwin 和 Windows 中其他程序的交互也有可能会导致程序出现问题。 如果读者正在使用 Cygwin 或者 MinGW;并使用着 Logitech 的某些软件产品,我 们或许可以让您少点麻烦:建议您去看一看 MinGW FA Q。 搜索 Logitech 并阅读 FAQ 条目:“为什么当我编译源码时,make 经常崩溃,留下 一个 sh.exe.stackdump 文件”。无论您相信与否,当运行 Logitech 时,Logitech 进程监视 器潜入了每个正在系统中运行的动态连接库(DLL)当中。它可能导致您的 Cygwin 或者 MinGw 的动态连接库奇怪地中止,常常也会阻止调试器的运行。所以当运行 Cygwin 的时候,一定要小心您的 Logitech 软件。 替代 Cygwin 的一种选择是安装虚拟机,比如在 VMware 上安装 Linux 虚拟机。 2.5 套接字编程 我们假定读者对本教程所举例子中的 Berkeley 套接字 API 基本熟悉。如果您不了 解套接字,我们建议您学习一下这些 API 和一些常见的使用例程。TCP/IP Soc kets in C 这本书可以帮助您很好地理解 TCP/IP 套接字。 网站 http://cs.baylor.edu/~donahoo/practical/CSockets/ 包含了 Socket in C 书中所举 例 子的源码。 如果读者理解了该书中的前四章(如果读者没有这本书的话,可以看上面网站中的 源代码),您会更好的理解本教程的内容。这里还有一本关于多播套接字(Multicast Sockets) 的书籍(Multicast Sockets, Makofske and Almeroth)。如果您想学习本书中有关多播的例 子,该书 里面有些资料您可能需要了解。
3 NS3 快速上 手 http://www.nsnam.org/docs/release/tutorial/tutorial_11.html#Getting-Started 3.1 下载 ns-3 从现在起,我们假定读者使用的工作环境为 Linux 或者仿 Linux 环境 (Linux, Cygwin 等等.) 并且已经安装了可用的 GNU 工具链,而且还安装了 Mercurial(分布式版本控制系统)和 Waf 软件。细节已经在 ns-3 网页中详述过, 参见以下链接: http://www.nsnam.org/getting_started.html. ns-3 源码可以在网站 http://code.nsnam.org 上的 Mercurial 源码库下载 到.你也可以从链接 http://www.nsnam.org/releases/处下载一个 tar 格式压缩 包,或者直接使用 Mercurial 从源码库下载。除非有特殊需要,我们推荐使用 Mercurial 从源码库下载。tar 格式压缩包下载,请参见本节最后部分。最简单 的方法就是使用 Mercurial 源码库下载一个 ns-3-allinone 压缩包,此压缩包内 含一套脚本集来管理各种子系统下的 ns-3 下载和安装。我们推荐你使用这个压 缩包来简化你的 ns-3 安装。 3.1.1 使用 Mercurial 下载 ns-3 作为练习,我们首先在 home 目录下建立一个目录并取名为 repos,用来存放 本地 Mercurial 源码库,注意:在本教程随后内容中,我们假定你已经这样做了。 如果使用如下的方法,可以在 Linux 的 shell 中下载到一份 ns-3-allinone 软件 包(假定你已经安装了 Mercurial): cd mkdir repos cd repos hg clone http://code.nsnam.org/ns-3-allinone 当 Mercurail 的 hg 命令执行后,可以看到如下结果: destination directory: ns-3-allinone requesting all changes adding changesets adding manifests adding file changes added 31 changesets with 45 changes to 7 files
7 files updated, 0 files merged, 0 files removed, 0 files unresolved 当 clone 命令运行结束以后,在前述建立的 repos 目录下,会出现一个 ns-3-allinone 目录,而且含有如下文件: build.py* constants.py dist.py* download.py* README util.py 注意:你实际上仅仅下载了一些 Python 脚本,下一步就是利用这些脚本根 据需要下载并来安装 ns-3 软件包。如果你访问如下链接: http://code.nsnam.org/ 就会发现若干源码库,其中很多是 ns3 开发团队专用 的。其中在源码库 org/ 你会发现名为 ns-3.1 的源码库,这是 ns-3 的第一个稳 定版本。还有一些分散的源码库名为 ns-3.1-reftraces,它为 ns-3.1 保留了参 考记录。保持这些文件的一致性是非常重要的,尤其是当你想对源码库做一个回 归测试时。至少做一次测试来验证所有的程序都正确编译了。 当前的开发版 ns-3 的快照存放在 http://code.nsnam.org/ns-3-dev/中; 相关的参考记录存放在链接 http://code.nsnam.org/ns-3-dev-ref-traces/ 中。 ns3 开发人员会尽量保持源码库中的代码处于一致,工作的状态,但是他 们仍在开发中,有一些未发布过的代码。所以如果你不需要最新的特性的话还是 考虑使用发行版。 由于发布版的版本号在变化中,我在指南中还是继续使用通常不变的 ns-3-dev,但是你可以根据自己的需要选择其他的版本,并替换这里的” ns-3-dev”,(例如, ns-3.6 或 ns-3.6-ref-traces),在下文中,你可以通过 访问源码库列表或者访问 ns3 开始网页找到最新的 ns-3 发布版软件。 当你从源码库下载完后,继续切换进入你自己建立的 ns-3-allinone 目录 中。 我们现在使用 download.py 脚本来下载 ns-3 需要使用的各个部件。继续在 你的 shell 中输入以下命令 (如果你想使用任意发行版你可以将 ns-3-dev 替换 为你选择的发行版的名字,例如"ns-3.6" 和"ns-3.6-reftraces")。 ./download.py -n ns-3-dev -r ns-3-dev-ref-traces 注意,-n 选项的默认参数为 ns-3-dev,-r 选项的默认参数为 ns-3-dev-ref-traces,所以上述命令中这两个选项的参数实际上是多余的。我 们使用这个例子来描述如何指定源码库。你只需简单键入如下命令就可以使用默 认参数来下载 ns-3-dev: ./download.py 当 hg (Mercurial)命令执行时,你可以看到如下的信息: # # Get NS-3 # Cloning ns-3 branch => hg clone http://code.nsnam.org/ns-3-dev ns-3-dev
requesting all changes adding changesets adding manifests adding file changes Chapter 3: Getting Started 8 added 4634 changesets with 16500 changes to 1762 files 870 files updated, 0 files merged, 0 files removed, 0 files unresolved 这些输出信息显示下载脚本已经从源码库中下载到了实际的 ns-3 源码,紧 接着,你就会看到这样的信息: # # Get the regression traces # Synchronizing reference traces using Mercurial. => hg clone http://code.nsnam.org/ns-3-dev-ref-traces ns-3- dev-ref-traces requesting all changes adding changesets adding manifests adding file changes added 86 changesets with 1178 changes to 259 files 208 files updated, 0 files merged, 0 files removed, 0 files unresolved 这表明下载脚本为你下载了参考记录文件。下载脚本被设计成自适应的,它 能检测在一些系统平台上某些 ns-3 模块不被支持,在你的系统平台上,你可能 看不到这些系统不支持的源码被下载。然而,在大多数系统平台上这样的过程 会 显示如下: # # Get PyBindGen # Required pybindgen version: 0.10.0.640 Trying to fetch pybindgen; this will fail if no network connection is available. Hit Ctrl-=> bzr checkout -rrevno:640 https://launchpad.net/pybindgen pybindgen Fetch was successful.
分享到:
收藏