TCP的超时与重传

TCP通过在发送时设置一个定时器来解决数据和确认可能丢失的情况。如果定时器溢出时还没有收到确认,那么它就重传该数据。
对于每个连接,TCP管理4个不同的定时器:

  • 重传定时器用于当希望收到另一端的确认。
  • 坚持定时器使窗口大小信息保持不断流动。
  • 保活定时器检测到一个空闲连接的另一端何时崩溃或重启。
  • 2MSL定时器测量一个连接处于TIME_WAIT状态的时间。

拥塞避免算法

慢启动算法是在一个连接上发起数据流的方法,但有时我们会到达中间路由器的极限,此时分组就被丢弃。需要拥塞避免算法来处理丢弃分组。

该算法假定由于分组受到损坏引起的丢失是非常少的,因此分组丢失就意味着在某处网络上发送了拥塞:发生超时和接收到重复的确认。

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd,一个慢启动门限ssthresh。

  • 对一个连接,初始化cwnd为1个报文段,ssthresh为65535个字节。
  • 当拥塞发生时,ssthresh被设置为当前窗口大小的一半(cwnd和通告窗口大小之间的最小值的一半)。若是超时引起了拥塞,则cwnd被设置为1个报文段。
  • 当新的数据被对方确认后,就增加cwnd,增加的方法取决于我们是否正在进行慢启动或拥塞避免。如果cwnd小于等于ssthresh,则正在进行慢启动,否则就正在进行拥塞避免。慢启动算法初始化cwnd为1个报文段,之后每收到一个确认就加1.拥塞避免算法要求每收到一个确认把cwnd增加1/cwnd

快速重传和快速恢复算法

快速重传算法:如果一连串收到3个或3个以上的重复ACK,就非常可能是一个报文段丢失了。于是就重传丢失的数据报文段,而无需等待超时定时器溢出。

  • 当收到第3个重复的ACK时,将ssthresh设置为当前拥塞窗口cwnd的一半。重传丢失的报文段。设置cwnd为ssthresh+3倍报文段大小。

  • 每次收到另一个重复的ACK时,cwnd增加1个报文段大小并发送1个分组。

  • 当下一个确认新数据的ACK到达时,设置cwnd为ssthresh。

当TCP超时重传时,它不一定要重传同样的报文段,TCP允许进行重新分组而发送一个较大的报文段。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 这篇文章是整个读书总结系列的最后一篇,有关TCP我想总结的内容都会在这篇文章结束。当然这并不是TCP的全部,...
    Noskthing阅读 6,382评论 1 27
  • TCP协议 第17章 TCP传输控制协议 17.1 TCP协议格式 TCP将用户数据打包构成报文段,它发送数据后启...
    有何不可12317阅读 5,934评论 0 0
  • 运输层协议概述 从通信和信息处理的角度看,运输层向它上面的应用层提供通信服务,它属于面向通信部分的最高层,同时也是...
    srtianxia阅读 7,239评论 0 2
  • 个人认为,Goodboy1881先生的TCP /IP 协议详解学习博客系列博客是一部非常精彩的学习笔记,这虽然只是...
    贰零壹柒_fc10阅读 10,472评论 0 8
  • 引言 计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该...
    qyoyoz阅读 3,660评论 0 0