0%

GBN和SR协议窗口大小

滑动窗口协议的窗口大小总结

在滑动窗口协议中,窗口大小的设置必须满足一定的条件,才能确保数据传输的正确性与可靠性。不同的协议由于机制不同,对窗口大小的限制也不同,以下分别对 Go-Back-N(GBN)和 Selective Repeat(SR)协议进行说明。

Go-Back-N(GBN)协议的窗口大小限制

在 GBN 协议中,发送方允许连续发送多个帧而不必等待每个帧的确认,而接收方的窗口大小固定为 1,只能按序接收数据帧。一旦出现丢包,接收方会丢弃后续所有帧,发送方在超时后会回退并重发这些帧。

为了避免由于编号回绕带来的混淆,GBN 协议要求发送窗口大小必须 小于序号编号空间的总数。如果序号是 k 位二进制数,那么其最大编号为 $2^k$,因此必须满足以下条件:
$$
\text{发送窗口大小} < 2^k
$$
如果窗口大小等于或大于 $2^k$,则在 ACK 丢失或超时重传的情况下,接收方可能会把“旧的重传帧”误认为是“新的一轮数据帧”,从而导致数据重复、顺序错乱等错误。

Selective Repeat(SR)协议的窗口大小限制

SR 协议相比 GBN 更加灵活,它允许接收方缓存乱序到达的帧,并分别对每个帧进行确认与重传。这就意味着接收方必须能够正确地区分当前轮次的帧和之前轮次的重传帧。

为了防止编号冲突和数据重复,SR 协议对窗口大小限制更加严格:发送窗口和接收窗口的大小之和必须不超过序号编号空间的一半。即,如果序号是 k 位二进制数,最大序号空间为 $2^k$,则必须满足:
$$
\text{窗口大小} ≤ 2^{(k-1)}
$$

总结对比表

协议名称 窗口大小限制 说明
Go-Back-N (GBN) $\text{窗口大小} < 2^k$ 接收方只接受按序帧
Selective Repeat (SR) $\text{窗口大小} ≤ 2^(k-1)$ 接收方可缓存乱序帧,需防止重号冲突

通过合理设置窗口大小,可以保障滑动窗口协议的正确性、可靠性和高效性。

  • 注:GBN、SR和TCP都是流水线协议