TCP/IP——TCP超时与重传、拥塞避免、快重传快恢复

本文深入探讨了TCP/IP中的超时重传机制、拥塞避免策略以及快速重传和快速恢复算法。详细介绍了TCP如何通过设置超时定时器确保数据可靠性,分析了慢启动、拥塞避免算法的实现原理,以及在拥塞发生时如何利用快速重传和恢复机制快速响应。此外,文章还涵盖了RTT测量、TCP中的ICMP差错报文处理等内容,全面解析TCP拥塞控制的综合运用。
摘要由CSDN通过智能技术生成

一、引言

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

对每个连接, T C P管理4个不同的定时器。

  1. 重传定时器,发送数据端(非发送ACK端),每发送一个数据都将设置一个超时时间,用于超时未收到ACK时进行重传。

  2. 坚持定时器,如果接收端窗口为0了(快的发送端和慢的接收端),这时发送端将不再发送数据。随着接收端应用不断读取数据,这时接收端窗口增大了,向发送端通知窗口大小,该包不需要确认。如果该包丢失了,那么发送方将无法知道接收方窗口是否恢复了,这时发送方将发送一个探测包,探测一下窗口大小。(该定时器是发送数据方持有的,在收到通告窗口大小为0后启动,超过一定时间未收到窗口更新报文,将发送探测包。)

  3. 保活定时器,可以理解为心跳包,当双方无数据往来时,依靠该定时器来发送心跳包,探测连接是否完好(另一端是否依然存在)。接收端每收到一次数据,就重新设置保活定时器,时间的设置通常是2小时。若2小时没有再收到数据,就发送一个探测报文段,以后每隔75秒发送一次。若连续发送10次都无应答,就认为出现了故障,接着关闭该连接。

  4. 2MSL定时器,连接关闭时,主动 发起关闭连接的一方持有。在发送被动关闭FIN的确认时,启动该定时器,同时进入time_wait状态。

二、往返时间的测量

RTT:round trip time,往返时间。RTT 表示一次重返时间,用来衡量网络的时延。

RTO:retransmissiontimeout,重传超时时间。

目前TCP的实现,重传超时时间都是以RTT的幂次倍来实现的,即RTO = RTT * 2 ^n, n表示第几次重传,即超时时间是指数递增,而非线性递增,RTO的最大值为超过64秒。

需要注意的是,RTT测量采样时,不计入重传的报文段。这是因为,一个报文段一旦重传,无法区分收到的该报文段的ACK对应于哪次发送的报文段。

三、慢启动和拥塞避免

在实际中,这2个算法通常一起实现。

慢启动,为了控制一个连接初次进入网络(或发生超时后再发包)时的发包速度,控制初始发包速度。

慢启动,发送方通过设置cwnd控制初始发包速度,在不发生拥塞的情况下,发包速度呈指数增长。发送端能够发送的累积未确认的数据量是cwnd和接收端通告窗口大小中小者。慢启动是发送端对流量的控制,拥塞窗口是接收端对流量的控制。

另外需要注意,发送方发送数据的包的大小并不一定都是按照MSS来发送的,发送端能够发送累积未确认的数据量可以很大,但发送端的内核缓冲中,可能并没有这么多的数据需要发送。

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

该算法假定由于分组受到损坏引起的丢失是非常少的(远小于1%),因此分组丢失就意味着在源主机和目的主机之间的某处网络上发生了拥塞。有两种分组丢失的指示:发生超时和接收到重复的确认。如果使用超时作为拥塞指示,则需要使用一个好的RTT算法。
拥塞避免算法和慢启动算法是两个目的不同、独立的算法。但是当拥塞发生时,我们希望降低分组进入网络的传输速率,于是可以调用慢启动来作到这一点。在实际中这两个算法通常在一起实现。

拥塞避免算法和慢启动算法需要对每个连接维持两个变量:一个拥塞窗口cwnd和一个慢启动门限ssthresh(slow start threshold,所谓的慢启动门限就是说,当拥塞窗口超过这个门限的时候,就使用拥塞避免算法,而在门限以内就采用慢启动算法。)。

拥塞避免算法:

  1. 对一个给定的连接,初始化cwnd为1个报文段,ssthresh为65535个字节。

  2. TCP输出例程的输出不能超过 cwnd和接收方通告窗口的大小。拥塞避免是发送方使用的流量控制,而通告窗口则是接收方进行的流量控制。前者是发送方感受到的网络拥塞的估计,而后者则与接收方在该连接上的可用缓存大小有关。

  3. 当拥塞发生时(超时或收到重复确认),ssthresh被设置为当前窗口大小的一半(c w n d和接收方通告窗口大小的最小值,但最小为2个报文段)。此外,如果是超时引起了拥塞,则cwnd被设置为1个报文段(这就是慢启动)。

  4. 当新的数据被对方确认时,就增加cwnd,但增加的方法依赖于我们是否正在进行慢启动或拥塞避免。如果 cwnd小于或等于ssthresh,则正在进行慢启动,否则正

  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值