TCP差错控制、流量控制、拥塞控制

本文主要介绍TCP的窗口、差错控制、流量控制、拥塞控制相关知识。

1. 差错控制

tcp发送的报文交给IP协议进行传输,而IP协议只能提供尽力而为的服务,所以在传输过程中发生错误是不可避免的事情。为支持可靠的传输,所以提供了差错控制。
差错控制 主要是通过差错检测,确认和重传方式实现。

1.1滑动窗口

首先介绍一个十分重要的概念 ,滑动窗口。TCP协议是使用以字节为单位的滑动窗口协议来进行发送、接收、确认和重传。通过该窗口来跟踪和记录发送字节的状态,从而达到差错控制。
接收方有一个接收缓存,对其设置一个接收窗口,窗口值等于接收缓存可以继续接收字节流的大小。接收窗口的大小取决于接收方根据接收缓存剩余的空间大小、应用程序读取字节流的速度。
发送方有一个发送缓存,针对该缓存设置了发送窗口,发送方能够利用TCP连接发送字节流的大小取决于发送窗口的大小。发送窗口的大小取决于拥塞窗口和接收窗口的大小( min(拥塞窗口,接收窗口))

如图发送端:
在这里插入图片描述
字节流有上述四种状态。 发送窗口等于第二类+第三类窗口字节数之和. 可用窗口的大小等于第3类状态字节数。

  1. 如果一切正常,TCP发送可用窗口内的数据, 上图第3类数据变为已发送但没有确认。 滑动窗口向左移动,从序号35的字节 又变成了 尚未发送但接收方已准备的数据。

  2. 当发送过去的数据 收到 接收方的确认后,上图中第2类数据 变为已发送且被确认的数据,刺死滑动窗口继续向左移动。

1.2 重传

当接收方收到字节流序号不连续时,可以进行选择性重传。 只重发丢失的数据。
至于何时重传,通过重传定时器来设定。

每当发送一个报文后,启动一个重传定时器,如果在倒计时为0还没有收到数据,进行重传。由于流量和传输延迟等原因,重传定时器的间隔 需要 动态变更。它是一种自适应的。
计算重传时间公式:Timeout = bRTT. b是一个>1的常量加权因子。 RTT为估算的往返时间。推荐b=2.
RTT= a
旧RTT + (1-a)*最新的RTT测量值。 a决定了RTT对延时的反应速度,a接近于1时,短暂的延迟变化对RTT影响不大,a接近于0时,对RTT的变化特别敏感。

2. 流量控制

流量控制是针对于TCP连接双方的,目的是控制发送方的速率,使之不超过接收方的接收速率。

2.1 通知窗口

他的核心实现就是 接收方对接收到的报文进行确认时,通知发送端自己还可以接收多少字节(接收窗口大小,也叫通知窗口). 发送端根据这个情况就会修改自己的发送窗口,进行适配。
当通知窗口为0时,也叫零窗口通告,此时发送端不在继续发送报文直至接收到非零通告为止。

当接收方应用程序接收数据,导致接收缓冲区有位置了,此时接收方会主动通知发送端最新的通告窗扣大小。
考虑到一种情况,收到零通告后,发送端不再发送数据直至收到新的非零通告,如果新的非零通告报文丢失,发送端会一直不能发送数据,考虑至此,发送端在收到零通告后设立了一个坚持定时器,到期后发送一个探测报文 ,用于查询最新的通告窗口大小。 坚持定时器的时间和重传定时器的时间一样,每次加倍和复位直至阈值(60s).

2.2 Clark算法和Nagle算法

当接收方处于零空间时,如果新空出1B数据,就会通知发送端,为了这1B字节,发送多次报文确认,得不偿失,所以设计出Clark算法, 让接收方等待一段时间,有够多的接收缓存接收一个较长的报文,再通知发送端。

Nagle算法类似,当发送端多次从应用程序接收到1B的发送数据, 如果每次都单独发送这1B的数据,每次附带40B的代价(IP报头和TCP报头等消耗)。 为了解决这个问题,设计Nagle算法,第一 报文链路中最多只有一个1未被确认的小分组。 如果链路中有小分组,再从应用程序收到小分组信息时,暂时缓存,直到达到发送窗口的1/2或最大报文数MMS时,再一次性作为整个报文进行发送

3.拥塞控制

流量控制的重点放在点到点链路的局部控制中,拥塞控制的重点放在进入整个网络报文总量的全局控制中。

假设带宽只有2Mb/s, 发送端速率为10Mb/s, 这时造成大量报文丢失,造成拥塞。

何为拥塞呢,在慢开始和拥塞避免重,网络是否出现拥塞 是根据路由器是否丢弃分组来确定的。

为了进行拥塞控制,TCP规定了如下策略: 慢开始、拥塞避免、 快重传和快速恢复。

3.1 慢开始和拥塞避免

慢开始是一种试探着逐步增大拥塞窗口的做法,按二进制指数增长方式逐步扩大拥塞窗口。
慢开始指数增长有个阈值,当达到阈值后,为了不那么快真正拥塞,改为线性增长,使拥塞窗口缓慢增长这就是拥塞避免。

在这里插入图片描述
上图中慢开始阈值为16,达到阈值后可以线性增长,知道出现超时,此时将新的慢开始阈值设为超时时窗口值的一般,然后从新从慢开始开始新的一轮。

3.2 快重传和快恢复

在慢开始和拥塞控制的基础上,又提出新的算法,快重传和快恢复。
基于慢开始和拥塞控制的算法。假设连续发送报文M1-M7。 中途只有M3报文丢失,按照之前的机制,此时处于拥塞。 这样是不对的,新的算法规定。 在收到M1.M2后,如果后续收到M4。 标明M3已经丢失,此时最多需要3次通知发送端需要重传M3。 这就是快重传。

对发送端来说,每次收到这个消息时,都会减少拥塞窗口的值(减半),执行拥塞避免算法。这就是快恢复

在这里插入图片描述
上图蓝色标注,每次减半。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值