【计算机网络】数据链路层 : 选择重传协议 SR ( 帧分类 | “发送方“ 确认帧、超时事件 | “接受方“ 接收帧机制 | 滑动窗口长度 | 计算示例 )★

文章目录

  • 一、 选择重传协议 ( SR ) 引入
  • 二、 选择重传协议 ( SR ) 帧分类
  • 三、 发送方 事件 ( 确认帧、超时事件 )
  • 四、 接收方 事件 ( 接收帧 )
  • 五、 滑动窗口长度
  • 五、 选择重传协议 SR 重点
  • 六、 选择重传协议 SR 计算示例

一、 选择重传协议 ( SR ) 引入


后退

N

帧协议 ( GBN ) 弊端 : 累计确认 机制 , 导致的批量重传 , 这些重传的帧 , 可能已经传输成功 , 就是因为之前的帧出错 , 导致传输成功的帧被丢弃 ;

上述弊端 解决方案 : 设置 单个帧确认机制 , 加大 接收窗口 , 设置接收缓存 , 可处理乱序到达的帧 ;

二、 选择重传协议 ( SR ) 帧分类


发送方 帧 分类 :

① 发送窗口外 , 发送完毕 , 被确认的帧 ; 滑动窗口已经划过的位置 ;

② 发送窗口内 , 发送完毕 , 被确认的帧 ;

③ 发送窗口内 , 发送完毕 , 等待确认的帧 ; 此时该数据帧需要被缓存 ;

④ 发送窗口内 , 还能发送的帧 ;

⑤ 发送窗口外 , 还不能发送的帧 ; 滑动窗口还没有滑到的位置 ;

接收方 帧 分类 :

① 接收窗口外 , 已经成功接收的帧 ;

② 接收窗口内 , 希望收到 , 但是未收到的帧 ;

③ 接收窗口内 , 希望收到 , 刚收到的帧 ;

④ 接收窗口内 , 不希望收到 , 却提前收到的帧 , 已经缓存下来 ;

⑤ 接收窗口内 , 等待接收的帧 ;

三、 发送方 事件 ( 确认帧、超时事件 )


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

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

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

ACK

确认帧 事件 : 逐一确认 ;

① 接收确认帧 : 接收方收到 ACK 确认帧 ;

② 标记已接收 : 发送窗口 内 将该 帧序号 对应的帧 标记为 已接收 ;

③ 移动发送窗口 : 如果 该 帧序号 是 发送窗口 的下界 ( 最左侧窗口 ) , 将 发送窗口 移动到 最小序号的 没有确认 的帧位置 ; 可能移动 一个位置 , 也可能移动多个位置 ;

④ 发送未发送帧 : 发送窗口 移动完毕后 , 如果发现 该 发送窗口 中有没有发送的帧 , 就将这些帧发送出去 ;

超时事件 : 每个帧 都有 自己的定时器 , 如果 某个 帧出现了定时器超时事件 , 重传该单个帧 ;

四、 接收方 事件 ( 接收帧 )


接收方 事件 :

① 接收正确帧 : 接收方 接收 正确的帧 , 不管其帧的顺序 ;

② 失序处理 : 失序的帧 , 将会被缓存起来 , 并向 发送方 发送该 失序帧 的 ACK 确认帧 ;

③ 移动接收窗口 : 如果 接收到的 帧序号 是 接收窗口 的下界 ( 最左侧窗口 ) , 将成功接收到的连续数据交付给上层 , 将 接收窗口 移动到 最小序号的 没有接收到 的帧位置 ; 可能移动 一个位置 , 也可能移动多个位置 ;

五、 滑动窗口长度


发送窗口 与 接收窗口 大小相等 , 便于流量控制 ;

使用

n

比特 对 帧进行编号 , 发送窗口的尺寸

W_T

和 接收窗口尺寸

W_R

满足如下公式要求 :

W_T = W_R = 2^{n - 1}

五、 选择重传协议 SR 重点


选择重传协议 SR 重点 :

① 数据帧 逐一确认 , 接收方收到一个帧 , 就会单独发送该帧的确认帧 ;

② 重传 出错 的 单个帧 ;

③ 接收方 有缓存 ;

④ 滑动窗口大小 :

W_T = W_R = 2^{n - 1}

;

六、 选择重传协议 SR 计算示例


数据链路层 使用 选择重传协议 SR , 发送方发送了

0 , 1, 2,3

帧 , 当前时刻 , 收到了

1

号确认帧 ,

0, 2

号帧出现超时 , 则需要重发哪些帧

?

SR 协议是收到一帧 , 确认一帧 ;

1

号帧 已经确认 , 不用重发 ;

0 , 2

帧 超时 , 必须重发 ;

3

号帧 等待确认 , 当前时刻不用管 , 如果超时 , 就需要重发 , 当前没有超时 , 等待即可 ;

因此最终只需要重发

0 , 2

数据帧 ;