文章目录
-
- 滑动窗口协议(Sliding-window protocol)
-
- GBN(Go-Back-N/后退N帧协议)
- SR协议(Selective Repeat/选择重传协议)
滑动窗口协议(Sliding-window protocol)
- 窗口
- 允许使用的序列号范围
- 窗口尺寸为N:最多有N个等待确认的消息
- 滑动窗口
- 随着协议的运行,窗口再序列号空间内向前滑动
- 滑动窗口协议:GBN,SR
GBN(Go-Back-N/后退N帧协议)
发送方:
- 分组头部包含k-bit序列号
- 窗口尺寸为N,最多允许N个分组未确认
- ACK(n)机制:确认帧,表示接收到的字符无错误,确认到序列号n(包含n)的分组均已被正确接受
- 可能收到重复ACK
- 为空中的纷纷组设置计时器(timer)
- 超时的话需要重发
- 超时Timeout(n)事件:重传序列号≥n,即还未收到ACK的所有分组
接收方:
- ACK机制:发送拥有最高序列号的、已被正确接收的分分组的ACK
- 可能产生重复ACK
- 只需要记住唯一的expectedseqnum
- 乱序到达的分组
- 直接丢弃处理,但是接受方没有缓存
- 因此需要重新确认序列号最大的、按序到达的分组
SR协议(Selective Repeat/选择重传协议)
GBN重传时会重传多个分组,比如重传n时会重传n以及n序列号以后的分组
SR中解决这种问题:
- 接收方会对每个分组单独进行确认
- 设置缓存机制,缓存乱序到达的分组
- 发送方只重传那些没收到ACK的分组
- 为每个分组设置定时器
- 发送方窗口
- N个连续的序列号
- 限制已发送且未确认的分组
发送方工作
- 上层调用事件:上层发送数据时,先检查发送窗口
- 如果发送窗口未满:则生成数据帧,发送数据
- 如果发送窗口已满:发送方将该信息通知上层,让上层延迟发送
- ACK事件:逐一确认
- 接收确认帧:接收方收到ACK确认帧
- 标记已接收:发送窗口内将该帧序号对应的帧标记为已接收
- 移动发送窗口:如果该帧序号是发送窗口的下界(最左侧窗口),将发送窗口移动到最小序号的没有确认的帧位置;可能移动一个位置,也可能移动多个位置
- 发送未发送帧:发送窗口移动完毕后,如果发现该发送窗口中有没有发送的帧,就将这些帧发送出去
- 超时事件:每个帧都有自己的定时器,如果某个帧出现了定时器超时事件,重传该单个帧
接收方工作
- 接收正确帧:接收方接收正确的帧,不管其帧的顺序
- 失序处理:失序的帧,将会被缓存起来,并向发送方发送该失序帧的ACK确认帧
- 移动接收窗口:如果接收到的帧序号是接收窗口的下界(最左侧窗口),将成功接收到的连续数据交付给上层,将接收窗口移动到最小序号的没有接收到的帧位置;可能移动一个位置,也可能移动多个位置