分类: LINUX
2008-05-08 10:56:45
对于如何验证网络协议的正确性和进行相关性能测试,人们提出了很多方法,目前最广泛使用的方法就是通过虚拟环境进行模拟仿真。NS-2是进行网络仿真最流行的软件,已广泛被科研院所和各大高校用于进行网络分析、研究和教学。它支持众多的协议,并提供了丰富的测试脚本。
NS-2全称是Network Simulator Version 2。它是面向对象的,离散事件驱动的网络环境模拟器,主要用于解决网络研究方面的问题。NS-2提供在无线或有线网络上,TCP、路由、多播等多种协议的模拟。
NS-2最早来源与1989年的Real Network Simulator项目,经过多年的发展之后,于1995年得到施乐公司(Xerox)的支持,加入VINT项目。NS一直以来都在吸收全世界各地研究者 的成果,包括UCB、CMU等大学和SUN等公司的无线网络方面的代码。
NS-2由两种编程语言,OTCL(具有面向对象特性的TCL脚本程序设计语言) 和C++实现。之所以使用两种编程语言,是因为模拟器有两方面的事情需要做。一方面,具体协议的模拟和实现,需要一种程序设计语言,能够高效率的处理字节 (Byte),报头(Packet Header)等信息,能够应用合适的算法在大量的数据集合上进行操作。为了实现这个任务,程序内部模块的运行速度(run-time speed)是非常重要的,而运行模拟环境的时间、寻找和修复bug的时间,重新编译和运行的时间(run-around time)不是很重要。这种情况下,C++语言是非常合适的。
另一方面,许多网络中的研究工作都围绕着网络组件和环境的具体参数的设置和改变而 进行的,需要在短时间内快速的开发和模拟出所需要的网络环境(scenarios),并且方便修改和发现、修复程序中的Bug。在这种任务中,网络环境布 置的时间就显得很重要了,因为模拟环境的建立和参数信息的配置只需要运行一次。这种情况下,脚本语言有很大优势,具有面向对象特性的TCL脚本语言可以充 分满足需求。NS-2的内部类结构如图1所示。
NS-2中节点的结构与实际环境中的网络节点非常相似,如图2所示。对于一个网络节点来说, 有IP地址和端口号,这对应的就是图中的地址分类器(Address Classifier)和端口分类器(Port Classifier)。当TCP数据包从节点入口处(Node Entry)进来节点之后,首先在地址分类器处通过IP包头判断IP地址是否与本节点相同,如果相同则进入端口分类器,通过TCP包头获得数据包的目的端 口,并把数据包发送到节点相应的端口进行处理;如果在地址分类器处发现数据包的目的IP地址与本节点不同,就将数据包重新发送进入链路,以供其他节点处 理。
总之,NS-2为我们提供了一个很好的试验平台。它使用两种语言,C++有利于快速的运行速度;TCL则有利于快速建立试验环境。NS-2中的实体结构也非常清晰,有利于构建新的网络协议和网络实体。