📖 3.2.3 (2) 可靠传输的实现机制 - 停止-等待协议(SW)
🎯 课程摘要:本节课介绍最简单的可靠传输实现机制——停止-等待协议(Stop-and-Wait, SW)。发送方每发送一个数据分组就停止等待接收方的确认(ACK),通过确认/否认、超时重传、分组编号三种机制在不可靠信道上实现可靠传输。重点包括协议工作过程、序号方案、RTO 设置以及信道利用率分析。
📝 详细笔记
1. 基本实现原理
- 概念定义:停止-等待协议(SW)是指发送方每发送完一个数据分组就停止发送,等待接收方的确认分组(ACK)后才能发送下一个数据分组。
- 原理解析:
- 发送方发送一个数据分组 → 接收方差错检测 → 无误码则接受并发送确认分组 ACK → 发送方收到 ACK 后发送下一个分组。
- 发送方每发送一个数据分组后,不能立即从发送缓存中删除该分组,因为可能需要重传;只有收到针对该分组的 ACK 后才能删除。
2. 三大核心机制
机制一:确认、否认与重传
- 接收方检测出误码 → 丢弃数据分组 → 发送否认分组 NAK → 发送方重传该数据分组。
- 局限:若数据分组、ACK 或 NAK 丢失,仅有确认/否认/重传无法实现可靠传输。
机制二:超时重传
- 发送方每发送完一个数据分组就启动一个超时计时器。
- 若到了**超时重传时间 RTO(Retransmission Time-Out)**仍未收到 ACK 或 NAK,就重传已发送的数据分组。
- RTO 设置原则:一般将 RTO 设置为略大于收发双方之间的平均往返时间 RTT(Round-Trip Time)。
- 数据链路层点对点:RTT 比较固定,RTO 容易设定。
- 运输层端到端:RTT 非常不确定,设定合适 RTO 并不容易。
机制三:分组编号(序号)
- 为什么需要序号:ACK 丢失会导致发送方超时重传,接收方收到两个相同数据分组 → 分组重复。为避免分组重复,必须给每个分组带上序号(sequence number)。
- 数据分组序号:SW 协议每发送完一个分组就停止等待,只要新分组序号与上一个不同即可,因此用 1 个比特编号就够了(序号 0 和 1)。
- 接收方连续收到序号相同的数据分组 → 识别为重复 → 丢弃重复分组,并向发送方再发送一个 ACK。
- 确认分组序号:ACK 也需要编号,所用比特数与数据分组相同(1 比特)。
- 若不编号:ACK 迟到导致发送方超时重传 0 号分组后,又收到迟到的 0 号 ACK,发送方会将其误认为是对 1 号分组的确认 → 出错。
- 编号后:发送方可知是对 0 号的重复确认,忽略即可。
- ⚠️ 重点/考点:
- 数据链路层一般不会出现 ACK 迟到的情况,因此数据链路层实现 SW 协议可以不给 ACK 编号。
- 使用超时重传机制后,可以不使用否认(NAK)机制,使协议更简单。但点对点链路误码率较高时,使用 NAK 可在超时前尽快重传。
3. 协议交互过程(Mermaid 时序图)
场景一:正常发送(无差错)
场景二:数据分组出现误码
场景三:数据分组丢失(超时重传)
场景四:确认分组丢失(超时重传 + 序号防重复)
场景五:确认分组迟到(序号防混淆)
4. 自动请求重传 ARQ
- 概念定义:停止-等待协议属于**自动请求重传 ARQ(Automatic Repeat reQuest)**协议,即重传请求由发送方自动进行,而非接收方请求发送方重传某个序号的数据分组。
5. 信道利用率分析
- 参数定义:
- T_D:发送方发送数据分组所耗费的发送时延。
- RTT:信号在收发双方之间往返传播所耗费的时间。
- T_A:接收方发送确认分组所耗费的发送时延(一般远小于 T_D,可忽略)。
- 信道利用率 U 计算公式:
U = T_D / (T_D + RTT + T_A)
- 分析:
- 当 RTT ≫ T_D(如地球同步卫星链路):数据分组很小、发送速率很大时,信道利用率很低 → 不适合用 SW 协议。
- 当 RTT ≪ T_D(如无线局域网):信道利用率较高。
- 若出现超时重传,信道利用率还要进一步降低。
- ⚠️ 重点/考点:RTT 相对较大时,为提高信道利用率应改用回退 N 帧协议或选择重传协议。
6. 408 考研真题示例
- 题目类型:给定主机甲、乙间采用 SW 协议,忽略确认帧发送时延,求使信道利用率达某值时的数据帧长度 X。
- 解题思路:
- 信道利用率 U = T_D / (T_D + RTT + T_A),其中 T_A 忽略。
- 设数据帧长度为 X 比特,代入发送速率求 T_D = X / 发送速率。
- 代入已知量求解 X。
- 答案示例:X = 800 比特(选项 D)。
💡 核心总结
- SW 协议:发送窗口 = 1,接收窗口 = 1,每发一个分组就停止等待。
- 三大机制:确认/否认/重传 → 超时重传 → 分组编号(数据分组与 ACK 各用 1 比特编号)。
- RTO 应略大于 RTT;使用超时重传后可省去 NAK。
- 信道利用率 U = T_D / (T_D + RTT + T_A),RTT 大时利用率低,应改用 GBN 或 SR。
❓ 课后思考 / 经典考题
- 停止-等待协议为什么只需要 1 比特给数据分组编号?能否用更多比特?
- 确认分组是否必须编号?在数据链路层和运输层有何不同?
- 为什么使用超时重传后可以不使用否认(NAK)机制?
- 已知发送速率、单向传播时延、忽略确认帧发送时延,求使 SW 协议信道利用率达到 50% 的数据帧长度。