选择重传

选择重传协议通过让发送方仅重传那些它怀疑在接收方出错的分组而避免了不必要的重传。

  • 选择重传要点
  • 选择重传个别的、按需的重传要求接收方逐个地确认接收的分组。
  • 选择重传发送方的事件与动作
    - 从上层收到数据。当从上层接收到数据后,SR发送方检查下一个可用于该分组的序号。如果序号位于发送方的窗口内,则将数据打包并发送;否则就像在GBN中一样,要么将数据缓存,要么将其返回给上层以便以后传输。
    - 超时。定时器被用来防止丢失分组。然而,现在每个分组必须拥有其自己的逻辑定时器,因为超时发生后只能发送一个分组。可以使用单个硬件定时器模拟多个逻辑定时器的操作。
    - 收到ACK。如果收到ACK,倘若该分组序号在窗口内,则SR发送方将那个被确认的分组标记为已接收。如果该分组的序号等于send_dase,则窗口基序号向前移动到具有最小序号的未确认分组处。如果窗口移动了并且有序号落在窗口内的未发送分组,则发送这些分组。
  • 选择重传接收方的事件与动作
  • 序号在[rcv_base,rcv_base+N-1]内的分组被正确接收。在此情况下,收到的分组落在接收方的窗口内,一个选择ACK被回送给发送方。如果该分组以前没收到过,则缓存该分组。如果该分组的序号等于接收窗口的基序号,则该分组以及以前缓存的序号连续的分组交付给上层。然后,接收窗口按向前移动分组的编号向上交付这些分组。
  • 序号在[rcv_base-N,rcv_base-1]内的分组被正确收到。在此情况下,必须产生一个ACK,即使该分组时接收方以前已确认过的分组。
  • 其他情况。忽略该分组。
  • 分组重排序问题
  • 在连接两端的“信道”是一个网络时,分组重新排序是可能会发生的。分组重新排序的一个表现就是,一个具有序号或确认好x的分组的旧副本可能会出现,即使发送方或接收方的窗口中都没有包含x。对于分组重新排序,信道可被看成基本上是在缓存分组,并在将来任意时刻自然地释放这些分组。由于序号可以被重新使用,那么必须小心,以免出现这样的冗余分组。实际应用中采用的方法是,确保一个序号不被重新使用,直到发送方“确信”任何先前发送的序号为x的分组都不再在网络中为止。通过假定一个分组在网络中的“存活”时间不会超过某个固定最大时间量来做到这一点。在高速网络的TCP扩展中,最长的分组寿命被假定为大约3分钟描述了一种使用序号的方法,它可使重新排序问题完全避免。