计算机网络 运输层TCP流量控制

196 阅读4分钟

一、什么是流量控制

简单理解就是让发送方数据发送慢一点,让接受放来得及接收。如果不控制发送方的数据传输而接收方来不及接收处理发送方发送过来的数据,这个时候接收方就会出现严重的丢包现象。这个时候引入流量控制来限制发送方发送数据的发送速率。

二、实现机制及实现

TCP利用滑动窗口机制来实现流量控制。滑动窗口起到限制发送端数据发送速率的作用(和数据链路层的机制类似(GBN、选择重传))。我们知道,在TCP连接的发送端与接收端都有对应的发送缓存与接收缓存,所以在通信过程中,接收方可以根据自己的接收缓存大小,动态地调整发送方发送窗口的大小,即接受窗口rwnd(接收方通过设置确认报文段中窗口字段将rwnd发送给发送方),发送方的发送窗口大小设置为接受窗口rwnd与拥塞窗口cwnd的最小值。发送窗口可以根据接收缓存的大小动态变化。

三、TCP可靠传输的实现(滑动窗口)

TCP实现可靠传输的协议:停止等待协议,若用流水线传输还需要使用,滑动窗口协议和连续ARQ协议。

滑动窗口协议:滑动窗口协议在在发送方和接收方之间各自维持一个滑动窗口,发送方是发送窗口,接收方是接收窗口,而且这个窗口是随着时间变化可以向前滑动的。它允许发送方发送多个分组而不需等待确认。TCP的滑动窗口是以字节为单位的。 规则: (1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。 (2)只有当发送方A收到了接收方的确认报文段时,发送方窗口才可以向前滑动几个序号。 (3)当发送方A发送的数据经过一段时间没有收到确认(由超时计时器控制),就要使用回退N步协议,回到最后接收到确认号的地方,重新发送这部分数据。 此外,TCP利用滑动窗口协议来进行流量控制

四、流量控制过程

image-20220317103546193.png

首先,主机A向主机B按照主机B发送的rwnd与报文段的大小进行数据传输,当发送数据的seq序号为201的数据丢失时,主机B返回确认报文(注意TCP并不是采用的停等协议,而是可以在发送方发送多次数据之后再返回确认报文),其中ack为201(主机B期待主机A发送的下一个字节序号(TCP是面向字节流的,但是在发送的时候会封装成含有控制信息头部的数据报),并且ack代表着201前的数据已经安全接收到了。这时候主机A意识到201报文数据丢失,但是在主机A中的发送窗口并不会立刻找到201数据报发送,因为发送窗口中还有位置发送下面的数据报,当发送窗口中的数据报发送完毕,主机A才会采取超时重传机制将201重传到主机B,然后进行201序号报文的重传)。随后主机B发送的确认报文调整了cwnd发送窗口大小进行了一次流量控制。

当主机B发送的确认报文设置的rwnd为0时,告诉主机A不要发送数据了(主机B的接收缓存可能正在处理从主机A接收到的数据)。

这时会有一种情况,主机A的rwnd设置为0无法向主机B发送数据了。当主机B的接收缓存空间腾出来之后,向主机A发送确认报文并设置主机A的发送窗口大小。但就在这个时候出事了,这个确认主机A能够再发送数据的确认报文丢失了,这就导致主机A不发送数据,而主机B要求主机A发送数据的报文发出后没有接收到主机A的任何回应,这时候就大家都在等了。所以这个时候会引入一个计时器的机制,当发送端收到接收端要求设置cwnd为0之后,发送端立即启动计时器。当时间到了,主机A就会向主机B发送一个探测报文段,接收方收到探测报文段后返回给出cwnd的设置大小的确认报文,这就解决了一直等的情况(主机A一方主动点试探),如果主机B发送的确认报文仍然是rwnd为0,则主机A重新设置计时器。

\