TCP可靠传输的实现原理

(这一节提到的可靠传输协议并不是TCP采用的,在这里提到只是为了对后面的TCP可靠传输的讲解起到铺垫的作用)

       我们知道,TCP发送的报文段是交给IP层传送的。但IP层只能提供尽最大努力服务,也就是说,TCP下面的网络所提供的是不可靠的传输。因此,TCP必须采用适当的措施才能使两个运输层之间的通信变得可靠。

       理想的传输条件有以下两个特点:

1) 传输信道不产生差错。

2) 不管发送以多快的速度发送数据,接收方总是来得及处理收到的数据。

       在这样理想的传输条件下,不需要采取任何措施就能实现可靠传输。

       然而实际的网络都不具备以上两个理想条件。但我们可以使用一些可靠的传输协议,当出现差错让发送方重传出现的差错的数据,同时在接收方来不及处理收到的数据时,及时告诉发送方适当降低发送数据的速度,这样一来,本来不可靠的传输信道就能够实现可靠传输了。下面我们从最简单的停止等待协议讲起(运输层并不使用这种协议)。

停止等待协议

       全双工通信双方既是发送方也是接收方。下面我们仅考虑A发送数据而B接受数据并发送确认。因此A叫做发送方,而B叫做接收方。这里是讨论可靠传输的原理,因此把传送数据单元都称为分组,而并不是考虑数据是在哪一个层次上传送的(运输层传送的协议数据单元叫做报文段,网络层传送的协议数据单元叫做IP数据报。但在一般讨论问题时,都可以把他们简称为分组。)。“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认再发送下一个分组。

1. 无差错情况

      停止等待可用图(a)来说明。图(a)是最简单的无差错情况。A在发送分组M1,发送完后就暂停发送,等待B的确认。B收到了M1就向A发送确认。A在收到了对M1的确认后,就再发送下一个分组M2。同样,在收到B对M2的确认后,再发送M3。

2. 出现差错

       图(b)是分组在传输过程中出现差错的情况。B接收到了M1时检测出了差错,就丢弃M1,其他什么也不做(不通知A收到有差错的分组)。也可能是M1在传输过程中丢失了,这时B当然什么也不知道。在这两种情况下,B都不会发出任何信息。可靠传输协议是这样设计的:A只要超过一段时间仍然没有收到确认,就认为刚才发送的分组丢失了,因而重传前面的发送过的分组。这就叫做超时重传。要实现超时重传,就在每发送完一个分组时设置一个超时计时器。如果在超市计时器到期之前收到了对方的确认,就撤销自己设置的超时计时器。其实在图(a)中,A为每一个已发送的分组都设置了一个超时计时器,为了简单起见,在图(a)中都省略了。

       这里注意三点:

第一、A在发送完一个分组后,必须暂时保留已发送的分组的副本(在发送超时重传时使用)。只有在收到相应的确认后才能清除暂时保留的分组副本。

第二、 分组和确认分组都必须进行编号。这样才能明确是哪一个发送出去的分组收到了确认,而哪一个分组还没有收到确认。

第三、 超时计时器设置的重传时间应当比数据在分组时传输的平均往返时间更长一些。

3. 确认丢失和确认迟到

       下图(a1)说明的是另一种情况,B发送的对M1的确认丢失了。A在设定的超时重传时间内没有收到确认,并无法知道是自己发送的分组出错、丢失,或者是B发送的确认丢失了。因此A在超时计时器到期后就要重传M1。现在注意B的动作。假定B又收到了重传的分组M1,这时应采取两个行动。

第一、 丢弃这个重复的分组M1,不向上层交付。

第二、 向A发送确认。不能认为已经发送过确认就不再发送,因为A之所以重传M1.就表示A没有收到对M1的确认。

       上图(b1)也是可能出现的一种情况。传输过程中没有出现差错,但B对分组M1的确认迟到了。A会收到重复的确认。对重复的确认的处理很简单:收下后丢弃,B仍然会收到重复的M1,并且同样要丢弃重复的M1,并重传确认分组。

      通常A最终总是可以收到对所有发出的分组的确认。如果A不断重传分组但总是收不打确认,就说明通信线路太差,不能进行通信。

像上述的这种可靠传输协议常称为自动重传请求ARQ(Automatic Repeat reQuest)。意思是重传的请求时自动进行的,接收方不需要请求发送方重传某个出错的分组。

停止等待协议一个显著的特点是效率太低,信道利用率太低。我们可以使用下面介绍的连续ARQ协议。

连续ARQ协议

       连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。下图表示发送方收到对第1个分组的确认,于是把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,那么现在就可以发送窗口内的第6个分组了。

      接收方一般都是采用累积确认的方式,也就是说,接收方不必对收到的分组逐个发送确认,而是在收到几个分组后,对按序到达的最后一个分组发送确认,这就表示:到这个分组分组为止的所有分组都已正确收到了。

       累计确认优点:容易实现,即使确认丢失也不必重传。缺点:不能向发送方反映出接收方已经正确收到所有的分组的信息。

      例如,如果发送方发送了前5个分组,而中间的第3个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次。这就叫做Go-back-N(回退N),表示需要再退回来重传已经发送过的N个分组。可见,当通信线路质量不好时,连续ARQ协议会带来负面影响。

展开阅读全文

没有更多推荐了,返回首页