滑动窗口流量控制机制

457 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

滑动窗口概念不仅存在于数据链路层,也存在于传输层,两者有不同的协议,但基本原理是相近的。其中一个重要区别是,一个是针对于帧的传送,另一个是字节数据的传送。

本文主要会针对数据链路层滑动窗口的帧传送和传输层TCP滑动窗口做机制阐述。

数据链路层

流量控制涉及对链路上的帧的发送速率的控制,以使得接收方有足够的缓存空间来接收每个帧。

发送方都维持一组连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持一组连续的允许接收的帧的序号,称为接收窗口。发送窗口用来对发送方进行流量控制。

对于发送方来说,发送窗口大小代表还未接收到对方确认信息的情况下发送方最多还可以发送多少个数据帧。

对于接收方来说,接收窗口是为了控制可以接收哪些数据帧和不可以接收哪些帧。(帧的序号在窗口内,留下数据帧,负责抛弃)

image.png

机制特点

  • 只有接收窗口向前滑动(同时接收方发送了确认帧)时,发送窗口在接收到确认帧之后,才向前滑动。
  • 当滑动窗口大小为1时,可以保证帧的有序接收。
  • 在数据链路层的滑动窗口协议中,窗口在传输过程中是固定的。

TCP 滑动窗口

假设通信双方建立了一条TCP连接,这时我们的发送方的窗口可以分为以下四部分:

image.png

发送方的窗口快照可以将窗口分为几个部分:

Category 1: 已发送且已收到ACK确认的部分:1-31字节

Category 2: 已发送但未收到ACK确认的部分:32-45字节

Category 3【可用窗口】(Usable Window): 未发送且在接收方范围内的部分:46-51字节(这部分数据仍在对方系统处理能力之内)

Category 2 + Category3 的部分(32-51字节)【发送窗口】(Send Window)

Category 4: 未发送但数据大小超过对方系统处理范围之外的部分:52以后的字节

当46-51字节发送完毕后,且如果还没接收到对方的ACK,这时【可用窗口】就会耗尽,即【可用窗口】为0,窗口关闭,不能再继续发送。

窗口移动

image.png

假设这时32-36的5个字节得到了对方的ACK确认,在发送窗口大小不变的前提下,窗口会向右移动5个字节,这时候尾部新进入的52-56字节变为可用窗口,可以继续发送数据。

不同层级流量控制和窗口大小的区别

传输层:  定义端到端用户之间的流量控制,滑动窗口可以动态变化

数据链路层:  定义两个中间的相邻结点的流量控制,滑动窗口不能动态变化

参考:

《王道408》

理解TCP协议中的滑动窗口