logo资料库

无线传感器网络ns2仿真软件.pdf

第1页 / 共432页
第2页 / 共432页
第3页 / 共432页
第4页 / 共432页
第5页 / 共432页
第6页 / 共432页
第7页 / 共432页
第8页 / 共432页
资料共432页,剩余部分请下载后查看
第9章 ns中的差异服务模型
9.1概述
9.2应用
9.2.1 DiffServ模型中的RED队列
9.2.2 边际和核心路由器
9.2.3策略
9.3 配置
9.4 命令一瞥
12CN.pdf
第12章 分组头及其格式
12.2 类Packet
22-24.pdf
第22章 对跟踪和监控的支持
22.1对跟踪的支持
22.1.1 Otcl的帮助函数
22.2 对库的支持和示例
22.3 C++的跟踪类
22.4跟踪文件格式
22.5 包类型
22.6队列监测
22.7 Per-flow监测
22.7.1流监测
22.7.2流监测的跟踪格式
22.7.3流的类
22.8 命令一瞥
第23章 对Test Suite的支持
23.1 Test Suite组件
23.2写一个test suite
第24章 单播路由
24.1防真管理的接口
24.2特殊路由的其他配置机制
24.3协议专有配置参数
24.4路由的体系和实质
24.4.1类
24.4.2动态网络和多点传输接口
24.5内部协议
24.6 单播路由对象
24.7命令一瞥
37CN.pdf
Part VII
第37章 会话级包分发
39CN.pdf
Part VIII
仿真
第39章 仿真
39.1 概述
39.2 实时调度器
39.3 Tap Agents
39.4 网络对象
39.4.1 Pcap/BPF Network Objects
39.4.2 IP 网络对象
39.4.3 IP/UDP网络对象
39.5 一个例子
39.6 相关命令
37CN.pdf
Part VII
第37章 会话级包分发
39CN.pdf
Part VIII
仿真
第39章 仿真
39.1 概述
39.2 实时调度器
39.3 Tap Agents
39.4 网络对象
39.4.1 Pcap/BPF Network Objects
39.4.2 IP 网络对象
39.4.3 IP/UDP网络对象
39.5 一个例子
39.6 相关命令
44CN.pdf
第44章
NS和NAM的教学使用
44.1 以教学为目的的NS使用
44.1.1 安装/创建/运行
44.1.2 教学脚本库的网页
42.2以教学为目的的NAM使用
Contents
1 Introduction
2 Getting Started
3 Packet Types
4 The Routing Agent
4.3.1 Constructor
4.3.2 command()
4.3.3 recv()
4.3.4 recv_protoname_pkt()
4.3.5 send_protoname_pkt()
4.3.6 reset_protoname_pkt_timer()
4.3.7 forward_data()
5 The Routing Table
6 Needed Changes
6.1 Packet type declaration
6.2 Tracing support
6.3 Tcl library
6.4 Priority queue
6.5 Makefile
8 Support for Wired-Cum-Wireless Simulations
9 Bibliography
NS 手册(中文版) NS 手册(中文版) NS 手册(中文版)翻译委员会 主编 liguo 编委 跑 咖啡伴侣 海底浮云 满地找牙 卿袅 walker 阿月 宝哥 飘 结
序言 本书主要是翻译 ns manual 上的内容。涵盖了从 ns 的基本架构到各个常用模 块的使用,从 ns 的构件到各种调试追踪的使用。范围应该是相当的广泛。本书 是完全依照 ns manual 英文版进行翻译。对于部分特殊单词,有中英对照。希望 能对 NSer 有一定的帮助。 本书的使用建议,建议将《ns 手册(中文版)》作为浏览和索引使用,由于 译者的水平和精力有限,读者如果遇到具体问题,希望能都根据中文版找到原文 的相应位置,认真阅读英文原文。 NS 是一个相对来说比较复杂的工具,学习 NS 对于一些初学者来说,是痛 苦的,有时甚至是绝望的!但是,经历了这个过程之后,很多人会发现,NS 的 学习其实是痛并快乐着的。虽然你经历了痛苦,但是,你的收获也是巨大的。 NS 的入门就是一座山,其实只要你翻过了这座山,剩下的就只有一履平川了。 这里我要特别感谢 NS 网络模拟论坛,给我们所有 NSers 提供了一个交流, 讨论的平台。有时,或者有些人会抱怨怎么没有人回答我的问题,怎么这里的人 都不热心……其实,我想给这种人一点建议:多看看其他人的帖子,这样做不但 可能找到你的答案,也可以减少版面上很多重复的问题,方便其他人查找。当然, 我们也会尽量回答问题的。还有,问问题的时候一定要具体,其实有很多问题, 不是别人不愿意回答,而是因为问题太模糊,人家根本就看不懂,所以,问问题 一定要清楚,说明你要问的问题,贴出相关代码和报错信息等等。 啰嗦了这这么多,下面也来点儿和这本书有关的东东。这里要感谢我们参 与翻译的十一位同学,在巨大的学习压力(毕业、发论文)下,还抽出宝贵的时 间来无偿的为大家提供服务。他们当中有计算机系和通信系的同学,有本科生、 研究生和博士生。有来自北方和南方的各个高校的。总之,我们这群背景各不相 同的人,为了同一个目标,尽心竭力地为大家提供准确、流畅的《NS 手册(中 文版)》。 下面是翻译委员会各个成员的分工: 跑 咖啡伴侣 海底浮云 满地找牙 卿袅 阿月 宝哥 飘 结 本书的其他部分翻译由麦子的幸福同学友情提供,在此我们向他表示衷诚 挚感谢。 由于本书作者自身水平和时间有限,翻译中可能存在大量不足,希望大家 多多包涵。 最后,推荐一些我觉得比较有用的资料,对于初学者来说比较有参考价值。 3,4,5,6,7,8 20 26,31 40,41 10,13 14,15 37,38,39 18,19 12,13 17,21 44 liguo walker - I -
其中有部分由 without 提供,在此致谢。 liguo 2005 年 7 月 - II -
目录 序言............................................................................................................................... I 第 3 章 OTcl 连接....................................................................................................... 1 第 4 章 类 Simulator................................................................................................. 22 第 5 章 节点和包转发.............................................................................................. 29 第 6 章 链路:简单链路.......................................................................................... 49 第 7 章 队列管理和包调度...................................................................................... 56 第 8 章 延时和链路.................................................................................................. 73 第 9 章 ns 中的差异服务模型................................................................................. 75 第 10 章 代理............................................................................................................ 82 第 11 章 定时器........................................................................................................ 99 第 12 章 分组头及其格式...................................................................................... 103 第 13 章 误差模型...................................................................................................116 第 14 章 局域网...................................................................................................... 121 第 15 章 NS 中(修改的)寻址结构 ................................................................... 130 第 16 章 Mobile networking in ns .......................................................................... 133 第 17 章 NS 中的卫星网络 ................................................................................... 157 第 18 章 无线传播模型.......................................................................................... 175 第 19 章 NS 中的能量模型 ................................................................................... 181 第 20 章 定向扩散.................................................................................................. 183 第 21 章 XCP:显式拥塞控制协议...................................................................... 192 第 22 章 对跟踪和监控的支持.............................................................................. 200 第 23 章 对 Test Suite 的支持................................................................................ 214 第 24 章 单播路由.................................................................................................. 217 第 25 章 组播路由.................................................................................................. 226 第 26 章 ns 编码风格............................................................................................. 237 第 27 章 分级路由.................................................................................................. 243 第 28 章 UDP Agent ............................................................................................... 246 第 29 章 TCP Agent................................................................................................ 248 第 30 章 Agent/SRM .............................................................................................. 257 第 31 章 UDP 代理................................................................................................. 271 第 32 章 应用程序和传输 Agent API.................................................................... 273 第 33 章 作为应用程序的网络缓冲区.................................................................. 281 第 34 章 Session-level packet distribution ............................................................. 297 第 35 章 Emulation................................................................................................. 302 第 36 章 Nam.......................................................................................................... 307 第 37 章 会话级包分发.......................................................................................... 313 第 38 章 Asim:近似的分析的模拟........................................................................ 318 第 39 章 仿真.......................................................................................................... 322 第 40 章 Nam.......................................................................................................... 328 第 41 章 NAM trace ............................................................................................... 332 第 44 章 NS 和 NAM 的教学使用 ........................................................................ 344 - III -
附录一 网络模拟器 NS2 简析 .............................................................................. 348 附录二 开发新(路由)协议整个流程和要点.................................................... 388 - IV -
第三章 OTcl 连接 ns 是一个用 C++编写,并且以 OTcl 为前端的面向对象的模拟器。模拟器支持 C++ 中的类的层次结构(在本文档中我们把这种层次结构叫做编译层次)和 OTcl 解 释器中的类似的层次结构(在文档中我们把这种层次结构叫做解释层次)。这两 种层次密切相关,从用户的脚度,编译层次的类和解释层次的类是一一对应的。 (在解释层次中,)类 TclObject 是基类。用户通过解释器创建一个新的模拟对象; 这些对象首先在解释器中被实例化;然后在编译层次中同样镜像一个相应的对 象。接着解释类层次通过类 TclClass 中定义的方法自动建立, 用户则是通过 TclClass 类中定义的方法镜像这些实例化对象。当然 C++和 OTcl 中的其他层次 结构还是存在的,这些其他的层次是不会被 TclObject 镜像的。 3.1 概念综述 为何使用两种语言?因为模拟所需要做的有两种不同类型的事情。一方面,细节 性的模拟协议,这需要一种系统的编程语言,这种语言可以有效的控制字节,包 头和实现使用大规模数据的算法。对于这些任务,执行时的速度非常重要,但是 转化时的速度(如,执行模拟,找错,修正错误,重编译,重新执行)相对而言 并不重要。 但另一方面,大部分网络研究都是只有对于参数、配置或者快速搜索大量场景都 只有微小的变化。针对这些方面,重复的时间(改变模式和重执行)变得更加重 要。因此配置只设置一次(在模拟开始的时候),执行这部分的工作变得不太要 紧。 ns 使用 C++和 OTcl 同时满足了这两种需求。C++能够快速执行但是难于变化,; 这一性质使得其适合于;具体协议的实现。OTcl 执行比较慢但是可以迅速的变 化(甚至是交互式的),这一性质使得其成为模拟配置的理想对象。ns(通过 tclcl) 提供了将两种语言的对象和变量同时出现的纽带。 如果需要更多关于脚本语言和分裂语言编程的信息,请参考 IEEE Computer[26] 上 Outerhout 的文章。关于更多网络模拟分裂编程的信息,参考 ns paper[12] 两种语言分别何时使用?使用两种语言我们将面对不同语言使用在不同场合的 问题 1
我们基本的建议是:OTcl 适用于: 配置、安装和一次性的工作 如果你能够使用已有的 C++对象做你所希望的 C++适用于: 如果你做的是需要流中每个包都运行的工作 如果你不得不改变了 C++中已有的类,使他们不可预测 例如,链接是 OTcl 对象,他集合了延迟,排队和可能的丢失模型。如果仅仅使 用这些,可以使你的实验成功,那当然最好。但是如果你想做得更实际点(需要 一种特殊的排队策略和模型),你就需要新的 C++对象了。 显然这里存在灰色区域:大多数路有在 OTcl 中实现(虽然核心 Dijkstra 算法是 在 C++中实现的)。同时,我们模拟 HTTP 时,让所有数据流在 OTcl 中实现,而 所有的包处理却在 C++中。除非在模拟时间内每秒有 100 个数据流,不然这种方 法是可行的。总的来说,如果我们需要在每秒钟调用许多次 Tcl,那最好还是将 这些代码移植入 C++代码中。 3.2 代码综述 在这个文档里面,我们用名词解释器(interpreter)表示 OTcl 里面的解释器。解 释器接口代码在单独的目录:tclcl。其他的仿真代码在目录:ns-2。我们将用符 号~tclcl/来表示在 tcl 目录的一个特定的,同样的,我们将用符号 ~ns/来表示 ns-2 目录下一个特定的。 在~tclcl 里面定义了很多类。我们只着重讲述在 ns 中使用的 6 个类:Tcl 类(在 3。3 节),它包含 c++代码将要用来访问解释器的方法;TclObject 类(sec 3.4) 是所有模拟器对象的基类。这些对象在编译层次也有对应;TclClass 类(section3。 5 ) 定 义 了 被 解 释 类 的 层 次 , 以 及 允 许 用 户 实 例 化 TclObject 的 方 法 ; 类 TclCommand(section3.6)用来定义简单的全局解释器命令。类 EmbeddedTcl (section3。7)含有装载高层次内建命令的方法,这些命令使得仿真的配置更加 容易。最后,类 InstVar(section3.8)含有访问 c++成员变量作为 otcl 瞬时变量 的方法。 本章介绍的过程与函数可以在~tclcl/tcl.{cc,h},~tclcl/tcl2.cc,~tclcl/tcl-object.tcl, 和~tclcl/tracedvar.{cc,h}找到。文件~tclcl/tcl2c++.c 用来建立 ns,而且在本章有简 略的介绍。 2
3.3 类 Tcl Tcl 类 封装 OTcl 解释器的真正的实例,并提供与解释器访问和交流的方法,本节 描述的方法和用 c++代码的 ns 程序员相关,该类提供了以下操作方法. 获得 tcl 实例的一个指针 通过解释器激活 OTcl 过程 追踪和将结果返回解释器 报告错误状态并退出统一的状态 存储并查找”TclObject” 获得对解释器的直接访问 在下面各小节中,我们分别介绍各种方法 3.3.1 获取类 Tcl 的实例的指针(reference) 一个简单的类的实例被作为一个静态成员变量,在~tclcl/Tcl.cc 中声明;而程序 员必须获取一个这个实例的指针去访问这个部分描述的其他方法。这种访问这个 实例的(命令形式的)描述为: Tcl& tcl = Tcl::instance(); 3.3.2 激活 OTcl 过程 通过 Tcl 实例,一共有四种方式可以激活一个 OTcl 命令。从他们使用参数的方 面来说,有本质的不同。每个函数都传递一个字符串给解释器,然后解释器通过 一个全局文本来识别这个字符串。如果解释器返回一个 TCL_OK,则这些函数将 会返回一个相应 OTcl 过程,如果解释器返回一个 TCL_ERROR,则函数调用 tkerror()。用户可以重载这个过程,让它;忽略某些种类的错误。OTcl 编程的 复杂过程属于本文件讨论范围之外。下一小节(3.3.3)将描述获取解释器返回结 果的方法。 tcl.eval(char* s)调用 Tcl_GlobalEval(),通过解释器执行 s。 tcl.evalc(const char* s)保存字符串参数 s。它将字符串 s 复制到中间 缓冲区; 然后再在中间缓冲区里面调用前面的 eval(char* s)。 tcl.eval()假设命令已经存在于类 internal bp_;它直接调用 tcl.eval(char* bp_).缓冲区自己的指针可以通过方法 tcl.buffer(void)获得。 tcl.evalf(const char* s,.....)是一个类似于的 Printf(3)。它在内部使用 vsprintf(3)来创建输入字符串。 3
分享到:
收藏