计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR

        上一篇博文介绍了回退N帧协议,然而当一个分组丢失或被破坏,发送方要重新发送所有未完成分组,即使有些失序分组已经被安全完整地接收了,所以回退N帧协议也不是那么高效。 所以选择性重复协议Selective-RepeatSRprotocol),经被设计出来,正如其名字所示,只是选择性重发分组,即那些确实丢失的分组。

计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第1张图片

1.窗口

        选择性重复协议也使用两个窗口:一个发送窗口和一个接收窗口。然而,这些窗口与回退 N帧中的不同。首先,发送窗口的最大值更小;它是 2m–1。这里的原因我们稍后讨论。第二,接收窗口和发送窗口大小一致。下面是发送窗口。
计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第2张图片

        选择性重复协议允许和接收窗口一样多的分组失序到来并被存储,直到有一组连续分组被传递到应用层。因为发送窗口和接收窗口的大小是相同的,在发送窗口的所有分组可以失序到达并被存储,直到它们可以被传递。然而,我们需要强调的是,在可靠协议中,接收方从不向应用层传递失序分组。下面是接受窗口
计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第3张图片

2.计时器

        理论上讲,选择性重复为每个未完成分组使用一个计时器。当一个计时器终止,只有一个相应分组被发送。换言之, GBN(回退 N 帧)将未完成分组看做一个组; SR(选择性重复)将它们单独处理。然而,绝大多数实现了 SR 的传输层协议只使用一个计时器。

3.确认

        这两个协议之间还有一点不同。在 GBN ackNo 是累积的;它定义了下一个预期分组的序号,确认了之前的分组都安全完整到达。在 SR 中确认的语义是不同的。在 SR 中, ackNo 定义了被安全完整接收的一个分组;对其他分组没有反馈信息。

4.有限状态机

计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第4张图片

发送方

        发送方开始时处于准备状态,但是此后,它可能处于两种状态: 准备阻塞。以下列出了事件以及每个状态的相关动作。

准备状态

  • 如果请求来自应用层,发送方创建一个序号为 Sn的分组。分组的副本被存储,分组被发送。如果计时器没有在运行,发送方开启计时器。现在 Sn值开始增长,( Sn = Sn + 1modulo 2m。如果窗口已满, Sn =Sf + Ssizemodulo 2m,发送方进入阻塞状态。
  • 如果无差错 ACK 到达,其 ackNo 与一个未完成分组有关,分组被标记为未确认。如果ackNo = Sf,那么窗口向右方滑动,直到 Sf 指向第一个未确认分组(所有连续的已被确认分组现在处于窗口之外)。如果存在未完成分组,重新开启计时器;否则,停止计时器。
  • 如果一个被破坏分组或 ackNo 与未完成分组无关的无错分组到达,它就被丢弃。
  • 如果超时发生,发送方重发所有未完成分组并重新开启计时器。
阻塞状态

  • 如果 ackNo 与一个未完成分组相关的无错 ACK 到达,那么这个分组被标记为已确认。此外,如果 ackNo = Sf,那么窗口向右滑动,直到 Sf 指向第一个未确认分组(所有连续的已被确认分组现在处于窗口之外)。如果窗口已经滑动,发送方进入准备状态。
  • 如果一个被破坏 ACK ackNo 与未完成分组无关的无错 ACK 到达,那么 ACK 被丢弃。
  • 如果超时发生,发送方发送所有未完成分组并重新开启计时器。

接受方

  • 如果 seqNo 在窗口内的无错分组到达,分组被存储并且 ackNo = seqNo ACK 被发送。此外,如果 seqNo = Rn,那么分组以及之前连续到达的分组被传递到应用层,并且窗口滑动使得 Rn指向第一个空槽。
  • 如果 seqNo 在窗口之外的无错分组到达,分组被丢弃,但是 ackNo = RnACK 被返回到发送方。如果那些与 seqNo < Rn分组相关的 ACK 丢失,那么窗口需要滑动。
  • 如果被破坏分组到达,它被丢弃。

5.窗口大小

计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第5张图片

        如果窗口大小为 2,并且所有确认丢失,那么分组 0 的计时器超时且分组 0 被重发,因此这个重复分组被正确地丢弃(序号 0 不在窗口内)。当窗口大小为 3,并且所有确认丢失,那么发送方发送分组 0 的副本。然而,这次,接收方窗口期待接收分组 00 是窗口的一部分),因此它接收了分组 0,并且不把它看做一个重复分组,但是作为下一个循环中的分组。这明显是一个错误。

6.捎带

        我们在之前讨论的四个协议都是单向的:数据分组只沿着一个方向流动并且确认也是按一个方 向传递的。在现实生活中,数据分组通常是双向流动的:从客户到服务器以及从服务器到客户。这意味着确认也需要沿着两个方向流动。一种称为捎带piggybacking)的技术被用来提高双向协议的效率。当一个分组携带数据从 A B 时,它也携带了确认反馈,这些信息确认了来自 B 的分组已到达;当一个分组携带数据从 B A 时,它也携带了确认反馈,这些信息确认了来自 A 的分组已到达。下面是一个双向GBN的实例

计算机网络教程-传输层(十三)传输层基础协议:选择性重复协议SR_第6张图片




你可能感兴趣的:(计算机网络)