您的位置:首页 > 理论基础 > 计算机网络

计算机网络教程-传输层(十二)传输层基础协议:回退N帧协议GBN

2018-03-28 14:21 761 查看

        为了提高传输效率(充满管道),当发送端等待确认时,必须传输多个分组。换言之,当发送端等待确认时,我们需要让不止一个分组处于未完成状态,以此确保信道忙碌。回退 N 帧的关键是我们在接收到确认之前,可以发送多个分组,但是接收端只能缓冲一个分组。我们保存被发送分组的副本直到确认到达。



1.发送窗口



        在每个窗口位置,某些序号定义了已经被发送的分组;其他序号定义了可以被发送的分组。窗口最大为2^m – 1 。窗口本身是一种抽象;三个变量定义了它任何时候的大小和位置。我们将这些变量称为 Sf(发送窗口,第一个未完成分组)、 Sn(发送窗口,下一个待发送分组)以及 Ssize (发送窗口,大小)。当 ackNo 大于等于 Sf 且小于 Sn(模运算)的无错 ACK 到达时,发送窗口可以滑动一个或多个槽

2.接受窗口

        接收窗口确保正确的数据分组被接收,并且确保正确的确认被发送。在回退 N 帧中,接收窗口的大小总是 1。接收方总是寻找特定分组是否到达。任何失序分组到达都会被丢弃并需要被重发。接收窗口也滑动,但是一次只滑动一个槽。当正确的分组被接收时,窗口滑动 Rn =( Rn + 1)modulo 2m 。

3.计时器

        尽管每个被发送分组都有计时器,但是在我们的协议中只使用一个计时器。原因是第一个未完成分组的计时器总是最先终止。当这个计时器终止时,我们重发所有未完成分组。当计时器终止时,发送方重发所有未完成分组。这就是为什么称为回退 N 帧。一旦超时,机器回退 N 个位置并重发所有分组。



4.有限状态机



5.发送方

准备状态。当发送方处于准备状态,可能发生四个事件。
 如果请求来自应用层,发送方创建一个序号为 Sn的分组。存储分组的副本,发送分组。如果计时器没有运行,发送方会开启唯一的计时器。 Sn的值增长,( Sn = Sn + 1) modulo 2m。如果窗口已满, Sn =( Sf + Ssize) modulo 2m,发送方进入阻塞状态。
如果无差错 ACK 到达,其 ackNo 与一个未完成分组有关,那么发送方滑动窗口(令 Sf =ackNo),并且如果所有未完成分组都被确认( ackNo = Sn),那么计时器停止。如果并不是所有未完成分组都被确认,那么计时器重新开启。
如果一个被破坏 ACK 或 ackNo 与未完成分组无关的无错 ACK 到达,它就被丢弃。
如果超时发生,发送方重发所有未完成分组并重新开启计时器。
阻塞状态,在这种情况下可能发生三个事件:

如果 ackNo
4000
与一个未完成分组相关的无错 ACK 到达, 那么发送方滑动窗口(令 Sf = ackNo),如果所有未完成分组被确认( ackNo = Sn),那么关闭计时器。如果所有未完成分组没有被确认,那 么重新开启计时器。之后,发送方进入准备状态。
如果一个被破坏 ACK 或 ackNo 与未完成分组无关的无错 ACK 到达,那么 ACK 被丢弃。
如果超时发生,发送方发送所有未完成分组并重新开启计时器。

6.接收方

接收方总是处于准备状态。唯一的变量 Rn被初始化为 0。可能发生三个事件:

如果 seqNo = Rn 的无错分组到达,分组中的报文被传递到应用层。之后窗口滑动, Rn =( Rn + 1) modulo 2m。最终 ackNo = Rn的 ACK 被发送。
如果 seqNo 在窗口之外的无错分组到来,分组被丢弃,但是 ackNo = Rn的 ACK 被发送。
如果被破坏分组到达,将被丢弃。

7.发送窗口大小

为什么发送窗口要小于2^m



8.积累作用



        尽管 ACK2 丢失,但是 ACK3 是积累的并且作为 ACK2 和 ACK3 进行服务。这就是为什么接收窗口一次只能滑动一个槽,而发送窗口可以一次滑动多个槽。

9.一个实例

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  回退N帧协议