预备知识:滑动窗口协议
选择重传(SR)协议通过让发送方仅重传那些它怀疑在接收方出错(丢失或受损)的分组而避免了不必要的重传。这也就意味着SR接收方必须缓存那些接收到的正确但失序的分组。
SR发送方的事件与动作
- 从上层应用接收数据后,如果有可用序号免则发送数据,否则类似GBN协议缓存或返还数据。
- 每个分组必须拥有自己的逻辑定时器,因为不再采用累积确认了,超时事件发生只重传一个分组。
- 收到ACK,如果序号在窗口内(不包含窗口起始序号),则标记为已接收。若序号为窗口起始序号,则窗口向前移动,使起始序号位于已发送未确认的最小序号上。
SR接收方的事件与动作
- 如果收到的分组在接收窗口内,回送ACK。如果该分组在接收窗口起始序号上,则交付并移动窗口到未缓存的分组。如果没在起始序号上,则缓存该分组。
- 如果收到的分组在接收窗口前,即已经交付的分组,也需回送ACK(如果接收方不确认该分组,则发送方窗口将永远不能向前滑动)。
需要注意的是发送方和接收方的窗口并不总是一致的,考虑下面这种情况,接收方无法确认收到的是一个新分组还是一个重传分组。
该问题的产生是由于窗口过大引起的,因此对于SR协议而言,窗口长度必须小于或等于序号空间大小的一半。