【计算机网络】数据链路层 : 后退 N 帧协议 GBN ( 滑动窗口 | 您所在的位置:网站首页 › 数据帧的大小收到哪些因素的限制 › 【计算机网络】数据链路层 : 后退 N 帧协议 GBN ( 滑动窗口 |
文章目录一、 滑动窗口协议引入二、 后退 N 帧协议 ( GBN ) 滑动窗口三、 后退 N 帧协议 ( GBN ) 运行过程四、 后退 N 帧协议 ( GBN ) 发送方数据分类五、 后退 N 帧协议 ( GBN ) 发送方 需要 响应的事件 ( 累计确认 、超时发送机制)六、 后退 N 帧协议 ( GBN ) 接收方 需要 响应的事件 ( 按序接收 、确认帧发送机制 )七、 后退 N 帧协议 ( GBN ) 运行细节八、 后退 N 帧协议 ( GBN ) 发送窗口长度九、 后退 N 帧协议 ( GBN ) 重点十、 后退 N 帧协议 ( GBN ) 计算示例十一、 后退 N 帧协议 ( GBN ) 协议性能一、 滑动窗口协议引入 "停止-等待" 协议 弊端 : 信道利用率低 , 发送完一帧后等待 , 这个时候信道完全是空闲的 ; 为了提高信道利用率 , 发送端 发送完一帧后 , 不用等待 接收端的 ACK 确认帧 , 立刻发送 第二帧 , 第三帧 , 这样信道的利用率就提高了 ; 相应协议也要做一些更改 : ① 增加 发送方 的 帧 序号范围 ; ② 发送方 缓存 多个 帧分组 ; 连续发送 N帧 , 其中某一帧 可能需要重传 , 但不知道哪一帧需要重传 , 这里 需要将这 N帧全部缓存下来 ; 这里有引出了两个在 “停止-等待” 协议基础上 , 改进的两个协议 : 后退 N帧协议 ( GBN ) 选择重传协议 ( SR )二、 后退 N 帧协议 ( GBN ) 滑动窗口后退 N 帧协议 滑动窗口 : ① 发送窗口 : 发送方 维持的 一组 连续的 允许发送的 帧序号 ; ( 本质是 序号 ) , 可以有多个 ; ② 接收窗口 : 接收方 维持的 一组连续的 允许接受的 帧序号 ; ( 本质是 序号 ) , 只有 1个 ; 三、 后退 N 帧协议 ( GBN ) 运行过程后退 N 帧协议 运行过程 : ① 初始发送方滑动窗口 : \{ 0 , 1 , 2 , 3 , 4, 5 \}② 发送备份 0帧 : 发送方 发送 0号帧 , 同时 建立 0帧副本 , 为后面可能需要重传做准备 ; ③ 发送备份 1帧 : 发送方 紧接着 发送 1号帧 , 建立 1帧 副本 ; ④ 接收方 滑动窗口 : \{ 0 \}⑤ 接收确认 0帧 : 接收方 接收到了 0号帧 , 回复 ACK 0给发送方 , 表示收到 0帧 ; ⑥ 接收窗口滑动 : 接收方 将 接收窗口 向前滑动一格 ; ⑦ 接收方 滑动窗口 : \{ 1 \}⑧ 发送窗口 滑动 : 发送方 收到 ACK 0, 此时 0号帧已经发送完毕 , 将滑动窗口向前移动一格 ; ⑨ 发送方滑动窗口 : \{ 1 , 2 , 3 , 4, 5 , 6 \}四、 后退 N 帧协议 ( GBN ) 发送方数据分类发送方 根据 滑动窗口 状态 , 将数据分为以下 四类 : ① 发送完确认的帧 : 数据发送完毕 , 已经收到了接收端确认信息 ; ② 发送完等待确认的帧 : 数据发送完毕 , 还没有收到确认信息 ; ③ 还能发送的帧 : 滑动窗口中 , 还没有发送的帧 ; ④ 还不能发送的帧 : 滑动窗口 后面的帧 ; 五、 后退 N 帧协议 ( GBN ) 发送方 需要 响应的事件 ( 累计确认 、超时发送机制)上层调用事件 : 上层发送数据时 , 先检查 发送窗口 ; ① 如果 发送窗口 未满 : 则 生成 数据帧 , 发送数据 ; ② 如果 发送窗口 已满 : 发送方将该信息通知上层 , 让 上层 延迟发送 ; ACK确认帧 事件 : ① 累计确认 : GBN 协议中 , 采用 累计确认 方式 , 如果收到一个确认帧 , 默认已经收到了 该帧 , 及之前的全部帧 ; ② 不逐一确认 : 接收方 不用 对每个 数据帧 逐一返回确认帧 , 可以每隔一段时间返回一个确认帧 ; 超时事件 : “后退 N 帧协议” 顾名思义 , 如果出现 帧丢失 , 帧延迟 等错误 , 就会回退到 上一个 确认的帧 后面的第一帧位置 , 重传 N帧 ; ① 重发 1帧 : 停止-等待协议 只会 重发 没有确认的 一帧 数据 ; ② 重发 N帧 : 后退 N帧协议 , 会重发 没有收到确认的 N帧数据 ; 六、 后退 N 帧协议 ( GBN ) 接收方 需要 响应的事件 ( 按序接收 、确认帧发送机制 )后退 N 帧协议 接收方 需要 响应的事件 : ① 收到正确帧 : 收到的帧 正确 , 并且顺序正确 ; 为接收的 N帧发送 ACK 确认信息 , 将该帧的数据交给上层 ; ② 没有收到正确帧 : 收到错误帧 , 或 顺序错误 ; 接收方 为 最近的 正确的帧 发送 ACK , 丢弃错误帧 ; 示例 : ① 出错场景 : 接收端 成功接收了 1,2,3号帧 , 等待接收 4号帧 , 但是直接接收到了 5,6号帧 , 此时 4号帧丢失 ; ② 处理方案 : 将 5,6号帧 丢弃 , 重新发送 最近 正确的帧序号 , 将 ACK 3会送给发送端 , 通知发送端从 4号帧开始发送 ; 七、 后退 N 帧协议 ( GBN ) 运行细节后退 N 帧协议 运行细节 : ① 发送端连续发送 : 发送窗口 大小为 4, 可以一次性发送 4帧数据 , \{ 0, 1, 2, 3 \}; 发送端 发送 0帧 , 接收方 接收到 0帧 , 返回 ACK 0; 发送端 发送 1帧 , 接收方 接收到 1帧 , 返回 ACK 1; ② 丢失 2帧 : 发送端 发送 2帧 , 2号帧 半路丢失 , 接收方 没有收到 2帧 ; ③ 期待 2帧 : 接收方 的 期待帧是 第 2帧 ; ④ 接收方 获知 丢帧 : 发送方 发送 3帧 , 接收方 接收到 3帧 , 此时发现 2帧丢失 , 直接丢弃 3帧 , 并向接收方 发送 上一个成功接收的帧的确认信息 ACK 1, 让发送方从 第 2帧开始发送 ; ⑤ 发送方 收到 ACK 确认帧 : 发送方 收到 ACK 0之后 , 发送窗口 向后 滑动一位 , 变成 \{ 1, 2, 3 , 4 \}; 发送方 收到 ACK 1之后 , 发送窗口 向后 滑动一位 , 变成 \{ 2, 3 , 4 , 5\}; ⑥ 发送超时处理 : 如果 发送方 一直 没有收到 ACK 2, 等待时间超时 , 就会 后退 N帧 , 重发 2 , 3, 4, 5帧 ; 八、 后退 N 帧协议 ( GBN ) 发送窗口长度后退 N 帧协议 滑动窗口长度 : 使用 n比特 对 帧进行编号 , 发送窗口的尺寸 W_T满足如下公式要求 : 1 \leq W_T \leq 2^{n} - 1如果不满足上述公式 , 就会因为 发送窗口 过大 , 接收方 无法识别 新帧 和 旧帧 ; 滑动窗口示例 : 如使用 2比特 进行帧编号 , 那么滑动窗口大小是 1 \leq W_T \leq 3; 如果滑动窗口有 4比特 , 那么发送 0 , 1, 2, 3四帧数据 给 接收端 , 四个帧全部丢失 , 此时就会将 四个帧 再次重传 , 这 4帧数据 , 是重发的旧的帧 还是下一个滑动窗口 新的帧 , 无法确定 ; 九、 后退 N 帧协议 ( GBN ) 重点发送方 累计确认 机制 : 收到 ACK N, 就表示 N号帧及之前的帧 , 全部正确 ; 接收方 按序接收 : 接收方 只能 按照顺序接收 , 人如果中间有帧丢失 , 那么后续帧全部丢弃 ; 接收方 确认帧 : 接收方 如果 收到错误帧 , 失序帧 , 那么查找最近成功接收的正确的帧的最大的 , 按序到达的帧 序号是多少 , 发送该帧对应的 ACK 确认帧 ; 发送窗口 : n是帧序号编码长度 , 发送窗口大小 最大是 2^n - 1, 最小 1; 十、 后退 N 帧协议 ( GBN ) 计算示例数据链路层 采用 后退 N帧协议 , 发送方 发送了 0,1,2,3,4,5,6,7编号的数据帧 , 当计时器超时时 , 只接收到了 0 , 2, 3帧的确认帧 , 发送方需要重发的帧数时 4,5,6,7帧 ; 计时器超时 , 发送方 发送 已发送 , 但是没有被 确认 的帧 ; 确认机制 是 累计确认 的 , 发送方 接收到了 3确认帧 , 说明 3之前的帧已经成功接收了 , 虽然没有收到 1确认帧 , 但是该帧已经默认接收成功 ; 重发 没有被确认的帧 , 即 4,5,6,7帧 ; 十一、 后退 N 帧协议 ( GBN ) 协议性能后退 N 帧协议 ( GBN ) 协议性能 : ① 优点 : 发送端可以先 连续 发送 滑动窗口中的 N帧 数据帧 , 提高了信道利用率 ; ② 缺点 : 选择重传时 , 将某些正确发送的数据帧进行了重传 , 降低了传输效率 ; 为了解决上述弊端 , 引入了 选择重传协议 ; |
CopyRight 2018-2019 实验室设备网 版权所有 |