自顶向下 | 选择重传协议

1,681 阅读2分钟

预备知识:滑动窗口协议

选择重传(SR)协议通过让发送方仅重传那些它怀疑在接收方出错(丢失或受损)的分组而避免了不必要的重传。这也就意味着SR接收方必须缓存那些接收到的正确但失序的分组。

SR发送方的事件与动作

  1. 从上层应用接收数据后,如果有可用序号免则发送数据,否则类似GBN协议缓存或返还数据。
  2. 每个分组必须拥有自己的逻辑定时器,因为不再采用累积确认了,超时事件发生只重传一个分组。
  3. 收到ACK,如果序号在窗口内(不包含窗口起始序号),则标记为已接收。若序号为窗口起始序号,则窗口向前移动,使起始序号位于已发送未确认的最小序号上。

SR接收方的事件与动作

  1. 如果收到的分组在接收窗口内,回送ACK。如果该分组在接收窗口起始序号上,则交付并移动窗口到未缓存的分组。如果没在起始序号上,则缓存该分组。
  2. 如果收到的分组在接收窗口前,即已经交付的分组,也需回送ACK(如果接收方不确认该分组,则发送方窗口将永远不能向前滑动)。

需要注意的是发送方和接收方的窗口并不总是一致的,考虑下面这种情况,接收方无法确认收到的是一个新分组还是一个重传分组。

该问题的产生是由于窗口过大引起的,因此对于SR协议而言,窗口长度必须小于或等于序号空间大小的一半。