tcp拥塞控制

来源:互联网 发布:课程表软件哪个好 编辑:程序博客网 时间:2024/06/05 12:02
拥塞是由于路由器超载而引起的严重延迟现象,是通信子网能力不足的表现。一旦发生拥塞,路由器便丢弃数据包,并导致发送方重传被丢弃的报文,而大量的重传报文又会进一步加剧拥塞,这种恶性循环有可能导致整个因特网无法工作。而简单地采用确认重传技术并不能解决传输层的所有问题,TCP还必须提供适当机制以进行拥塞控制。
    TCP的拥塞控制方法也是基于滑动窗口协议的。它通过限制发送方注入报文的速率而达到拥塞控制的目的。具体地说,TCP是通过控制发送窗口的大小来对拥塞进行响应。而决定发送窗口大小的因素有两个:第一个因素是接收方所通告的窗口大小;第二个因素是发送方的拥塞窗口限制,又叫拥塞窗口。发送窗口的大小是取二者之中的较小者。
    在通信子网没有发生拥塞的情况下,发送方的拥塞窗口和接收方的通告窗口大小相等。一旦发现拥塞,发送方立即减小拥塞窗口。
    TCP协议发现拥塞的途径有两条:一条途径是来因特网控制信息协议ICMP的源抑制报文,另一条途径是报文丢失现象。TCP假定大多数报文丢失其原因都是通信子网拥塞。
    为了迅速抑制拥塞,TCP使用了两种技术:快速递减和慢启动。这两种技术是相关联的,实现起来也比较容易。所谓快速递减拥塞窗口的策略指的是:一旦发现报文丢失,立即将拥塞窗口大小减半;而对于保留在发送窗口中的报文,按指数增加重传定时器的定时宽度。换句话说.当可能出现拥塞时,TCP对传输流量和重传速率都按指数级递减:如果继续出现报文丢失,最终TCP将数据传输流量限制到每次只发送一个报文,即变成简单停等协议。快速递减策略的意图是迅速而显著地减少注入通信子网的传输流量,以便路由器有足够的时间来清除在其发送队列中的数据包。
    拥塞结束之后,TCP应如何恢复数据传输能力呢?TCP协议采取一种慢启动技术来避免系统在流量为零和拥塞之间剧烈振荡。所谓慢启动指的是:在新建连接或拥塞之后的流量增加,都仅以1个报文作为拥塞窗口的初始值,之后每收到一个确认,将拥塞窗口大小加大1倍。

    慢启动技术使得因特网不会在拥塞之后或新的连接建立时被突然增加的数据流量淹没。当建立连接时,发送方将拥寒窗口大小初始化为该连接所用的最大数据段的长度值,并随后发送一个最大长度的数据段。如果读数据段在定时器超时之前得到了确认,那么就可认为网络的传输能力大于最大的数据段长度。发送方会在原拥塞窗口的基础上再增加一个数据段的字节值,使其为两倍最大数据段的大小,然后发送两个数据段。当这些数据段中的每一个都被确认后,拥塞窗口大小就再增加一倍,即四个最大数据段的大小,然后发送四个数据段。当拥塞窗口是M个数据段的大小时,如果发送的所有M个数据段都被及时确认,那么将拥塞窗口大小增加M个数据段所对应的字节数目。实际上,每次成功地得到确认都会使拥塞窗口的大小加倍。拥塞算法的工作过程如图5-20所示。此处,最大的数据段长度为1KB。假设开始时拥塞窗口为64KB,但此时出现了超时,因此,将临界值设置为32KB,传输号0的拥塞窗口为1KB。之后拥塞窗口按指数规律增大至临界值(32KB),并由此开始按线性规律增大。


传输号12很不顺利,出现了定时器超时,临界值被设置为当前窗口的1/2(当前为40KB,因此1/2为20 KB)并且慢速启动又从头开始。在传输号17时,前面的四次传输每次均是按加倍的增量增大拥塞窗口,但这之后,窗口又将按线性增大。如果一直不出现超时现象,拥塞窗口会一直增大到接收方窗口的大小。此时,拥塞窗口停止增大,只要不出现超时,并且接收方窗口也保持不变,则拥塞窗口保持不变。
    慢启动技术在理想的情况下并不慢。加速TCP把拥塞窗口大小初始化为1,发送一个报文后等待确认报文。当确认报文到达后,TCP就把拥塞窗口增加为2,并发送2个报文之后又等待确认。如果这两个报文的确认到达之后,拥塞窗口就增加到4,于是就可以连续发送4个报文并又等待确认。收到对它们的确认后拥塞窗口就增加到8。在四个往返时间之后,TCP就可以连续发送16个报文。即便对更大的窗口而言,仅需log?2N个往返时间就可以连续发送N个报文。
    为避免拥塞窗口增大速度过快以至于导致可能的拥塞,TCP还附加一个限制。即当拥塞窗口增大到拥塞时窗口大小的一半时,TCP进入拥塞避免状态.降低窗口增大的速度。在拥塞避免状态,即使发送窗口中所有的报文都被确认之后,拥塞窗口的大小也只能加1。
    把快速递减、慢启动、拥塞避免、对往返时间变化的测量以及按指数规律对重传定时器进行补偿等技术结合在一起,就能在不明显增加TCP协议栈运行开销的情况下显著地提高TCP的性能。

0 0