流量控制与滑动窗口机制
在数据链路层中,流量控制机制和可靠传输机制是交织在一起的:同一个滑动窗口,既限制发送方别发太快,又决定出错后该重传哪些帧。这一节只讲窗口本身怎么动,三种协议怎么用窗口做可靠传输放在 3.4.2。
这一节有一条后面反复要用的判据:三种协议的差别只在两个窗口的大小上(2019 年考过窗口大小的关系)。
机制
流量控制:接收方控制发送方
流量控制是指由接收方控制发送方的发送速率,使接收方有足够的缓冲空间来接收每个帧。 常见的流量控制方法有两种:停止-等待协议和滑动窗口协议。
数据链路层和传输层都有流量控制的功能,也都用到了滑动窗口协议,但有两处区别:
- 控制范围:数据链路层控制的是相邻节点之间的流量,传输层控制的是端到端的流量。
- 控制手段:数据链路层的控制手段是接收方收不下时就不返回确认;传输层的控制手段是接收方通过确认报文段中的窗口值来调整发送方的发送窗口。
第二条是链路层与 TCP 流量控制最本质的区别:链路层靠”不回确认”让发送方停下来,TCP 靠在确认里直接告诉对方”我还能收多少”(第 5 章 5.3.5)。
停止-等待:最简单的流量控制
停止-等待流量控制是一种最简单的流量控制方法。发送方每次只允许发送一个帧,接收方每接收一个帧都要反馈一个确认信号,表示可以接收下一帧,发送方收到确认信号后才能发送下一帧。若发送方没有收到接收方反馈的确认信号,则需要一直等待。发送方每发送完一个帧,就进入等待接收方确认信息的过程中,因而传输效率相对较低。
滑动窗口:发送窗口与接收窗口
滑动窗口流量控制是一种更高效的流量控制方法。在任意时刻,发送方都维持一组连续的允许发送帧的序号,称为发送窗口;同时接收方也维持一组连续的允许接收帧的序号,称为接收窗口。发送窗口表示在还未收到对方确认信息的情况下,发送方最多还能发送多少个帧和哪些帧;接收窗口则控制可以接收哪些帧和不可以接收哪些帧。
设发送窗口
| 时刻 | 窗口覆盖 | 状态 |
|---|---|---|
| (a) 开始 | 0~4 | 允许发送 0~4 号共 5 个帧 |
| (b) 发出 0 号 | 0~4 | 0 已发送,窗口不动,还允许发送 1~4 号共 4 个帧 |
| (c) 发出 0~4 号 | 0~4 | 窗口内全是已发送未确认的帧,不允许发送任何帧 |
| (d) 收到 0~2 号的确认 | 3~7 | 窗口前移 3 格;3、4 已发送,还允许发送 5~7 号共 3 个帧 |
窗口滑动的规则只有两条:
- 发送方每收到一个按序确认的确认帧,就将发送窗口向前滑动一个位置,于是有一个新的序号落入发送窗口,序号落入发送窗口内的数据帧可以继续发送。当窗口内没有可以发送的帧(窗口内的帧全部是已发送但未收到确认的帧)时,发送方就停止发送。
- 接收方每收到一个序号落入接收窗口的数据帧,就允许将该帧收下,然后将接收窗口向前滑动一个位置,并发回确认。 这样又有一个新的序号落入接收窗口。若收到的帧落在接收窗口之外,则一律丢弃。
滑动窗口的四条特性
- 只有接收窗口向前滑动(同时接收方发送了确认)时,发送窗口才有可能向前滑动——只有发送方收到确认后才一定滑动。两个窗口的滑动是因果相连的:接收方收下帧、发出确认,发送方收到确认,窗口才前移。
- 从滑动窗口的概念看,停止-等待协议、后退 N 帧协议和选择重传协议只在发送窗口与接收窗口的大小上有所差别(2019):
| 协议 | 发送窗口 | 接收窗口 |
|---|---|---|
| 停止-等待(SW) | ||
| 后退 N 帧(GBN) | ||
| 选择重传(SR) |
若采用
- 当接收窗口大小为 1 时,只有收到该帧后才允许接收下一帧,因此可保证帧的有序接收。 停止-等待和 GBN 都是按序接收;只有 SR 能收下失序的帧。
- 在数据链路层的滑动窗口协议中,窗口大小在传输过程中是固定的(与传输层不同)。
边界
链路层的窗口按帧计、大小固定;TCP 的窗口按字节计、大小可变。 TCP 的发送窗口取接收方通告的窗口与拥塞窗口中较小的一个,传输过程中随时在变(第 5 章)。把链路层的”窗口大小固定”套到 TCP 上是常见错误。
发送窗口滑动靠”按序确认”。 发送方收到的确认若不是窗口最左端那一帧的,窗口不动(在 GBN 的累积确认下,收到 ACK
流量控制不是链路层独有的,也不等于可靠传输。 流量控制管”别发太快”,可靠传输管”丢了要补”;链路层把两者放进同一个滑动窗口里实现,但概念上是两件事。
对照速查
| 数据链路层 | 传输层(TCP) | |
|---|---|---|
| 控制范围 | 相邻节点 | 端到端 |
| 控制手段 | 收不下就不回确认 | 确认报文段中的窗口值 |
| 窗口单位 | 帧 | 字节 |
| 窗口大小 | 固定 | 可变 |
| 说法 | 对错 |
|---|---|
| 流量控制是由发送方控制接收方 | ❌(接收方控制发送方) |
| 发送方发出一帧后发送窗口立即前移 | ❌(收到按序确认后才前移) |
| 接收窗口为 1 可以保证有序接收 | ✅ |
| 链路层滑动窗口的大小在传输中可以动态调整 | ❌ |
| SW、GBN、SR 的差别只在两个窗口的大小 | ✅(2019) |
考点
- 流量控制 = 接收方控制发送方;两种方法:停止-等待、滑动窗口
- 链路层 vs 传输层:相邻节点 vs 端到端;不回确认 vs 窗口值
- 发送窗口:还未收到确认时最多能发多少帧、哪些帧;接收窗口:能收哪些帧
- SW:1/1;GBN:>1/1;SR:>1/>1;
(2019) 保证有序接收;链路层窗口大小固定
链接
- 🏠 返回总览:计算机网络第 3 章:数据链路层总览
- ⬅️ 上一节:3.3.2 纠错编码
- ➡️ 下一节:3.4.2 可靠传输机制
- 📖 名词库:第 3 章名词库