文章目录
一、 选择重传协议 ( SR ) 引入
二、 选择重传协议 ( SR ) 帧分类
三、 发送方 事件 ( 确认帧、超时事件 )
四、 接收方 事件 ( 接收帧 )
五、 滑动窗口长度
五、 选择重传协议 SR 重点
六、 选择重传协议 SR 计算示例
一、 选择重传协议 ( SR ) 引入
后退 N NN 帧协议 ( GBN ) 弊端 : 累计确认 机制 , 导致的批量重传 , 这些重传的帧 , 可能已经传输成功 , 就是因为之前的帧出错 , 导致传输成功的帧被丢弃 ;
上述弊端 解决方案 : 设置 单个帧确认机制 , 加大 接收窗口 , 设置接收缓存 , 可处理乱序到达的帧 ;
二、 选择重传协议 ( SR ) 帧分类
发送方 帧 分类 :
① 发送窗口外 , 发送完毕 , 被确认的帧 ; 滑动窗口已经划过的位置 ;
② 发送窗口内 , 发送完毕 , 被确认的帧 ;
③ 发送窗口内 , 发送完毕 , 等待确认的帧 ; 此时该数据帧需要被缓存 ;
④ 发送窗口内 , 还能发送的帧 ;
⑤ 发送窗口外 , 还不能发送的帧 ; 滑动窗口还没有滑到的位置 ;
接收方 帧 分类 :
① 接收窗口外 , 已经成功接收的帧 ;
② 接收窗口内 , 希望收到 , 但是未收到的帧 ;
③ 接收窗口内 , 希望收到 , 刚收到的帧 ;
④ 接收窗口内 , 不希望收到 , 却提前收到的帧 , 已经缓存下来 ;
⑤ 接收窗口内 , 等待接收的帧 ;
三、 发送方 事件 ( 确认帧、超时事件 )
上层调用事件 : 上层发送数据时 , 先检查 发送窗口 ;
① 如果 发送窗口 未满 : 则 生成 数据帧 , 发送数据 ;
② 如果 发送窗口 已满 : 发送方将该信息通知上层 , 让 上层 延迟发送 ;
A C K ACKACK 确认帧 事件 : 逐一确认 ;
① 接收确认帧 : 接收方收到 ACK 确认帧 ;
② 标记已接收 : 发送窗口 内 将该 帧序号 对应的帧 标记为 已接收 ;
③ 移动发送窗口 : 如果 该 帧序号 是 发送窗口 的下界 ( 最左侧窗口 ) , 将 发送窗口 移动到 最小序号的 没有确认 的帧位置 ; 可能移动 一个位置 , 也可能移动多个位置 ;
④ 发送未发送帧 : 发送窗口 移动完毕后 , 如果发现 该 发送窗口 中有没有发送的帧 , 就将这些帧发送出去 ;
超时事件 : 每个帧 都有 自己的定时器 , 如果 某个 帧出现了定时器超时事件 , 重传该单个帧 ;
四、 接收方 事件 ( 接收帧 )
接收方 事件 :
① 接收正确帧 : 接收方 接收 正确的帧 , 不管其帧的顺序 ;
② 失序处理 : 失序的帧 , 将会被缓存起来 , 并向 发送方 发送该 失序帧 的 ACK 确认帧 ;
③ 移动接收窗口 : 如果 接收到的 帧序号 是 接收窗口 的下界 ( 最左侧窗口 ) , 将成功接收到的连续数据交付给上层 , 将 接收窗口 移动到 最小序号的 没有接收到 的帧位置 ; 可能移动 一个位置 , 也可能移动多个位置 ;
五、 滑动窗口长度
发送窗口 与 接收窗口 大小相等 , 便于流量控制 ;
使用 n nn 比特 对 帧进行编号 , 发送窗口的尺寸 W T W_TW
T
和 接收窗口尺寸 W R W_RW
R
满足如下公式要求 :
W T = W R = 2 n − 1 W_T = W_R = 2^{n - 1}
W
T
=W
R
=2
n−1
五、 选择重传协议 SR 重点
选择重传协议 SR 重点 :
① 数据帧 逐一确认 , 接收方收到一个帧 , 就会单独发送该帧的确认帧 ;
② 重传 出错 的 单个帧 ;
③ 接收方 有缓存 ;
④ 滑动窗口大小 : W T = W R = 2 n − 1 W_T = W_R = 2^{n - 1}W
T
=W
R
=2
n−1
;
六、 选择重传协议 SR 计算示例
数据链路层 使用 选择重传协议 SR , 发送方发送了 0 , 1 , 2 , 3 0 , 1, 2,30,1,2,3 帧 , 当前时刻 , 收到了 1 11 号确认帧 , 0 , 2 0, 20,2 号帧出现超时 , 则需要重发哪些帧 ? ??
SR 协议是收到一帧 , 确认一帧 ;
1 11 号帧 已经确认 , 不用重发 ;
0 , 2 0 , 20,2 帧 超时 , 必须重发 ;
3 33 号帧 等待确认 , 当前时刻不用管 , 如果超时 , 就需要重发 , 当前没有超时 , 等待即可 ;
因此最终只需要重发 0 , 2 0 , 20,2 数据帧 ;