计算机网络笔记(三十二)——5.4可靠传输的工作原理
5.4.1停止等待协议
停止等待协议是计算机网络中用于实现可靠数据传输的基本协议,适用于具有比特差错或丢包的信道环境下。
一、协议核心原理
-
可靠传输三要素:
- 基于确认的重传(接收方显式反馈)
- 分组序列号(识别重复分组)
- 超时重传定时器(处理确认丢失)
-
基本工作流程:
- 每发送一个分组后停止等待确认
- 收到正确ACK后才发送下一分组
- 若超时未收到ACK则重传当前分组
二、关键机制设计
-
数据包编号系统:
- 采用1位序列号(0/1交替)
- 解决重复分组识别问题
- 示例:编号0的ACK确认表示期待收到编号1的下一个分组
-
超时重传机制:
- 时间需大于RTT(往返传播时间)
- 典型实现:每次超时后加倍等待时间(二进制指数退避)
-
错误处理方案:
- ACK校验失败:静默丢弃冗余ACK
- 分组损坏检测:通过校验和确认
- 数据传输中断:发送NAK加速恢复(可选)
三、协议状态机模型
四、性能特征分析
-
信道利用率公式:
U = (L/R) / (RTT + L/R)
L: 分组长度,R: 传输速率,RTT: 往返时延
-
典型场景效率对比:
网络环境 | 带宽 | RTT | 利用率 |
---|---|---|---|
局域网 | 1Gbps | 1ms | >90% |
广域网 | 100Mbps | 100ms | <10% |
-
优势与局限:
- 优点:实现简单、资源占用低
- 缺点:信道利用率低、不适用高速网络
- 演进方向:发展为滑动窗口协议提升效率
五、实际应用场景
- TFTP协议(简单文件传输)
- 无线传感器网络控制报文
- 物联网设备状态上报
- 卫星通信链路控制
六、典型问题解决
重复ACK处理:
当收到多个相同ACK时:
- 检查是否为预期序列号的ACK
- 若已处理过相同ACK则直接丢弃
- 保持当前状态不进行任何操作
示例报文交互:
Sender Receiver
|----Packet0------>|
|<-ACK0------------|
|----Packet1------>X(丢失)
|----Packet1(timeout)->|
|<-ACK1------------|
|----Packet0------>|
|<-ACK0------------|
该协议通过严格的时序控制和冗余防护机制,在不可靠信道上构建了可靠的传输通道。
5.4.2连续ARQ协议
一、协议核心机制
-
滑动窗口机制
发送方维护一个发送窗口(发送缓冲区),允许在未收到确认前连续发送多个分组
窗口大小_WS_表示最大允许发送的未确认分组数量 -
累积确认机制
接收方采用累积确认方式,对按序到达的最后一个分组发送ACK
例如:收到分组1、2、3后返回ACK3,表示所有≤3的分组都已正确接收 -
超时重传机制
每个发送的分组都设置超时计时器,超时后重传整个窗口分组(Go-Back-N原理)
窗口中的某个分组n未被确认时,后续所有分组n+1…都会被阻塞
二、工作流程(基于回退N步)
三、协议要素对比表
特性 | 停等ARQ | 连续ARQ |
---|---|---|
窗口大小 | 1 | WS ≥1 |
信道利用率 | 低 | 高 |
确认方式 | 单个确认 | 累积确认 |
错误处理 | 单独重传出错分组 | 重传出错分组及其后续 |
缓冲区要求 | 仅需1分组缓冲区 | 需要WS大小缓冲区 |
典型应用场景 | 低带宽网络 | 高带宽延迟积网络 |
四、关键算法实现
发送方逻辑
- 从上层接收数据组帧,存入发送窗口
- 当窗口未满时连续发送分组
- 每次收到ACKn后,窗口移动至n+1位置
- 超时事件触发全部未确认分组重传
接收方逻辑
- 只接收当前期望序号的正确分组(假设期望接收rn)
- 对rn分组进行校验:
- 通过:交付上层,返回ACK(rn)
- 失败/过时:丢弃并返回最近正确分组的ACK
五、性能优化技巧
-
窗口尺寸限制
最大窗口尺寸≤2ⁿ-1(n为序号位数),避免序号混淆
例如:3位序号最多允许7个未确认分组 -
冗余ACK处理
收到3次重复ACK立即触发快速重传(改进型ARQ) -
动态窗口调整
根据网络状况动态调整窗口大小(TCP拥塞控制基础)
典型故障处理流程
当分组2丢失时:
- 接收方缓存后续分组3-4
- 持续返回ACK1(最后正确接收的分组号)
- 发送方超时后重传分组2-4
- 接收方收到分组2后,按序交付2-4并返回ACK4