处理丢包:rdt 3.0与停等协议
rdt 3.0:经具有比特差错的丢包信道的可靠数据传输
假设现在信道既可能发生错误,也可能会丢失分组。如果发送端发送的数据在半路就丢失了,那么发送方就会无休止的等待,接收方没有收到数据,也会处于等待的状态。
因此发送方需要一个倒计时定时器(countdown timer),如果发送方在规定时间内没有收到ACK,就将该分组重传。另一种情况是,如果发送的分组并没有丢失,只是延误到达了,这样也会触发定时器重发。但是接收方可以根据分组的序号丢弃重复的分组。
| 发送方状态 / 事件 | 动作 / 下一状态 |
|---|---|
| call n / rdt_send | save DATA n; send; start_timer → wait ACK n |
| wait ACK n / timeout | resend DATA n; start_timer → wait ACK n |
| wait ACK n / valid ACK n | stop_timer → call (1-n) |
| wait ACK n / corrupt ACK or ACK (1-n) | 忽略;定时器继续 |
接收方仍是只使用ACK的交替比特接收方:正确的期望数据只交付一次,重复数据丢弃并再次确认。与rdt 2.2不同,本rdt 3.0模型不会在收到不匹配ACK时立即重传。
无丢包
分组丢失
ACK丢失
过早超时
互动实验
从丢包与延迟ACK中恢复
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
知识测验
题目
rdt 3.0的数据已交付,但ACK丢失。超时后应发生什么?
rdt 3.0能够正确工作,但是性能很差。因为停等协议,导致了发送方的利用率很低。
停等协议的利用率
设每个分组长位,链路速率为位/秒,传播往返时间为。忽略ACK发送时间与处理时间,无丢包时每个周期只有秒用于发送:
更短的超时并不会消除传播时延,反而可能制造不必要的重传。可靠性与链路利用率需要分别分析。
知识测验
题目
超时设置小于实际ACK返回时间,且无丢包,会怎样?
动手练习
计算停等发送方利用率
1 Gbps链路发送8000位分组,传播RTT为30毫秒。忽略ACK发送与处理时间。求发送时间、停等利用率与有效吞吐量。另外追踪一份A:单程20毫秒,首次ACK丢失,超时60毫秒。