本文先设计一个6个节点的网络仿真模型,重点研究了TCP协议的拥塞避免机制及Slow-start策略,分析验证不同TCP版本的拥塞控制算法对传输性能的影响。然后用Nam工具仿真实现了拥塞控制的动画,并用Gnuplot绘制了拥塞窗口的变化趋势仿真图。其次本文设计了一个发送端20个节点的网络拓扑仿真模型,仿真分析不同队列管理算法以及RTT时网络的丢包率、吞吐量、端到端延时以及拥塞窗口变化等结果,从而研究其对网络性能的影响,更加形象地验证了TCP协议对于保障数据可靠传输策略的有效性。
1.1 TCP协议
传输控制协议TCP是TCP/IP协议栈中的传输层协议,它提供可靠的数据流发送和连接到应用程序的虚拟服务是通过序列确认以及包重发机制实现的。TCP与IP协议相结合组成了因特网协议的核心。
TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。关于流数据传输,TCP交付一个无结构的字节流,只是由序列号定义。在送出到TCP之前应用程序不必将数据划分成块,TCP可以将字节整合成字段,然后传给IP进行发送,因此这个服务对应用程序有利。
TCP保证可靠性是通过面向连接的、端到端的可靠数据报发送来实现的。TCP通过在字节上加上一个递进的确认序列号来告诉接收者发送者期望收到的下一个字节。
如果在规定时间内没有收到这个包的确认响应,则会重新发送此包。TCP的可靠机制允许设备处理丢失、延时、重复及读错的包。超时机制允许设备监测丢失包并请求重发。
TCP提供了有效流控制。当返回确认响应给发送者时,接收TCP进程就会说明它能在保证缓存不会发生溢出的最高序列号同时接收。
1.2 影响TCP性能的因素
有很多可能影响TCP性能的因素存在于实际的网络中,如:往返时间Round-Trip Times(RTT): TCP传输往返时间是指发送端从发送TCP包开始到接收到它的立即响应所耗费的传输时间。当同时有许多TCP Connections共享相同的Link时,由于RTT较短的Connections闲置时(等待确认报文ACK开启Congestion Window)可以更快的取得Link上的可用频宽,因此与RTT时间较长的 TCP Connections比较起来拥有较好的数据传输效果。其他影响TCP性能的因素包括Timer Granularity,Slow-start Threshold(Ssthresh),以及传送到封包大小网络的队列管理机制网络是否对TCP提供支持、有线/无线的环境等。
1.3 NS的原理和结构
NS是于1989年由UC Berkeley开发的Real网络仿真器,主要用于对各种IP网络的仿真。NS2是一种针对网络技术的源代码公开的免费的软件仿真平台,该软件最初是针对基于Unix系统下的网络设计和仿真而进行的,使用它可以很容易地开发网络技术,而且发展到今天它已经包含了非常丰富的模块,基本涉及到网络技术的各个方面,所以NS2是目前在学术界中广泛使用的一种网络仿真软件。
NS的总体体系结构主要由以下组件构成:tcl/tk,Otcl,NS,tclcl等。其中tcl是NS的编程语言,是一个开放式脚本语言。tk是tcl的图形界面开发工具。Otcl具有面向对象语言的基本特征,是基于tcl/tk面向对象的扩展;NS是仿真的主要组件,它以Otcl解释器为前端,后台代码由C++编写;tclcl是翻译器和解释器的接口,能够协调两种语言在仿真中很好地工作。
NS是面向对象的网络仿真器,它本身含有一个采用离散事件驱动作为引擎的虚拟时钟。它底层的仿真引擎利用面向对象的工具命令语言(Otcl)作为仿真时的命令和配
置语言,主要由C++编写。NS中的构件通常都作为一个C++类来实现,同时对应一个Otcl类,既考虑到了仿真的性能,又兼顾了灵活性,同时增强了构件库的可组合性和可扩展性。一方面,采用高效的编译执行语言C++来实现构件功能,可取得较好的性能;另一方面,用Otcl实现仿真对象的配置,可以修改仿真参数和仿真过程并且在不必重新编译,提高了仿真的效率,它是一种解释执行的语言。