NS2 中TCP 源代码分析 1:NS2 简介 NS2是一个开放源码的多协议网络模拟软件,来源于1989年的Real Network Simulator项目,经过多年的发展,于1995年得到施乐公司(Xerox)的支持,加入VINT项目。NS2一直以来都在吸收世界各地研究者的成果,包括UCB、CMU等大学和 SUN等公司的无线网络方面的代码,因此 NS2一直都在不断的被更新和完善。NS2是一个面向对象的、离散事件驱动的网络环境模拟工具,可以完整地模拟整个网络环境。 NS2使用一整套 C++类库实现了绝大多数常见的网络协议以及链路层的模型,如:有线网络或无线网络的TCP、UDP、路由、多播等多种协议模型,利用这些类库的实例就可以搭建起整个网络的模型,而且包括详尽的细节实现。NS2使用了两种编程语言,OTcl(具有面向对象特性的Tcl脚本程序设计语言)和 C++,NS2采用这两种语言是因为仿真工具有两方面的事情要做:一方面,具体协议的模拟和实现,这需要一种能高效率的处理字节、报头等信息的程序设计语言,即对运行速度非常重要,而运行模拟环境的时间、寻找和修复 Bug的时间,以及重新编译和运行的时间不是很重要,在这种情况下,C++语言是非常合适的;另一方面,许多网络中的实验或研究工作主要是围绕着网络组件和环境的具体参数的设置和改变而进行的,需要在短时间内快速的开发或模拟出所需要的网络环境,并且方便的修改和发现,在这种情况下,网络环境设置的时间就显得重要了,而脚本语言在这方面有很大的优势,具有面向对象特性的Tcl脚本语言可以充分的满足此需求。C++和 OTcl两种语言的对象和变量是通过TclCL关联起来的,C++的类和对象为编译类和编译对象,相反地OTcl的类和对象为解释类和解释对象,TclCL是在OTcl基础上的封装。通过下面的NS2架构图来理解几者之间的关系。对 NS2使用者来说,OTcl脚本语言用于实现网络拓扑部分,OTcl是架构在Tcl之上的面向对象后的延伸,事件调度器和网络组件这两部分主要用 C++编写。 C++在最底层则是表示 NS2的核心主要就是C++。TclCL是连接 OTcl和 C++的桥梁,最后搭配用户接口就构成了 NS2。 2:NS2 中TCP 源码分析 在源码包中,TCP源码放置在ns-allinone-2.29\tcp文件夹里。打开tcp.cc #include #include #include #include "ip.h" #include "tcp.h" #include "flags.h" #include "random.h" #include "basetrace.h" #include "hdr_qs.h" int hdr_tcp::offset_;...