图解回退N帧协议(GBN)- 窗口为什么是2^N-1?

博客探讨了GBN协议中接收窗口大小为1的原因,并以此为基础,解释了多帧滑动窗口和选择重传(SR)协议中接收窗口不应超过ACK序号范围一半的逻辑,强调了网络协议中顺序接收的重要性。

牢记GBN的接收窗口大小为1,切按顺序接收!
在这里插入图片描述按照这个逻辑同理,可以得到为什么多帧滑动窗口与选择重传(SR)协议中接收窗口大小不应超过ACK序号范围的一半。

### 回退N帧协议GBN)的工作原理 回退N帧协议(Go-Back-N Protocol, GBN)是一种用于数据链路层的滑动窗口协议,主要用于确保数据在不可靠信道上的可靠传输。其核心思想是通过引入发送窗口接收窗口的概念来实现高效的数据传输和错误恢复。 #### 发送窗口接收窗口 GBN 使用发送窗口允许发送方一次发送多个数据帧而无需等待每个帧的确认。接收方则使用接收窗口来确定是否接受传入的帧。接收窗口大小通常为1,这意味着接收方只能按顺序接收帧[^2]。 #### 工作机制 1. **发送过程**:发送方可以在发送窗口内连续发送多个帧,直到窗口填满或没有更多数据需要发送。 2. **确认机制**:接收接收到正确的帧后会向发送方发送确认(ACK)。如果帧损坏或丢失,则不会发送确认。 3. **错误恢复**:当发送方检测到超时(即未在规定时间内收到确认),它将重新发送从最后一个被确认的帧开始的所有帧。这种行为被称为“回退N”,其中N表示需要重传的帧数[^3]。 #### 超时与重传 超时设置对于GBN至关重要。如果发送方未能在指定时间内收到某个帧的确认,它会假设该帧及其之后的所有帧都已丢失或损坏,并从该帧开始重新传输所有帧。这种策略虽然简单,但在高误码率或网络拥塞的情况下可能导致不必要的重传[^4]。 #### 示例代码 以下是一个简单的伪代码示例,展示GBN的基本逻辑: ```python def gbn_sender(window_size, timeout): base = 0 # 指向最早未被确认的帧 next_seq_num = 0 # 下一个要发送的帧序号 while base < total_frames: if next_seq_num < base + window_size and next_seq_num < total_frames: send_frame(next_seq_num) next_seq_num += 1 ack = wait_for_ack(timeout) # 等待确认消息 if ack is not None and ack >= base: base = ack + 1 # 更新窗口的起始位置 else: retransmit_from(base) # 如果超时或确认无效,则回退并重传 ``` #### 优点与缺点 - **优点**:GBN 的实现相对简单,适用于低误码率的环境。 - **缺点**:在高误码率或网络拥塞情况下,可能会导致大量不必要的重传,从而降低效率[^5]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值