4.1.1 数据链路层的流量控制

流量控制的作用

Q: 为什么需要流量控制?
A: 流量控制是为了防止发送方发送数据过快,导致接收方缓存溢出,造成数据丢失。

数据链路层流量控制与传输层流量控制的区别

Q: 数据链路层流量控制和传输层流量控制有什么区别?
A: 控制范围: 数据链路层流量控制是点对点的,即控制相邻节点之间的流量;传输层流量控制是端到端的,即控制源主机和目的主机之间的流量。
控制手段: 数据链路层流量控制通常采用接收方停止发送确认帧的方式来限制发送方的发送速率;传输层流量控制通常采用滑动窗口机制来限制发送方的发送速率。

数据链路层流量控制的实现

Q: 数据链路层如何实现流量控制?
A: 当接收方缓存不足时,停止向发送方发送确认帧,发送方收到确认帧后才能继续发送数据。

4.1.2 流量控制的方法

停止-等待协议

Q: 停止-等待协议的原理是什么?
A: 发送方每次只发送一个帧,并等待接收方的确认帧,收到确认帧后才能发送下一个帧。

Q: 停止-等待协议的缺点是什么?
A: 信道利用率低,尤其是在长距离传输时。

停止 - 等待协议实际也可以算成是一种特殊的滑动窗口协议,这种协议窗口是 1,发送和接收窗口都是 1。

滑动窗口协议

Q: 滑动窗口协议的原理是什么?
A: 发送方可以连续发送多个帧,并维护一个发送窗口,窗口大小为 N。接收方维护一个接收窗口,窗口大小也为 N。发送方可以发送窗口内的所有帧,接收方可以接收窗口内的所有帧。

Q: 滑动窗口协议的优点是什么?
A: 相比停止-等待协议,信道利用率更高。

后退 N 帧协议(GBN)

Q: 后退 N 帧协议的原理是什么?
A: 发送方可以连续发送多个帧,但接收方只确认最后一个按序接收到的帧。如果某个帧出现错误,发送方需要从出错帧开始重传所有未确认的帧。

Q: 后退 N 帧协议的优点是什么?
A: 相比停止-等待协议,信道利用率更高。

Q: 后退 N 帧协议的缺点是什么?
A: 当某个帧出现错误时,需要重传多个帧,浪费带宽。

选择重传协议(SR)

Q: 选择重传协议的原理是什么?
A: 发送方可以连续发送多个帧,接收方对每个正确接收的帧进行单独确认。如果某个帧出现错误,发送方只需要重传该帧。

Q: 选择重传协议的优点是什么?
A: 相比回退 N 帧协议,减少了不必要的重传,提高了信道利用率。

Q: 选择重传协议的缺点是什么?
A: 实现比回退 N 帧协议更复杂。

Q: 数据链路层流量控制的常用方法有哪些?
A: 数据链路层流量控制的常用方法有停止-等待协议和滑动窗口协议。滑动窗口协议又分为后退 N 帧协议和选择重传协议。

Q: 数据链路层不同流量控制方法的优缺点是什么?
A: 停止-等待协议:信道利用率低。
后退 N 帧协议:信道利用率较高,但重传效率较低。
选择重传协议:信道利用率最高,但实现复杂。

Q: 数据链路层滑动窗口协议的窗口大小是固定的吗?
A: 是的,数据链路层滑动窗口协议的窗口大小在传输过程中是固定的。

Q: 对比三种等待协议的窗口大小
A: 停止 - 等待协议:发送窗口大小 = 1,接收窗口大小 = 1。
后退 N 帧协议(GBN):发送窗口大小 > 1,接收窗口大小 = 1。
选择重传协议(SR):发送窗口大小 > 1,接收窗口大小 > 1。

Q: 可靠传输、滑动窗口、流量控制之间的关系是什么?
A: 可靠传输: 保证数据无差错地传输到接收方,即使出现错误也能通过重传机制保证数据完整性。
滑动窗口: 一种流量控制机制,通过限制发送方发送窗口的大小来控制发送速率,防止接收方缓存溢出。
流量控制: 控制发送速率,使接收方有足够的缓冲空间来接收每一个帧。

4.2 停止-等待协议

4.2.1 为什么要有停止-等待协议以及研究前提

Q: 为什么需要停止-等待协议?
A: 停止-等待协议是为了解决数据传输过程中的丢包问题,并实现流量控制。

4.2.2 停止-等待协议的无差错情况 & 有差错情况

无差错情况

Q: 停止-等待协议在无差错情况下是如何工作的?
A: 发送方发送一个帧后,停止发送,等待接收方的确认帧。收到确认帧后,发送方再发送下一个帧。

有差错情况
第一种情况:数据帧丢失或检测到帧出错

Q: 当数据帧丢失或检测到帧出错时,停止-等待协议如何处理?
A: 发送方使用超时计时器,如果在超时时间内没有收到确认帧,则重传该帧。

Q: 停止-等待协议的超时计时器如何设置?
A: 超时计时器设置的时间应该比帧传输的平均 RTT 更长一些。

第二情况:ACK 丢失

Q: 当 ACK 丢失时,停止-等待协议如何处理?
A: 发送方在超时时间内没有收到确认帧,会重传该帧。接收方收到重复的帧后,会丢弃该帧,并重新发送确认帧。

第三种情况:ACK 迟到

Q: 当 ACK 迟到时,停止-等待协议如何处理?
A: 发送方在超时时间内没有收到确认帧,会重传该帧。接收方收到重复的帧后,会丢弃该帧,并重新发送确认帧。

4.2.4 理解停止-等待协议中的信道利用率

Q: 什么是信道利用率?
A: 信道利用率是指发送方在一个发送周期内有效地发送数据所需要的时间占整个发送周期的比例。

Q: 停止-等待协议的信道利用率为什么低?
A: 因为发送方在发送一个帧后,需要等待接收方的确认帧,才能发送下一个帧。这会导致发送方大部分时间处于等待状态,降低了信道利用率。

4.2.5 信道利用率的实际例题

Q: 如何计算停止-等待协议的信道利用率?
A: 信道利用率 = 数据帧长度 / (数据帧长度 + 2 * 单项传播时延 * 发送速率)

Q: 如何根据信道利用率计算数据帧长度?
A: 数据帧长度 = 2 * 单项传播时延 * 发送速率 * 信道利用率 / (1 - 信道利用率)

4.3 后退 N 帧协议(GBN 协议)

4.3.2 流水线技术

Q: 什么是流水线技术?
A: 流水线技术是指发送方可以连续发送多个帧,而不是每次发送一个帧就停止等待确认。

Q: 流量控制引入流水线技术后需要考虑什么?
A: - 需要增加序号范围,以便接收方能够区分不同的帧。

  • 发送方需要缓存多个分组,以便在出现错误时进行重传。

4.3.3 后退 N 帧协议中的滑动窗口

Q: 后退 N 帧协议的滑动窗口机制是怎样的?
A: 发送方维护一个大于 1 的发送窗口,接收方维护一个等于 1 的接收窗口。发送方可以发送窗口内的所有帧,接收方只能接收窗口内的帧。

4.3.4 GBN 发送方必须响应的三件事

Q: GBN 发送方需要响应哪些事件?
A: 1. 上层的调用: 发送方需要检查发送窗口是否已满,如果未满,则发送帧;如果已满,则将数据返回给上层。
2. 收到一个 ack: 发送方收到 ack 后,会移动发送窗口,并继续发送新的帧。
3. 超时事件: 如果出现超时,发送方会重传所有已发送但未被确认的帧。

4.3.5 GBN 接收方要做的事情

Q: GBN 接收方需要做什么?
A: 1. 如果正确收到按序的帧,则发送确认帧,并将数据交付给上层。
2. 如果收到失序的帧,则丢弃该帧,并重新发送确认帧。

4.3.6 发送窗口大小的限制

Q: 为什么 GBN 协议的发送窗口大小有限制?
A: 因为如果发送窗口大小超过 ,其中 n 为帧序号的比特数,则接收方无法区分新帧和旧帧。

采用 个比特给分组编序号,则发送窗口的取值范围是

4.4 选择重传协议(SR 协议)

4.4.2 选择重传协议中的滑动窗口

Q: 选择重传协议 (SR) 的滑动窗口机制是怎样的?
A: SR 协议的发送方和接收方都维护一个滑动窗口,窗口大小可以大于 1。发送方可以发送窗口内的所有帧,接收方可以接收窗口内的所有帧,即使这些帧是乱序到达的。

Q: SR 协议中,发送方和接收方的滑动窗口分别有哪些状态?
A: - 发送方:
- 发完被确认的。
- 已经发送但等待确认的。
- 还能发送的。
- 还不能发的。

  • 接收方:
    • 希望收到但没收到的。
    • 等待接收的。
    • 收到且确认的(缓存)。

4.4.4 SR 接收方要做的事情

Q: SR 接收方需要做什么?
A: 1. 如果收到窗口内的帧,则确认该帧,并将数据缓存到接收窗口中。
2. 如果收到窗口外的帧,则丢弃该帧,并返回确认帧。
3. 当接收窗口中所有帧都按序到达时,将这些帧交付给上层,并移动接收窗口。

4.4.5 运行当中的 SR 过程

Q: SR 协议的运行过程是怎样的?
A: 1. 发送方连续发送多个帧。
2. 接收方对每个正确接收的帧进行单独确认。
3. 如果某个帧出现错误,发送方只重传该帧。
4. 接收方可以缓存乱序到达的帧,直到所有帧都按序到达后,再将这些帧交付给上层。

4.4.6 滑动窗口长度计算

Q: SR 协议中,滑动窗口长度的限制是什么?
A: - 发送窗口大小最好等于接收窗口大小。

  • 发送窗口和接收窗口的最大尺寸为 ,其中 n 为帧序号的比特数。

Q: 为什么 SR 协议的滑动窗口长度有限制?
A: 为了防止接收方无法区分新帧和旧帧。

停止-等待协议的实现原理

使用超时重传机制后,可以不用使用确认机制了

Q: 使用超时重传机制后,为什么可以不用使用确认机制了?
A: 使用超时重传机制后,可以不用使用确认机制了,因为发送方会根据超时时间来判断是否需要重传数据,而不需要接收方发送确认信息。

为了让接收方能够判断所收到的数据分组是否重复,需要给数据分组编号

Q: 为了让接收方能够判断所收到的数据分组是否重复,需要给数据分组编号,为什么?
A: 因为停止-等待协议的特性,只允许一个数据分组在传输过程中,所以只需要一个比特来编号即可,例如编号为 0 和 1。

数据链路层一般不会出现确认分组丢失的情况

Q: 数据链路层一般不会出现确认分组丢失的情况,为什么?
A: 因为数据链路层是点对点的传输,距离较短,确认分组丢失的概率较低。

给超时计时器设置的值的超时时间 RTO 应该适当选择

Q: 停止等待协议给超时计时器设置的值的超时时间 RTO 应该适当选择,为什么?
A: 因为 RTO 设置过短会导致频繁重传,降低传输效率;RTO 设置过长会导致重传延迟,影响传输效率。

在数据链路层,点对点的往返时间 RTT 比较固定,RTO 就比较容易设定

Q: 在数据链路层,点对点的往返时间 RTT 比较固定,RTO 就比较容易设定,为什么?
A: 因为数据链路层是点对点的传输,距离较短,RTT 比较稳定,所以 RTO 比较容易设定。

在运输层,由于端到端的往返时间非常不稳定,设置合适的超时时间 RTO 有时并不容易

Q: 在运输层,由于端到端的往返时间非常不稳定,设置合适的超时时间 RTO 有时并不容易,为什么?
A: 因为运输层是端到端的传输,距离较远,RTT 比较不稳定,所以设置合适的超时时间 RTO 有时并不容易。

停止-等待协议属于自动请求重传 (Automatic Repeat reQuest, ARQ) 协议

Q: 停止-等待协议属于自动请求重传 (Automatic Repeat reQuest, ARQ) 协议,为什么?
A: 因为停止-等待协议的重传请求是由发送方自动发起的,而不是接收方请求发送方重传。

回退 N 帧协议

发送窗口 的取值范围是

Q: 回退 N 帧协议中,发送窗口 的取值范围是 ,为什么?
A: 因为如果 大于 ,则会造成接收方无法分辨新数据帧和旧数据帧。

收到多个重复确认时,可以在重计时器之前尽早开始重传

Q: 回退N帧协议,收到多个重复确认时,可以在重计时器之前尽早开始重传,为什么?
A: 因为收到多个重复确认,说明接收方已经收到了这些数据分组,但是确认分组丢失了,所以发送方可以尽早开始重传,以提高传输效率。

接收窗口 的,因此只能按序接收数据分组

Q: 接收窗口 的,因此只能按序接收数据分组,为什么?
A: 因为接收窗口的大小为 1,表示接收方每次只能接收一个数据分组,并且接收窗口只能向前滑动一个位置,与同时给发送方发送相应确认分组。

为了减少开销,接收方不必每收到一个按序到达且无误码的数据分组就给发送方发送一个相应的确认分组

Q: 回退N帧协议,为了减少开销,接收方不必每收到一个按序到达且无误码的数据分组就给发送方发送一个相应的确认分组,为什么?
A: 因为接收方可以进行累计确认,即允许接收方不需要每收到一个正确的数据帧就立即发回一个确认帧,而可在连续收到多个正确的数据帧后,对最后一个数据帧发回确认信息。

回退N帧协议中,发送方可以在自己有数据分组要发送时,才对之前按序接收的数据分组进行捎带确认

接收方收到未按序到达的数据分组后,除了丢弃之外,还可以对该数据分组进行重复确认,以便发送方尽快重传

回退 N 帧协议在流水传输的基础上,利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续 ARQ 协议

回退 N 帧协议在流水传输的基础上,利用发送窗口来限制发送方连续发送数据分组的数量,是一种连续 ARQ 协议,

在信道质量较差(容易出现误码)的情况下,回退 N 帧协议的信道利用率并不比停止-等待协议的信道利用率高

Q: 在信道质量较差(容易出现误码)的情况下,回退 N 帧协议的信道利用率并不比停止-等待协议的信道利用率高,为什么?
A: 因为回退 N 帧协议在信道质量较差的情况下,会频繁出现超时重传,导致传输效率降低,信道利用率下降。

Q: 选择重传协议的发送窗口大小的范围是多少?
A: 选择重传协议的发送窗口大小的范围是

Q: 选择重传协议的接收窗口大小的范围是多少?
A: 选择重传协议的接收窗口大小的范围是 ,发送窗口大小的范围是

Q: 选择重传协议中,发送窗口和接收窗口大小的限制是什么?
A: 选择重传协议中,发送窗口和接收窗口大小的限制是

Q: 选择重传协议中,接收窗口大小超过发送窗口大小有什么问题?
A: 选择重传协议中,接收窗口大小超过发送窗口大小没有意义。

Q: 选择重传协议中,当接收窗口大小最大值为 时,发送窗口能取到的最大值也是 ,为什么?
A: 因为选择重传协议中,发送窗口和接收窗口大小的限制是 ,当接收窗口大小最大值为 时,发送窗口能取到的最大值也是

Q: 选择重传协议中,确保接收窗口向前滑动后,落入接收窗口内的序号与之前旧序号没有重叠,避免无法分辨新旧数据分组,为什么?
A: 因为选择重传协议中,接收窗口大小可以大于 1,接收方可以接收窗口内的所有帧,即使这些帧不是按顺序到达的。为了防止接收方无法分辨新帧和旧帧,需要确保接收窗口向前滑动后,落入接收窗口内的序号与之前旧序号没有重叠。

Q: 从滑动窗口的角度对比停止-等待协议、回退N帧协议和选择重传协议,有什么区别?
A: - 停止-等待协议:发送窗口和接收窗口大小都为 1,只使用 1 个比特给数据分组编号。

  • 回退N帧协议:发送窗口大小大于 1,接收窗口大小为 1,使用 n(n>1) 个比特给数据分组编号。
  • 选择重传协议:发送窗口和接收窗口大小都可以大于 1,使用 n(n>1) 个比特给数据分组编号,并且发送窗口和接收窗口大小的限制是

Q: 停止-等待协议、回退N帧协议和选择重传协议,三种协议的优缺点是什么?
A: - 停止-等待协议:实现简单,但信道利用率低。

  • 回退N帧协议:信道利用率比停止-等待协议高,但重传效率低。
  • 选择重传协议:信道利用率第二高,但实现复杂。

Q: 停止-等待协议、回退N帧协议和选择重传协议,三种协议的应用场景是什么?
A: - 停止-等待协议:适用于信道质量较好的场景。

  • 回退N帧协议:适用于信道质量一般的场景。
  • 选择重传协议:适用于信道质量较差的场景。