毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 论文 >> 正文

计算机防火墙论文 第9页

更新时间:2008-4-19:  来源:毕业论文

计算机防火墙论文 第9页

scheduler就可以了。Scheduler的主要功能是处理分组(pack)的延迟和充当定时器。一个scheduler的执行过程是这样的;从所有事件中选择发生时刻最早的事件,调用它的handler函数,把该事件执行完毕,然后在剩余事件中选择发生时刻最早的事件执行,如此反复。NS 仿真器是单线程的,在任何给定的时刻它只能运行一个事件,如果多于一个事件要在同一时刻执行,它们的执行将按照事件代码插入的先后次序执行。

下面简单介绍一下这3个非实时的事件调度器。链表结构中按照时间先后顺序保存事件目录,通过查表方式插入和删除事件,通常用于FIFO 方式的仿真事件仿真中。在多事件应用中,堆栈结构优于链表结构,例如n 个事件的插入删除次数是O(logn) Calendar 队列类似一个全年的日历,年份不同但日月相同的事件可记录在一年的同一天中;它的执行效率更高,因此是目前NS中缺省的非实时事件调度器。

实时的事件调度器(Scheduler/RealTime类)尽可能使得事件的执行和真实的时间同步。目前它是用list Scheduler的一个子类实现的。NS该功能还在开发中,它能把一个NS的仿真网络引入到真实世界的拓扑中,但它只能在较慢的数据传输速率下工作。因为仿真器必须要能跟的上真实网络中的数据速率。

2)事件

一个事件通常由触发时间(firing time)和Handler函数组成,Event类的定义如下(参考源文件ns/common/ Scheduler.h):

class Event {

public:

      Event* next_;              /* 指向下一个需要被Scheduler执行的事件 */

      Handler* handler_;      /* 事件触发后Scheduler会调用handler_指向的函数*/

      double time_;        /* 事件的触发时间 */

      scheduler_uid_t uid_;   /* 事件编号 */

      Event() : time_(0), uid_(0) {}

};

class Handler {

 public:

      virtual void handle(Event* event) = 0;

};

与本节相关的Tcl命令:

Ø      set ns [new Simulator]#建立仿真对象的一个实例

Ø      $ns halt            #停止或暂停scheduler

Ø      $ns run            #开始scheduler

Ø      $ns at <time> <event>#<time>时刻执行<event>

$ns use-scheduler Heap; #NS使用heap结构的事件调度器

3 、 节点

节点是ns最重要的模块,它主要的部件是分类器(classifier类)。节点也是一个由OTcl实现的解释类,也没有相应的编译对象。有关节点的函数可以在文件目录ns/tcl/lib下的文件ns-nodes.tcl, ns-rtmodule.tclns目录下的rtmodule.{cc,h} classifier.{cc,h}classifier-addr.ccclassifier-mcast.ccclassifiermpath.cc,replicator.cc文件中找到。

当一个节点收到一个分组时,节点就需要检查分组的某些域(fields) ,通常是检查分组的目的地址,某些场合是源地址。然后就需要寻找与这个域的值相匹配的接收者。在NS中,这个工作是由一个简单的classifier对象执行的,NS中有各种不同的classifier对象,分别负责检查分组的不同部分,来完成不同的匹配和筛选工作。因此NS中的节点为了不同的目的会使用许多不同类型的classifiers类。

由以下Otcl代码可以得到一个节点:

set ns [new Simulator]

$ns node

缺省状况下,node为单播节点。要想得到多播节点需要加入参数“-multicast on”,如: set ns [new Simulator -multicast on]

节点的组分:分类器(Classifier

node接收到一个包后,要检查特定的域,通常是目的地址(还有可能是源地址),决定如何处理这个包,如果是转发,则还要决定转发到哪里。这项任务由分类器对象来完成,不同类型的分类器对象分别负责检查分组的不同部分,以决定如何转发。

NS中共有五种分类器:baseaddressmulticastmultipathreplicator

(1)      base基类分类器(在文件ns/classifier.h定义)是一虚基类:

每一分类器带一指针,指向一张slot表,这张slot表记录TclObject对象与槽号的对应关系。分类器的工作是判断哪个槽号与接收到的数据包相关,然后将包转发给相应的TclObject类对象。

它用方法recv()接收一个包,交给另一方法classify()处理。不同类型的分类器定义了不同的classify()方法。通常的格式是,classify()返回槽下标,若此下标有效,指向一个有效的TclObject对象,则classifier将数据包转发给这个对象,而该对象用自己的recv()方法接收,若下标无效,分类器调用实例过程no-slot{}。基类的no-slot{}仅是输出出错信息,中止执行。

command()方法还提供了以下的命令:

_ clear{ (slot) } :清空slot表。

_ installNext{object}:将对象装入下一槽中,返回槽的号码。

_ slot{(index)}:返回指定的槽的对象。

_ install{_ index_ , _ object_ }:将指定的对象装入指定的槽中。

(2)      address classifier(ns/classifier-addr.cc中定义)

其功能是按照分组的目的地址进行匹配,用来支持单播分组转发。它通过对分组的目的地址作位移和掩码运算来产生一个slot表,从而将包的目的地址转化成槽的号码。

(3)      multicast classifier(ns/classifier-mcast.cc中定义)

保持一个哈希链表来匹配地址对和取到槽的号码。如为未知地址对,则用Node::new-group{}加入表中。

(4)      multipath classifier(在ns/classifier-mpath.cc中定义):支持等价多路转发。

(5)      hash classifier:使用哈希表,将包分发给

(6)      replicator

replicator与普通的classifier不同,它不使用classify()函数,它的作用是生成一个分组的多个拷贝,并把这些拷贝转发给slot表中的所有对象。在组播分组转发时,一个分组需要被转发给多个目标对象,这个工作就是由replicator完成的。

与本节相关的Tcl命令有:

Ø      set $node [$ns node]#建立一个节点实例

Ø      $ns id#返回该节点id

Ø      $node neighbors#返回邻居节点列表

Ø      $node add-neighbor <neighbor_node>#增加一个邻居节点(注意:这是单向的邻居

Ø      $node node-addr#返回节点的地址

Ø      $node reset#重置连到这个node上的所有agent

Ø      $node agent <port_num>#返回port_num端口所指向的agent对象,如果port_num端口没有指向任何对象,返回null字符串。

Ø      $node attach <agent> <optional:port_num>#agent对象连接到节点上,如果没有指定端口号,节点会自己分配一个空闲的端口,并把agent连接到该端口上;如果指定端口为port_num,节点就会连接到端口port_num

$node detach <agent> <null_agent>#agent与节点分离,并把一个null_agent连接到agent原来所在的端口上

4  链路

这是继节点后的拓扑定义阶段。NS支持节点的简单连接,多通路 LAN的简单连接,无线和广播通讯媒体的连接。Link 类是Otcl的类中独立的一个类。SimpleLink 类提供两个结点之间的点到点连接的能力。

下面的Otcl语句创建了一条简单的连接

set ns [new Simulator]

$ns simplex-link <node0> <node1> <bandwidth> <delay> <queue_type>

函数创建了一条从node0node1的链,指定了带宽、延迟和使用的队列类型。同时还创建了ttl值。

每条链有五个实例变量

Ø      head_ 链的入口,指向链中的一个对象;

Ø      queue_ 指向链的主要队列元素,一条链可以拥有一个或几个队列;

Ø      link_ 指向由带宽、延迟等特性指定的链。

Ø      ttl_ 指向完成ttl计算的对象该对象由C++的类TTLChecker实现的,TTLChecker类的recv()函数会对分组的ttl值作判断,如果ttl小于0,则丢弃该分组,否则调用send()函数将分组递交给target_

Ø      drophead_ 指向处理分组丢弃功能的对象。

链路的构造图如图2.6所示:若图片无法显示请联系QQ752018766

上一页  [1] [2] [3] [4] [5] [6] [7] [8] [9] [10]  ... 下一页  >> 

计算机防火墙论文 第9页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。