NS2初学笔记(二)之 ns2基本结构与交互问题

下面对前两个问题解释以下:

1ns2是一个软件系统,只是用来模拟网络功能的,不可能也没有必要按照实际网络模型来设计ns2的架构,但是ns2为了模拟的需要也是面向对象程序设计的需要,它的代码结构本身就是一种分层结构(各个类之间的继承关系)。所以,当我们理解ns2的代码结构时不要将其同TCP/IP进行匹配,而应该将其理解为一种软件设计时产生的必然结果。让我们了解一下ns2的基本代码结构,这样在我们开发自己的协议时我们才能知道该用ns2的哪一个部件实现什么功能。最基本的类是TCLObjectHandler(貌似这两个类在开发时没什么用,不过是提供一个所有类的基类罢了),NsObject类的作用就是为了以后编写代码方便(我是这么觉得的,因为c++是提供多继承关系的),再往下就是ConnectorClassifier,这两个类是最重要的两个类了,他们的区别形象的说就是Connector是一进一出,而Classifier可以一进多出,他们都有自己的recv方法用来接受分组(就是数据包)。当然这两个类也是为了以后开发而抽象出来的,我觉得模拟系统就是在模拟接受和发送数据(包),只不过接受和发送的方法不同而已,以后需要发送和接受数据的类一定要继承这两个类,并且实现他们自己的方法(比如路由等),再下一层重要的类就是Agent类了,顾名思义就是代理各种网络功能的——产生数据包、选择通路等。这里要说一下,既然ConnectorClassifier都可以收发数据,那为什么还有有Agent类呢,其实我觉得Agent类(继承Connector)主要负责的是逻辑上的包的下一个地址的选择,而真正发送的却是Classifier实现的功能,这样可以保持程序的耦合性,更利于以后的设计(这方面可以参考AODV算法的具体代码)。通过以上的说明我想大家都应该知道阅读ns2代码的大体方向了,就是自底向上的方法。当然ns2的实际结构是非常的复杂,但是我上面所说的应该是一个主线(当然还有一条我就的就是ns2对各种事件的处理机制),抓住这个主线向外扩展可以事半功倍的。

 

2 ns2 通过一个 Tcl 解释器来解释用户命令,应该说是前台( Tcl 解释器)解释,后台( c++ 对象集)解析。那么解释和解析有什么不同呢? Tcl 作为一种脚本语言就是,它提供一个 Shell (就是一个交互控制台),用户通过输入各种命令来为 Tcl 解释器提供素材,比方说用户想创建一个解释器,那么 Shell 的到创建解释器的命令,然后通过 Tcl 解释器解释得到创建解释器的请求,如果这样就创建了一个模拟器,那么也就没有后台什么事了,也就没有什么解析的概念了,所谓后台解析,就是 ns2 的设计精巧之处,它通过 Tcl 解释器的到命令并没有完事,还要将其中的网络模拟逻辑命令传给 c++ 对象,让 c++ 对象对该命令进行处理,然后产生各种的结果。这就是 ns2 的分裂对象设计所得到的软件架构。这样作有什么好处呢,其实这样作就好比网站设计中标记语言和脚本语言负责显示逻辑而高级面向对象语言负责后台逻辑一个道理——可以提高程序的使用效率(试想一下,用户使用模拟器的过程中同模拟器的交互是多么的频繁,如果没提交一次方案就进行一次 c++ 程序的编译,那样效率会如何的底下,想都不敢想)。我这只是大体的说了一下,具体的还要通过使用慢慢体会 ns2 的这种程序设计方法,这是很值得借鉴的一种方法。

你可能感兴趣的:(ns2)