TCP滑动窗口协议以及ARQ协议
一、核心背景与目的
背景: 网络传输可能会出现丢包、重复包、出错或乱序等问题。
目的: 通过在发送方和接收方维护"缓冲区"(Buffer),利用重传机制解决可靠性问题。
二、协议的演进过程
-
问题一:如何保证次序? 采用"发一个,等一个确认(Ack)"的模式。虽然保证了顺序和可靠性,但由于需要频繁等待,吞吐量极低。
-
问题二:如何提高吞吐量? 采用"批量发送"模式。一次发送多个包再统一等待确认,减少了等待时间,提高了效率。
-
问题三:如何实现最优解? 引入"滑动"的概念。不需要等一整批确认完才发下一批,而是只要收到最前面的一个确认,窗口就向后移动一位,立即发送下一个新包。这就是滑动窗口。
三、滑动窗口的实现机制

窗口缓冲区示例:
- 已发送并已确认(灰色): 传输已完成的数据
- 已发送但未确认(黄色): 数据已发出,正在等待接收方的 Ack
- 待发送(绿色): 在窗口范围内,准备好随时可以发送的数据
- 未发送/未读入内存(白色): 还在缓冲区外,尚未进入窗口的数据
窗口的大小(Window Size) 是固定的,它限制了发送方在收到确认之前可以发出的最大数据量。
不同传输场景下的表现
- 正常情况: 当发送方收到窗口最左侧包的确认后,窗口向右滑动一格,新的数据包进入窗口
- 丢包/丢失确认情况: 如果某个包的确认一直没收到,窗口就会卡住,无法向右滑动
- 超时重发: 超过一定时间仍未收到确认,发送方触发超时重传
四、ARQ 协议

ARQ(Automatic Repeat Request,自动重传请求)协议是数据传输中确保可靠性的机制,主要分为两大类:
1. 停止等待 ARQ 协议(Stop-and-Wait)
发送窗口和接收窗口大小均为 1。发送一个包后,必须等待接收方的确认后才能发送下一个。
特点:
- 优点:原理简单
- 缺点:等待时间长,高速链路下信道利用率极低
2. 连续 ARQ 协议(Continuous ARQ)
允许发送方连续发送一组数据包,无需等待每个包的单独确认。
A. 后退N帧 ARQ(Go-Back-N, GBN)
- 接收方: 一旦检测到丢包或出错,丢弃从第一个丢失包开始的所有后续包
- 发送方: 收到 NACK 或超时后,从指定包开始重传该包及之后的所有包
B. 选择重传 ARQ(Selective Repeat, SR)
- 发送方: 连续发送多个包,但为每个包维护独立的定时器
- 精准重传: 当某个包的 ACK 超时未收到时,只重传该丢失的包,而非整个序列
关键约束: 发送窗口大小(Ws)必须 ≤ 序号总数