16、流量控制是怎么实现的?【中高频】
流量控制其实就是 让发送方 发送速率不要太快,让接收方来得及处理。也就是 让「发送方」根据「接收方」的 接收能力 控制 发送的数据量。流量控制通过动态调整 窗口的大小 来实现,包括 发送窗口 和 接收窗口。具体过程:
-
接收端 向 发送端 通知自已可以接收数据的大小。
-
于是发送端会发送的数据量 就不会超过这个限度。该限度就叫窗口大小,窗口大小由 接收端 决定,而在TCP 首部中,专门有一个字段用来通知窗口大小:
-
接收主机将 自己可以接收的缓冲区大小 放入这个字段中 通知给发送端,这个字段的值越大,说明网络的吞吐量越高。发送端 会根据 接收端 的指示,对发送数据的量进行控制。当Window=0时,即告知发送方停止发送数据。当窗口更新之后,才能继续发送数据。
-
举例:
-
如图所示,当接收端收到从 3001 号开始的数据段后 接收缓冲区满了,接收窗口=0,不得不暂时停止接收数据。
-
之后,在收到接收窗口更新通知后 通信才得以继续进行。如果这个窗口的更新通知在传送途中丢失,可能会导致无法继续通信;为避免此类问题的发生,发送端主机会时不时的发送一个叫做窗口探测的数据段,此数据段仅含一个字节以获取最新的窗口大小信息。
-
【注】为什么会出现滑动窗口?
-
在确认应答策略中,对每一个发送的数据段,都要给一个ACK确认应答,收到ACK后再发送下一个数据段,这样做有一个比较大的缺点,就是性能比较差,尤其是数据往返的时间长的时候
-
使用滑动窗口,就可以一次发送多条数据,从而就提高了性能