TCP篇3

本文最后更新于:2021年9月20日 上午

书接上文,本文主要介绍TCP的 重传机制、滑动窗口、流量控制、拥塞控制

TCP篇3

重传机制

重试机制主要用于解决丢包问题。主要包括以下几种重传方式

  1. 超时重传:超过了一定的时间没有收到ACK响应,则重新上传报文
    1. 超时间隔加倍策略:针对一份报文的每一次重试的重试时间都加倍
  2. 快速重传:不以时间为重试单位,而是以数据作为重试单位。在接受到三个相同的ACK报文时,会在定时器过期之前,重传丢失的报文。但是不能确定报文丢失的范围
  3. SACK:解决快速重传的丢失报文范围问题。在TCP报文的选项中增加已缓存的数据,这样发送方就知道了什么数据没有传成功。
  4. D-SACK:使用了SACK方法来告诉发送方有哪些数据被重复接受了。

滑动窗口

窗口解决的问题是每一次发送包都需要ACK响应才能继续发送包的问题,并且这个问题会随着包往返时间越长而越发明显。

为了解决这个问题,TCP引入的窗口技术,窗口的实现实际上是操作系统开辟的一个缓存空间,发送方主机在等到确认应答返回之前,必须在缓冲区中保留已发送的数据。如果按期收到确认应答,此时数据就可以从缓存区清除。假设窗口大小为 3 个 TCP 段,那么发送方就可以「连续发送」 3 个 TCP 段,并且中途若有 ACK 丢失,可以通过下一个确认应答进行确认

窗口大小也就是无需等待确认应答,而可以继续发送数据的最大值。

TCP 头里有一个字段叫 Window,也就是窗口大小。

这个字段是接收端告诉发送端自己还有多少缓冲区可以接收数据。于是发送端就可以根据这个接收端的处理能力来发送数据,而不会导致接收端处理不过来。

流量控制

发送方不能无脑的发数据给接收方,要考虑接收方处理能力。

如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制,从而导致网络流量的无端的浪费。

为了解决这种现象发生,TCP 提供一种机制可以让「发送方」根据「接收方」的实际接收能力控制发送的数据量,这就是所谓的流量控制

有一种方法是窗口缩小

拥塞控制

不想写了。。。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!