NS3中文教程详解(0617163312).pdf
《NS3中文教程详解(0617163312).pdf》由会员分享,可在线阅读,更多相关《NS3中文教程详解(0617163312).pdf(44页珍藏版)》请在三一文库上搜索。
1、. . 一、简介 1. 什么是 NS-3 ? NS 是一个离散事件驱动网络模拟器。官方定义:(from http:/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, develop
2、ment, and use. ns-3 is intended as an eventual replacement for the popular ns-2 simulator. The project acronym “ nsnam ” derives historically from the concatenation of ns (network simulator) and nam (network animator). 2. NS-3 vs NS-2 NS-3虽然冠以一个“ 3”,但事实上跟它广泛流行的前任NS-2并非一脉相承,或者从使用角度 上说, 仅仅继承了一个名称而已。NS
3、-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 寻址策略的 使用、更详细的802.11模块等等。 Latest stable release: ns-3.2.1 (November 20,
4、2008) 4. NS-3的一些名词解释 POSIX :Portable Operating System Interface可移植的操作系统的接口 一组操作系统API 的协议 / 标准族,最开始为了Unix系统上的可移植性而开发的,也适用于其 他操作系统。 Doxygen:Documentation Generator 支持 C+ 、C、Java 、Objective-C、Python、IDL 、Fortran、VHDL 、PHP 、C# 等各种语 言的文档生成器,用于从源代码中生成说明文档。(类似于我之前使用过的Sandcastle,貌似 更加强大些,有必要得学习一下。) . . nam
5、:Network Animator 基于 Tcl/TK的网络动画演示工具,能提供拓扑和包级别的动画以及数据流观察。(参考 http:/www.isi.edu/nsnam/nam/) Mercurial NS-3代码维护使用的源码版本控制管理系统 Waf NS-3项目使用的新一代的基于Python的构建系统(Build System) WireShark 一种 GUI 包嗅探器。由于NS-3能生成 .pcap文件,因此可以使用类似于WireShark的软件 对数据进行分析 tcpdump 另一种包嗅探器。在Linux下使用 CLI 进行数据分析 2 资源 http:/www.nsnam.org/
6、docs/release/tutorial/tutorial_5.html#Resources 2.1 网络资源 NS-3 用户有必要知道几个重要的网站: 主站点位于http:/www.nsnam.org,提供 NS-3 系统的基本信息。 详细文档位于主站点的http:/www.nsnam.org/documents.html. 您也可以从这个网 页上得到系统架构的相关信息。 维基百科网页 http:/www.nsnam.org/wiki可以作为 NS-3 主站点的补充。您可以在 那里找到用户和开发者的FAQs, 以及相关问题的解决途径, 第三方的共享代码、 论文等等。 NS-3 的源码可以在
7、http:/code.nsnam.org找到。读者也可以在名为ns3-dev的 源码仓库找到当前的NS-3 开发树。还有 NS-3 的之前发行版本和最新测试版本 的代码。 2.2 源码管理系统 Mercurial . . 复杂的软件系统需要一种途径,用于管理和组织对现有代码和文档的修改。 有很多种方法可以实现这种管理,读者可能已听说过某些版本控制软件,CVS (Concurrent Version System )或许是其中最常见的一个。 NS-3 项目采用 Mercurial 系统作为它的源码管理系统。 尽管读者在阅读本教 程时不需要知道太多的Mercurial 相关知识,但我们建议读者能够
8、熟悉Mercurial, 并用于查看 NS-3 源码。Mercurial 的网址为 http:/ ,读者可 以从上面获取到这个软件配置管理系统(Software Configuration management, SCM)的二进制程序和源码。 Mercurial 的开发者 Selenic提供了一个 Mercurial 教 程,网址为http:/ http:/ . 在 NS-3 的主页上,读者也可以获取到有关Mercurial 和 NS-3 配合使用的最 常用信息。 2.3 编译系统 Waf 读者下载 NS-3 的源码到本地系统之后,需要对源码进行编译来生成可执行 程序。正如源码管理方式多种多样
9、,编译源码也有多种工具。最常用的工具是 make. Make最出名的一点:它可能是编译大型和高可配置型系统最难的一种方 法。因此,有很多替代工具被开发出来。最近,大型高可配置系统的编译工具大 多选择用 Python语言来开发。 NS-3 的编译系统采用了Waf。它是用 Python 开发的新一代编译管理系统。 读者不必掌握 python,即可编译现有的NS-3 项目。如果读者想要扩展现有的 NS-3 系统,大多数情况只需了解Python知识的很少且非常直观的一个子集。 对于想了解 Waf 细节的读者,可以访问http:/ . 2.4 开发环境 正如以上所述, NS-3 的脚本由 C+或者 Py
10、thon编写。从 NS-3.2 开始,NS3 的 API 提供了 python 语言接口,但是所有的模块都是由C+编写的。这里,我 们假定读者掌握 C+知识和了解面向对象的相关概念。 我们将在用到一些高级的 概念或者读者可能不熟悉的语言特性、习惯用语或设计模式时适当地花些时间复 . . 习它们。但是我们也不希望本教程变成C+教程,所以我们希望读者能够掌握基 本的 C+命令。在网站上和书籍中,你可以找到无数的关于C+知识的信息。 如果读者是个 C+新手, 那么您在继续阅读本指南之前可能需要找一些C+ 教程或者网站,至少必须熟悉一下C+的基本语言特征。例如,Cplusplus 教程。 NS-3 系
11、统开发过程中使用了许多的GNU 工具链(toolchain)组件。所谓软 件的工具链是指在给定环境中可用编程工具的集合。如果读者想要快速地了解一 下 GNU 工具链所包含的内容,请浏览 http:/en.wikipedia.org/wiki/GNU_toolchain . NS-3 使用 gcc,GNU binutils,以及 gdb. 但 是,我们并不使用GNU 编译系统工具( build system tools),既不用 make,也 不用 autotools,而是使用 Waf 来作为编译管理工具。 通常, NS-3 使用者的工作环境为Linux 或者类 Linux 系统。对于 Wind
12、ows 环境,有几种可以不同程度模拟Linux 环境的软件,比如Cygwin。NS-3 支持在 Cygwin 环境下的开发。Windows 用户可以浏览http:/ (虽 然有许多工程维护者使用MinGW ,但是 MinGW 现在还没有得到官方支持)。 Cygwin 可以提供许多流行的Linux 系统命令。但是,某些情况下它也会出现问 题,因为它毕竟只是Linux 系统的模拟。 Cygwin 和 Windows 中其他程序的交互 也有可能会导致程序出现问题。 如果读者正在使用Cygwin 或者 MinGW ;并使用着 Logitech 的某些软件产 品,我们或许可以让您少点麻烦:建议您去看一看
13、MinGW FAQ。 搜索 Logitech 并阅读 FAQ 条目: “为什么当我编译源码时, make经常崩溃, 留下一个 sh.exe.stackdump文件” 。 无论您相信与否,当运行 Logitech 时, Logitech 进程监视器潜入了每个正在系统中运行的动态连接库(DLL) 当中。它可能导致您 的 Cygwin 或者 MinGw 的动态连接库奇怪地中止, 常常也会阻止调试器的运行。 所以当运行 Cygwin 的时候,一定要小心您的Logitech 软件。 替代 Cygwin 的一种选择是安装虚拟机,比如在VMware 上安装 Linux 虚拟 机。 2.5 套接字编程 . .
14、 我们假定读者对本教程所举例子中的Berkeley 套接字 API 基本熟悉。如果 您不了解套接字, 我们建议您学习一下这些API 和一些常见的使用例程。 TCP/IP Sockets in C这本书可以帮助您很好地理解TCP/IP 套接字。 网站http:/cs.baylor.edu/donahoo/practical/CSockets/包含了 Socket in C书中所举例 子的源码。 如果读者理解了该书中的前四章(如果读者没有这本书的话,可以看上面网 站中的源代码 ),您会更好的理解本教程的内容。这里还有一本关于多播套接字 (Multicast Sockets)的书籍(Multicas
15、t Sockets, Makofske and Almeroth)。如果您 想学习本书中有关多播的例子,该书里面有些资料您可能需要了解。 NS3的两个例子 /* -*- Mode:C+; c-file-style:“gnu“; indent-tabs-mode:nil; -*- */ /Emacs模式行, GPL boilerplate #include “ns3/core-module.h“ / #include “ns3/simulator-module.h“ #include “ns3/node-module.h“ #include “ns3/helper-module.h“ / Def
16、ault Network Topology / / 10.1.1.0 / n0 - n1 n2 n3 n4 / point-to-point | | | | / = / LAN 10.1.2.0 using namespace ns3; . . NS_LOG_COMPONENT_DEFINE (“SecondScriptExample“); int main (int argc, char *argv) bool verbose = true; / 定义变量,用于决定是否开启两个UdpApplication的 Logging组 件; 默认 true开启 uint32_t nCsma = 3;
17、/LAN中另有 3 个 node CommandLine cmd; cmd.AddValue (“nCsma“, “Number of “extra“ CSMA nodes/devices“, nCsma); cmd.AddValue (“verbose“, “Tell echo applications to log if true“, verbose); /命令行 参数设置是否开启logging cmd.Parse (argc,argv); if (verbose) LogComponentEnable(“UdpEchoClientApplication“, LOG_LEVEL_INFO)
18、; LogComponentEnable(“UdpEchoServerApplication“, LOG_LEVEL_INFO); nCsma = nCsma = 0 ? 1 : nCsma; / 三目运算符还可以这样写。 /*网络拓扑部分*/ / 创建使用P2P 链路链接的2 个 node NodeContainer p2pNodes; p2pNodes.Create (2); . . / 创建另一个NodeContainer类对象,用于总线(CSMA)网络 NodeContainer csmaNodes; csmaNodes.Add (p2pNodes.Get (1); /将之前 P2P
19、的 NodeContianer的第二个节点( 索 引 1) 添加到 CSMA的 NodeContainer, 以获得 CSMA device;这个 node将会有两个device csmaNodes.Create (nCsma); / 再创建 Bus network上另外的node / 设置传送速率和信道延迟,同first.cc PointToPointHelper pointToPoint; / 注意使用Helper的固定格式: /1/helper对象声明及属性设置; /2/devices对象声明及接收helper对象安装方法的返回列表,安装方法的参数为节点对象! pointToPoint.
20、SetDeviceAttribute (“DataRate“, StringValue (“5Mbps“); pointToPoint.SetChannelAttribute (“Delay“, StringValue (“2ms“); / 安装 P2P 网卡设备到P2P 网络节点,同first.cc NetDeviceContainer p2pDevices; p2pDevices = pointToPoint.Install (p2pNodes); / 类似于 P2PHelper,CsmaHelper帮助创建和连接CSMA 设备及信道 CsmaHelper csma; csma.SetCh
21、annelAttribute (“DataRate“, StringValue (“100Mbps“); / 数据率由 channel属性指定,而非Device属性 ; / 因为 CSMA 不允许同一信道上有多个不同数据率的设备! csma.SetChannelAttribute (“Delay“, TimeValue (NanoSeconds (6560); /speed-of-light delay? NetDeviceContainer csmaDevices; csmaDevices = csma.Install (csmaNodes); / 安装网络协议 InternetStackH
22、elper stack; . . stack.Install (p2pNodes.Get (0); /P2P链路中的第一个节点 stack.Install (csmaNodes); /P2P链路中的第二个节点包含在csmaNodes中 Ipv4AddressHelper address; / 两个网段的IP 地址类对象 address.SetBase (“10.1.1.0“, “255.255.255.0“); /安排 P2P 网段的地址 Ipv4InterfaceContainer p2pInterfaces; p2pInterfaces = address.Assign (p2pDevic
23、es); address.SetBase (“10.1.2.0“, “255.255.255.0“); /安排 CSMA 网段地址 Ipv4InterfaceContainer csmaInterfaces; csmaInterfaces = address.Assign (csmaDevices); /*网络拓扑部分结束*/ /*应用程序部分*/ UdpEchoServerHelper echoServer (9); ApplicationContainer serverApps = echoServer.Install (csmaNodes.Get (nCsma); / 将 Server服
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- NS3 中文 教程 详解 0617163312
链接地址:https://www.31doc.com/p-5595876.html