NS2 中 TCP 源代码分析 1: NS2 简介 NS2 是一个开放源码的多协议网络模拟软件,来源于 1989 年的 work 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. 35\tcp 文件夹里。打开 #include <> #include <> #include <sys/> #include "" #include "" #include "" #include "" #include "" #include "" int hdr_tcp::offset_; static class TCPHeaderClass :public PacketHeaderClass { public: TCPHeaderClass() :PacketHeaderClass("PacketHeader/TCP", sizeof(hdr_tcp)) { bind_offset(&hdr_tcp::offset_); }}class_tcphdr; static class TcpClass :public TclClass { public: //存储类名 Agent/TCP 至classname_ TcpClass() :TclClass("Agent/TCP") {} TclObject* create(int ,const char*const*) { return (new TcpAgent()); }}class_tcp; TcpAgent::TcpAgent() :Agent(PT_TCP), t_seqno_(0), t_rtt_(0), t_srtt_(0), t_rttvar_(0), t_backoff_(0), ts_peer_(0), ts_echo_(0), tss(NULL), tss_size_(100), rtx_timer_(this), delsnd_timer_(this), burstsnd_timer_(this), dupacks_(0), curseq_(0), highest_ack_(0), cwnd_(0), ssthresh_(0), maxseq_(0), count_(0), rtt_active_(0), rtt_seq_(-1), rtt_ts_(), lastreset_(0
大作业 NS中TCP源代码分析 来自淘豆网m.daumloan.com转载请标明出处.