【计算机网络】数据链路层 : 后退 N 帧协议 GBN ( 滑动窗口 | 发送窗口长度 | “发送方“ 累计确认、超时机制 | “接收方“ 按序接收、确认帧发送机制 | 计算示例 )★





一、 滑动窗口协议引入



"停止-等待" 协议 弊端 : 信道利用率低 , 发送完一帧后等待 , 这个时候信道完全是空闲的 ;


为了提高信道利用率 , 发送端 发送完一帧后 , 不用等待 接收端的 ACK 确认帧 , 立刻发送 第二帧 , 第三帧 , 这样信道的利用率就提高了 ;


相应协议也要做一些更改 :

① 增加 发送方 的 帧 序号范围 ;

② 发送方 缓存 多个 帧分组 ; 连续发送 N N N 帧 , 其中某一帧 可能需要重传 , 但不知道哪一帧需要重传 , 这里 需要将这 N N N 帧全部缓存下来 ;


这里有引出了两个在 “停止-等待” 协议基础上 , 改进的两个协议 :

  • 后退 N N N 帧协议 ( GBN )
  • 选择重传协议 ( SR )




二、 后退 N 帧协议 ( GBN ) 滑动窗口



后退 N 帧协议 滑动窗口 :

① 发送窗口 : 发送方 维持的 一组 连续的 允许发送的 帧序号 ; ( 本质是 序号 ) , 可以有多个 ;

② 接收窗口 : 接收方 维持的 一组连续的 允许接受的 帧序号 ; ( 本质是 序号 ) , 只有 1 1 1 个 ;





三、 后退 N 帧协议 ( GBN ) 运行过程



后退 N 帧协议 运行过程 :

① 初始发送方滑动窗口 : { 0 , 1 , 2 , 3 , 4 , 5 } \{ 0 , 1 , 2 , 3 , 4, 5 \} {0,1,2,3,4,5}

② 发送备份 0 0 0 帧 : 发送方 发送 0 0 0 号帧 , 同时 建立 0 0 0 帧副本 , 为后面可能需要重传做准备 ;

③ 发送备份 1 1 1 帧 : 发送方 紧接着 发送 1 1 1 号帧 , 建立 1 1 1 帧 副本 ;

④ 接收方 滑动窗口 : { 0 } \{ 0 \} {0}

⑤ 接收确认 0 0 0 帧 : 接收方 接收到了 0 0 0 号帧 , 回复 ACK 0 0 0 给发送方 , 表示收到 0 0 0 帧 ;

⑥ 接收窗口滑动 : 接收方 将 接收窗口 向前滑动一格 ;

⑦ 接收方 滑动窗口 : { 1 } \{ 1 \} {1}

⑧ 发送窗口 滑动 : 发送方 收到 ACK 0 0 0 , 此时 0 0 0 号帧已经发送完毕 , 将滑动窗口向前移动一格 ;

⑨ 发送方滑动窗口 : { 1 , 2 , 3 , 4 , 5 , 6 } \{ 1 , 2 , 3 , 4, 5 , 6 \} {1,2,3,4,5,6}





四、 后退 N 帧协议 ( GBN ) 发送方数据分类



发送方 根据 滑动窗口 状态 , 将数据分为以下 四类 :

① 发送完确认的帧 : 数据发送完毕 , 已经收到了接收端确认信息 ;

② 发送完等待确认的帧 : 数据发送完毕 , 还没有收到确认信息 ;

③ 还能发送的帧 : 滑动窗口中 , 还没有发送的帧 ;

④ 还不能发送的帧 : 滑动窗口 后面的帧 ;





五、 后退 N 帧协议 ( GBN ) 发送方 需要 响应的事件 ( 累计确认 、超时发送机制)



上层调用事件 : 上层发送数据时 , 先检查 发送窗口 ;

① 如果 发送窗口 未满 : 则 生成 数据帧 , 发送数据 ;

② 如果 发送窗口 已满 : 发送方将该信息通知上层 , 让 上层 延迟发送 ;



A C K ACK ACK 确认帧 事件 :

① 累计确认 : GBN 协议中 , 采用 累计确认 方式 , 如果收到一个确认帧 , 默认已经收到了 该帧 , 及之前的全部帧 ;

② 不逐一确认 : 接收方 不用 对每个 数据帧 逐一返回确认帧 , 可以每隔一段时间返回一个确认帧 ;



超时事件 : “后退 N 帧协议” 顾名思义 , 如果出现 帧丢失 , 帧延迟 等错误 , 就会回退到 上一个 确认的帧 后面的第一帧位置 , 重传 N N N 帧 ;

① 重发 1 1 1 帧 : 停止-等待协议 只会 重发 没有确认的 一帧 数据 ;

② 重发 N N N 帧 : 后退 N N N 帧协议 , 会重发 没有收到确认的 N N N 帧数据 ;





六、 后退 N 帧协议 ( GBN ) 接收方 需要 响应的事件 ( 按序接收 、确认帧发送机制 )



后退 N 帧协议 接收方 需要 响应的事件 :

① 收到正确帧 : 收到的帧 正确 , 并且顺序正确 ; 为接收的 N N N 帧发送 ACK 确认信息 , 将该帧的数据交给上层 ;

② 没有收到正确帧 : 收到错误帧 , 或 顺序错误 ; 接收方 为 最近的 正确的帧 发送 ACK , 丢弃错误帧 ;


示例 :

① 出错场景 : 接收端 成功接收了 1 , 2 , 3 1,2,3 1,2,3 号帧 , 等待接收 4 4 4 号帧 , 但是直接接收到了 5 , 6 5,6 5,6 号帧 , 此时 4 4 4 号帧丢失 ;

② 处理方案 : 5 , 6 5,6 5,6 号帧 丢弃 , 重新发送 最近 正确的帧序号 , 将 A C K 3 ACK 3 ACK3 会送给发送端 , 通知发送端从 4 4 4 号帧开始发送 ;





七、 后退 N 帧协议 ( GBN ) 运行细节



后退 N 帧协议 运行细节 :

① 发送端连续发送 :

  • 发送窗口 大小为 4 4 4 , 可以一次性发送 4 4 4 帧数据 , { 0 , 1 , 2 , 3 } \{ 0, 1, 2, 3 \} {0,1,2,3} ;

  • 发送端 发送 0 0 0 帧 , 接收方 接收到 0 0 0 帧 , 返回 ACK 0 0 0 ;

  • 发送端 发送 1 1 1 帧 , 接收方 接收到 1 1 1 帧 , 返回 ACK 1 1 1 ;


② 丢失 2 2 2 帧 : 发送端 发送 2 2 2 帧 , 2 2 2 号帧 半路丢失 , 接收方 没有收到 2 2 2 帧 ;


③ 期待 2 2 2 帧 :收方 的 期待帧是 第 2 2 2 帧 ;


④ 接收方 获知 丢帧 : 发送方 发送 3 3 3 帧 , 接收方 接收到 3 3 3 帧 , 此时发现 2 2 2 帧丢失 , 直接丢弃 3 3 3 帧 , 并向接收方 发送 上一个成功接收的帧的确认信息 ACK 1 1 1 , 让发送方从 第 2 2 2 帧开始发送 ;


⑤ 发送方 收到 ACK 确认帧 :

  • 发送方 收到 ACK 0 0 0 之后 , 发送窗口 向后 滑动一位 , 变成 { 1 , 2 , 3 , 4 } \{ 1, 2, 3 , 4 \} {1,2,3,4} ;

  • 发送方 收到 ACK 1 1 1 之后 , 发送窗口 向后 滑动一位 , 变成 { 2 , 3 , 4 , 5 } \{ 2, 3 , 4 , 5\} {2,3,4,5} ;


⑥ 发送超时处理 : 如果 发送方 一直 没有收到 ACK 2 2 2 , 等待时间超时 , 就会 后退 N N N 帧 , 重发 2 , 3 , 4 , 5 2 , 3, 4, 5 2,3,4,5 帧 ;





八、 后退 N 帧协议 ( GBN ) 发送窗口长度



后退 N 帧协议 滑动窗口长度 :

使用 n n n 比特 对 帧进行编号 , 发送窗口的尺寸 W T W_T WT 满足如下公式要求 :

1 ≤ W T ≤ 2 n − 1 1 \leq W_T \leq 2^{n} - 1 1WT2n1


如果不满足上述公式 , 就会因为 发送窗口 过大 , 接收方 无法识别 新帧 和 旧帧 ;


滑动窗口示例 :

如使用 2 2 2 比特 进行帧编号 , 那么滑动窗口大小是 1 ≤ W T ≤ 3 1 \leq W_T \leq 3 1WT3 ;

如果滑动窗口有 4 4 4 比特 , 那么发送 0 , 1 , 2 , 3 0 , 1, 2, 3 0,1,2,3 四帧数据 给 接收端 , 四个帧全部丢失 , 此时就会将 四个帧 再次重传 , 4 4 4 帧数据 , 是重发的旧的帧 还是下一个滑动窗口 新的帧 , 无法确定 ;





九、 后退 N 帧协议 ( GBN ) 重点



发送方 累计确认 机制 : 收到 ACK N N N , 就表示 N N N 号帧及之前的帧 , 全部正确 ;


接收方 按序接收 : 接收方 只能 按照顺序接收 , 人如果中间有帧丢失 , 那么后续帧全部丢弃 ;


接收方 确认帧 : 接收方 如果 收到错误帧 , 失序帧 , 那么查找最近成功接收的正确的帧的最大的 , 按序到达的帧 序号是多少 , 发送该帧对应的 ACK 确认帧 ;


发送窗口 : n n n 是帧序号编码长度 , 发送窗口大小 最大是 2 n − 1 2^n - 1 2n1 , 最小 1 1 1 ;





十、 后退 N 帧协议 ( GBN ) 计算示例



数据链路层 采用 后退 N N N 帧协议 , 发送方 发送了 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 0,1,2,3,4,5,6,7 0,1,2,3,4,5,6,7 编号的数据帧 , 当计时器超时时 , 只接收到了 0 , 2 , 3 0 , 2, 3 0,2,3 帧的确认帧 , 发送方需要重发的帧数时 4 , 5 , 6 , 7 4,5,6,7 4,5,6,7 帧 ;


计时器超时 , 发送方 发送 已发送 , 但是没有被 确认 的帧 ;

确认机制 是 累计确认 的 , 发送方 接收到了 3 3 3 确认帧 , 说明 3 3 3 之前的帧已经成功接收了 , 虽然没有收到 1 1 1 确认帧 , 但是该帧已经默认接收成功 ;

重发 没有被确认的帧 , 即 4 , 5 , 6 , 7 4,5,6,7 4,5,6,7 帧 ;





十一、 后退 N 帧协议 ( GBN ) 协议性能



后退 N 帧协议 ( GBN ) 协议性能 :

① 优点 : 发送端可以先 连续 发送 滑动窗口中的 N N N 帧 数据帧 , 提高了信道利用率 ;

② 缺点 : 选择重传时 , 将某些正确发送的数据帧进行了重传 , 降低了传输效率 ;


为了解决上述弊端 , 引入了 选择重传协议 ;

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值