NS2 与 Otcl/tcl 脚本基础指南

仿真“通过实践来学习” 的过程。每当世界上出现新事物时,我们总是先尝试通过观察来分析它,并在此过程中学到很多东西。这整个过程就被称为 仿真

与此过程相关联,为了理解所有的复杂性,我们需要将整个角色扮演以计算机仿真的形式进行建模,这就需要构建人工对象并动态地给它们分配角色。

计算机仿真是在数字计算机上设计理论物理系统的过程,重点在于模型设计、执行和分析。在创建数学模型之后,最重要的一步是创建一个计算机程序,通过时间(通过时间片或事件调度)来更新状态和事件变量。如果这种仿真连续地在并行计算机上进行,则称为 并行分布式仿真

网络仿真(NS)是仿真的一种类型,用于模拟网络,例如 MANETs、VANETs 等。它为有线和无线网络的路由和组播协议提供仿真支持。NS 获得了 GNU(通用公共许可证)第 2 版的许可,通常被称为 NS2。它是一个面向对象的、离散事件驱动的仿真器,使用 C++ 和 Otcl/Tcl 编写。

NS-2 可用于实现网络协议(如 TCP 和 UDP)、流量源行为(如 FTP、Telnet、Web、CBR 和 VBR)、路由器队列管理机制(如 Drop Tail、RED 和 CBQ)、路由算法等等。在 ns2 中,C++ 用于详细的协议实现,而 Otcl 用于设置。编译后的 C++ 对象对 Otcl 解释器可见,通过这种方式,可以在 OTcl 层面控制现成的 C++ 对象。

使用以下命令安装 NS-2:

sudo apt-get install ns2

还需要安装 Nam。Nam(Network Animator)是一个动画工具,用于以图形方式表示网络和数据包跟踪。使用以下命令:

sudo apt-get install nam

一些基本的 Otcl 脚本语法:
基本命令:

Python


CODEBLOCK_54f5b23e

解释: 在第一行中,变量 a 被赋值为 8。在第二行中,命令 [expr $a/8] 的结果(等于 1)被用作另一个命令的参数,该命令随后将值赋给变量 b。 “$” 符号用于获取变量中包含的值,方括号表示命令替换。
使用 proc 命令定义新过程

Python


CODEBLOCK_5f9878af

打开文件进行读取:

Python


CODEBLOCK_ca4a8845

同样,put 命令用于将数据写入文件

Python


CODEBLOCK_ff7f7735

要在另一个进程内调用子进程,可以使用 exec,它会创建一个子进程并等待其完成。

Python


CODEBLOCK_ad7d1ab2

为了能够运行仿真场景,必须首先创建网络拓扑。在 ns2 中,拓扑由节点和链路的集合组成。

Python


CODEBLOCK_ea7820c4

仿真器对象具有成员函数,这些函数能够创建节点并定义节点之间的链路。Simulator 类包含所有基本功能。由于 ns 被定义为处理 Simulator 对象,因此命令 $ns 用于属于仿真器类的函数。

在网络拓扑中,可以通过以下方式添加节点:

Python


CODEBLOCK_4a3741d7

如果节点不是路由器,则必须设置流量代理(TCP、UDP 等)和流量源(FTP、CBR 等)。这使得我们可以创建使用 UDP 作为传输协议的 CBR 流量源,或使用 TCP 作为传输协议的 FTP 流量源。

使用 UDP 的 CBR 流量源:

Python


CODEBLOCK_5a4fae85

使用 TCP 的 FTP 流量源:

Python


CODEBLOCK_d5e8d9e5

下面是使用 FTP 和 TCP 在源和目的地之间创建链路的实现:

Python


Create a simulator object

set ns [new Simulator]

Define different colors

for data flows (for NAM)

$ns color 1 Blue

$ns color 2 Red

Open the NAM trace file

set nf [open out.nam w]

$ns namtrace-all $nf

Define a ‘finish‘ procedure

proc finish {} {

global ns nf

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/21591.html
点赞
0.00 平均评分 (0% 分数) - 0