NS2学习笔记1:NS开发架构与C++的开发方法

来源:互联网 发布:康德判断力批判 知乎 编辑:程序博客网 时间:2024/05/22 00:09

      新手,学习ns2,争取把原理搞懂。目前还只能做知识的搬运工,加工整理,尽量做到每一个问题的清晰溯源。

       1.为什么采用两种语言来编写?

      以下一段转自[译] NS2中OTcl 和C++ 的连接 (一),看来还是老外写的书比较深入透彻。三种方式来开发C++程序,这才是真正的答案好不好,至于c++运行快,tcl解释语言修改快只是更表层的原因。
      理论上说,我们有三种方式来开发C++程序。第一种称为“BasicC++”,是三种方法中最简单的一种,只包括基本的C++结构。这种方式存在灵活性问题,因为系统中任何参数的改变都需要重新编译。着眼于灵活性问题,第二种方法称为“C++coding with inputarguments”带有输入参数的C++程序。当系统参数发生变化,我们只需简单的改变输入参数而不需要重新编译。但是,第二种方式的重要问题是:当输入参数很多时,调用命令会相当长且复杂。第三种方式称为“C++coding with configuration files“-把所有的系统参数写入配置文件。这种方式解决了灵活性问题和复杂的调用问题。需要改变系统参数时,只需简单的改变配置文件。事实上,NS2正式基于这种方式开发的。

     2.ns2概述

     这些在大部分书籍和ns2相关博客(包括上面那个转的博客)里都能看到,我用自己的理解总结了下。

     ns是一个面向对象的离散事件驱动的网络模拟器,所有构件已编写成相应的c++类和octl对象。
     c++被称为编译类对象,是算法和协议的具体实现代码,OTcl对象又被称为解释对象,在模拟时用户编写模拟脚本主要就是建立octl对象,设置其属性,然后通过事件调度器调度网络模拟事件的发生。
     ns网络构件的层次结构还是比较复杂的,时间调度器和网络组件主要是用c++来完成,网络模拟常用的网络构件有节点、链路、代理、应用、队列、跟踪对象等,这些编译过的对象,通过在OTcl中为每个c++对象创建相应的octl有对象来一一对应,同时创建c++的控制函数和配置变量作为对应的OTcl对象中的成员函数和成员变量。用这种方法c++对象的控制就交给了OTcl。可以通过增加c++对象的成员函数和变量来和OTcl进行连接,那些不需要在模拟器中控制的c++的对象或者有内部另一个对象调用的c++对象是不需要和OTcl连接的。
     当一个模拟完成之后ns二产生一个后或者多个文本输出文件,这些文件中包括详细的模拟数据这些数据可以用模拟分析工具或者图形化显示工具来进行分析。

 

0 0
原创粉丝点击