TCP/IP协议学习记录之二十:TCP的超时重传

      T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。如果当定时器溢出时还没有收到确认,它就重传该数据。

对每个连接, T C P管理4个不同的定时器。
1) 重传定时器使用于当希望收到另一端的确认。
2) 坚持( p e r s i s t )定时器使窗口大小信息保持不断流动,即使另一端关闭了其接收窗口。
3) 保活( k e e p a l i v e )定时器可检测到一个空闲连接的另一端何时崩溃或重启。
4) 2MSL定时器测量一个连接处于 T I M E _ WA I T状态的时间。

     拥塞避免算法:

      拥塞避免算法是一种处理丢失分组的方法。

     该算法假定由于分组受到损坏引起的丢失是非常少的(远小于 1 %),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:发生超时和接收到重复的确认;

       拥塞避免算法和慢启动算法是两个目的不同、独立的算法。但是当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来作到这一点。在实际中这两个算法通常在一起实现;

        拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口 c w n d和一个慢启动门限s s t h re s h;
        1) 对一个给定的连接,初始化 c w n d为1个报文段, s s t h re s h为6 5 5 3 5个字节。
       2) TCP输出例程的输出不能超过 c w n d和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。
      3) 当拥塞发生时(超时或收到重复确认), s s t h re s h被设置为当前窗口大小的一半(c w n d 和接收方通告窗口大小的最小值,但最少为 2个报文段)。此外,如果是超时引起了拥塞,则c w n d被设置为1个报文段(这就是慢启动)。
     4) 当新的数据被对方确认时,就增加 c w n d,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果 c w n d小于或等于 s s t h re s h,则正在进行慢启动,否则正在进行拥塞避免。慢启动一直持续到我们回到当拥塞发生时所处位置的半时候才停止(因为我们记录了在步骤 2中给我们制造麻烦的窗口大小的一半),然后转为执行拥塞避免;

     慢启动算法初始设置 c w n d为1个报文段,此后每收到一个确认就加 1,这会使窗口按指数方式增长:发送 1个报文段,然后是2个,接着是4个……。拥塞避免算法要求每次收到一个确认时将 c w n d增加1 /c w n d。与慢启动的指数增加比起来,这是一种加性增长 (additive increase)。

快速重传与快速恢复算法

       如果一连串收到 3个或3个以上的重复 A C K,就非常可能是一个报文段丢失了。于是我们就重传丢失的数据报文段,而无需等待超时定时器溢出。这就是快速重传算法。接下来执行的不是慢启动算法而是拥塞避免算法。这就是快速恢复算法。


ICMP的差错

        T C P能够遇到的最常见的I C M P差错就是源站抑制、主机不可达和网络不可达。
一个接收到的源站抑制引起拥塞窗口 c w n d被置为1个报文段大小来发起慢启动,但是慢启动门限s s t h re s h没有变化,所窗口将打开直至它或者开放了所有的通路(受窗口大小和往返时间的限制)或者发生了拥塞。
 一个接收到的主机不可达或网络不可达实际上都被忽略,因为这两个差错都被认为是短暂现象;
 

重新分组

           当T C P超时并重传时,它不一定要重传同样的报文段。相反, T C P允许进行重新分组而发送一个较大的报文段,这将有助于提高性能;

猜你喜欢

转载自blog.csdn.net/cxy19931018/article/details/81363974