TCP可靠传输原理

一 可靠传输原理:


由于IP层只提供尽最大努力的服务,即TCP下面是不可靠的传输,所以TCP必须采取措施使通信变为可靠的。

使用下述的确认和重传机制,我们就可以在不可靠的运输网络上实现可靠的通信。

下述这种可靠运输协议常称为自动重传请求ARQ(Automatic Repeat reQuest):意思是重传的请求时自动进行的,接收方不用告诉发送方重传那个出错分组。常用的自动重传请求协议包括:停止-等待ARQ协议、连续ARQ协议(后退N ARQ协议)和选择重传ARQ协议。


(一)停止等待协议:就是每发送一个分组就停止发送,等待对方的确认,在确认收到后再发送下一个分组。


(1)无差错情况。

如下图:A发送分组M1,发送完就暂停,等待B的确认。B收到M1就发送确认。A收到M1的确认后,再发送分组M2。同样,收到对M2的确认后,A再发送M3。



(2)有差错情况:

1.出错的两种情况:

*B收到了A发送的分组M1时检测出了错误,那么就丢弃分组M1,什么也不做。

*分组M1在传送过程中丢失了,这时B当然什么都不知道。

以上两种情况,B都不会发送任何消息。

2.可靠传输协议的设计:A只要超过一段时间没有收到分组的确认,就认为刚发送的分组丢失了,就重传前面发送过的分组,即超时重传。要实现超时重传就要在每发送完一个分组设子一个超时计时器。如果在超时计时器到期之前收到确认,就撤销已设置的超时计时器。

3.注意三点:

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

*分组和确认分组都必须进行编号。

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

如下图:



(3)确认丢失和确认迟到

1.确认丢失:

B的确认分组丢失了,A在设定重传时间内没有收到分组的确认,因此,在重传时间到期后就要重传分组。这时B又收到了重复的分组,这时B采取的动作:

*第一,丢弃这个重传的分组,不向上层交付。

*第二,向A发送确认。

如下图:


2.确认迟到:

A会收到重复的分组确认,A收下后丢弃。B仍然会收到重复的分组,B的采取动作如上。

如下图:


(4)信道利用率:

停止等待协议的优点是简单,缺点是信道利用率太低。

发送方可以采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发送一个分组停顿下来等待对方的确认,这样就可以获得很高的信道利用率。

用到流水线传输,就要利用下述的连续ARQ协议和滑动窗口协议。



(二)连续ARQ协议

1.发送方维持一个发送窗口:位于发送窗口内的分组可以连续发送出去,不必等待对方的确认。

连续ARQ协议规定:发送方每收到一个确认,就把发送窗口向前活动一个分组的位置。如下图:

1.它的意义是:位于发送窗口内的5个分组都可以连续发送出去,而不需要等待对方的确认,这样就提高了信道利用率。 

连续ARQ协议规定,发送方每收到一个确认,就把发送窗口向前滑动一个分组的位置。例如上面的图(b),当发送方收到第一个分组的确认,就把发送窗口向前移动一个分组的位置。如果原来已经发送了前5个分组,则现在可以发送窗口内的第6个分组。 

2.接收方一般都采用累积确认的方式:接收方收到几个分组后,对按序到达的最后一个分组发送确认

例如:发送方发送5个分组给接收方,但是中间第3个分组丢失了。这时接收方只能对前两个分组进行确认,发送方无法知道后三个分组的下落,所以需要重传后三个分组。这就是Go-back-N(后退N):表示需要再退回来重传已发送过的N个分组。

二、滑动窗口协议

滑动窗口协议在在发送方和接收方之间各自维持一个滑动窗口,发送发是发送窗口,接收方是接收窗口,而且这个窗口是随着时间变化可以向前滑动的。它允许发送方发送多个分组而不需等待确认。TCP的滑动窗口是以字节为单位的。

如下图所示,发送窗口中有四个概念:已发送并收到确认的数据(不在发送窗口和发送缓冲区之内)、已发送但未收到确认的数据(位于发送窗口之内)、允许发送但尚未发送的数据(位于发送窗口之内)、发送窗口之外的缓冲区内暂时不允许发送的数据。

接收窗口中也有四个概念:已发送确认并交付主机的数据(不在接收窗口和接收缓冲区之内)、未按序收到的数据(位于接收窗口之内)、允许的数据(位于接收窗口之内)、不允许接收的数据(位于发送窗口之内)。

规则:

(1)凡是已经发送过的数据,在未收到确认之前,都必须暂时保留,以便在超时重传时使用。

(2)只有当发送方A收到了接收方的确认报文段时,发送方窗口才可以向前滑动几个序号。

(3)当发送方A发送的数据经过一段时间没有收到确认(由超时计时器控制),就要使用回退N步协议,回到最后接收到确认号的地方,重新发送这部分数据。

此外,TCP利用滑动窗口协议来进行流量控制,如下图所示:



(三)选择重传ARQ协议:

猜你喜欢

转载自blog.csdn.net/allen_walker_qaq/article/details/80718806