TCP协议的拥塞控制策略及改进( 三 )


图2(a) 图2(b)
拥塞虽然是由于网络资源的稀缺引起的,但单纯增加资源并不能避免拥塞的发生 。例如增加缓存空间到一定程度时,只会加重拥塞,而不是减轻拥塞,这是因为当数据包经过长时间排队完成转发时,它们很可能早已超时,从而引起源端超时重发,而这些数据包还会继续传输到下一路由器,从而浪费网络资源,加重网络拥塞 。事实上,缓存空间不足导致的丢包更多的是拥塞的“症状”而非原因 。另外,增加链路带宽及提高处理能力也不能解决拥塞问题,例如,图2(a)中,四个节点之间的链路带宽都是19.2kbps,传输某个文件需要用时5分钟;当第一个节点和第二个节点之间的链路带宽提高到1Mbps时(如图2(b)所示),传输完该文件所需时间反而大大增加到了7个小时!这是因为在路由器R1中,数据包的到达速率远远大于转发的速率,从而导致大量数据包被丢弃,源端的发送速度被抑止,从而使得传输时间大大增加 。即使所有链路具有同样大的带宽也不能解决拥塞问题,例如图3中,
所有链路带宽都是1Gbps,假如A和B同时向C以1Gbps的速率发送数据,则路由器R的输入速率为2Gbps,而输出速率只能为1Gbps,从而产生拥塞 。
单纯地增加网络资源之所以不能解决拥塞问题,是因为拥塞本身是一个动态问题,它不可能只靠静态的方案来解决,而需要协议能够在网络出现拥塞时保护网络的正常运行 。目前对互联网进行的拥塞控制主要是依靠在源端执行的基于窗口的TCP拥塞控制机制 。网络本身对拥塞控制所起的作用较小,但近几年这方面的研究已经成了一个新的热点 。
3. TCP拥塞控制及其改进
3.1 TCP拥塞控制机制介绍
基于源端的拥塞控制策略中,使用最为广泛的是TCP协议中的拥塞控制策略,TCP协议是目前互联网中使用最为广泛的传输协议 。根据MCI的统计,互联网上总字节数的95%及总数据包数的90%使用TCP协议传输 。
早期的TCP协议只有基于窗口的流控制(flow control)机制而没有拥塞控制机制,因而易导致网络拥塞 。1988年Jacobson针对TCP在网络拥塞控制方面的不足,提出了“慢启动”(Slow Start)和“拥塞避免”(Congestion Avoidance)算法 。1990年出现的TCP Reno版本增加了“快速重传 ”(Fast Retransmit)、“快速恢复”(Fast Recovery)算法,避免了网络拥塞不严重时采用“慢启动”算法而造成过度减小发送窗口尺寸的现象,这样TCP的拥塞控制就主要由这4个核心算法组成 。
TCP协议的目的是为上层应用提供可靠的服务,其主要特征在于:

确保各流享用带宽的公平性 。
动态发现当前可利用的带宽 。
拥塞避免及控制机制以避免拥塞崩溃(congestion collapse)的发生 。
标准版本的TCP使用基于窗口的的和式增加积式减小(Additive Increase Multiplicative Decrease,AIMD)方式控制发送速率,以保证稳定性及带宽享用的公平性 。
错误控制机制是一个可靠传输协议的要害部分 。它对协议的性能有很大的影响,包括吞吐量、能量消耗及可靠性 。错误控制通常包括错误检测和错误恢复两部分 。为了保证数据传输的可靠性,TCP要求接受端在正确接收到数据段(data segment)后向发送端发送一个确认包,确认包中包含了期望接收到的下一个数据段的序号 。TCP发送端通过监测确认包的序号来检测是否发生了错误 。假如发生超时或者发送端收到一定数量(通常是3个)重复的确认包,则认为传输过程中发生了错误,数据段被丢弃 。由于有线网络的位出错率很低(例如光纤的BER通常只有10-12[22]),因此TCP假设丢包是由于网络拥塞引起的 。在错误恢复处理过程中,TCP重传丢弃的数据段、减小发送端窗口大小并且在超时情况下重置超时时钟 。

推荐阅读