TCP实现可靠数据传输原理

TCP是将报文段交给IP网络层传送的,而IP层是实现尽力而为的交付服务,并不是可靠的数据传输,所以TCP采用了一些机制来实现可靠的数据传输,使两个传输层的通信变得可靠。

一.工作原理:

1.可靠传输的要求
可靠的数据传输应该满足以下两个要求:
1.确保传输的信道不产生差错
2.保证数据传输的正确性,无差错,不重复,不丢失,按序到达。

这里有两层意思,一是能够正确的传输数据,二是接收方能够及时处理收到的数据

2.可靠传输的工作原理
TCP为了提供可靠传输:
(1)TCP采用三次握手来建立连接,四次挥手来释放连接,从而保证了建立的通信信道是可靠的。
(2)其次TCP采用了连续ARQ(回退N步;超时自动重传)协议,来保证数据传输的正确性,同时采用了滑动口协议来保证接收方及时的处理接受到的数据,进行流量控制。
(3)最后TCP采用慢开始,拥塞避免,快重传和快回复来进行拥塞控制,避免网络阻塞。

二.实现过程

1.三次握手
2.四次挥手
这两个在此略过,可以参考我之前的一篇博客《深入学习TCP协议》

3.TCP连续ARQ协议和滑动窗口协议
一.ARQ协议
ARQ协议即自动重传请求,是OSI模型中传输层和链路层的错误纠正协议之一。它通过确认和重传机制,在不可靠的IP传输的基础上实现可靠的数据传输。如果发送方在一段时间内没有收到确认,那么就会重新发送。ARQ包括停止等待ARQ和连续ARQ.拥有错误检测(Error Detection)、正面确认(Positive Acknowledgment)、超时重传(Retransmission after Timeout)和 负面确认及重传(Negative Acknowledgment and Retransmission)等机制。

(1)停止等待ARQ协议
要想弄明白为什么TCP要使用连续ARQ协议,首先需要弄清楚停止等待ARQ协议的原理。

TCP 连接是全双工的连接,也就是说在通信的时候,双方既是发送方,也是接收方。下面为了简化问题,只考虑一方发送,一方接受的情况。其中,A作为发送方,B作为接收方。

1.无差错情况
A发送分组M1,发送完就暂停发送,等待B的确认。B收到M1就向A发送确认。A在收到了对M1的确认后,就再发送下一个分组M2。依次下去发送剩余的数据…如下图所示:
在这里插入图片描述
2.出现差错
这里有两种情况,一是A发送的数据在过程中出现了差错,那么B在检测到了A发来的数据有错误的情况下,会直接丢弃,并不做任何回应,还有一种情况当A的数据报在发送的过中丢失的话,对这两种情况,B不会发送任何信息。

那既然是可靠的数据传输协议,那么一定有他自己的方法,A在一段时间内如何没有收到B的确认,就认为刚才的分组丢了,就会在重新发送,这既是超时重传机制。

超时重传的机制很简单,在A发送了一个分组后,设置了一个超时定时器,在超过定时器的时间内,如果没有收到确认,就重传该分组,如果收到了确认,就撤销这个超时定时器。如下图所示
在这里插入图片描述
这里应该注意的是:
①既然发送方发送的分组很有可能丢失,那么在发送一个分组以后要保留分组的副本,在收到确认后再删除副本。
②分组和确认分组都应该有编号,这样才可以知道应该发送哪个分组,收到了哪个分组的确认信息。
③超时计时器设置的时间应该略长于分组传送往返时间。

3.确认丢失和确认延迟
上面说的都是发送存在的问题,那接受方也可能有问题。

例如,如果A发送了M1分组,到达B,B发送了M1确认信息,但由于网络原因,该确认信息丢失。那么这个时候,A在超时重传时间内,没有收到B的确认信息,而且它并不知道是自己的分组有差错、丢失,还是B发生的确认丢失了。因此,A会在超时重传过后,重传M1分组。

接收方B会采取这两个行动:
①B会丢弃M1分组,不向上层交付。(B之前已经收到过M1分组了)

②向A发送确认(因为A重发了,肯定重传时间内没有收到确认信息)

还有可能是另一种情况,就是B发送了确认,没有丢失,但是延迟了。也就是说,B发送的确认在A超时计时器过期后才到达。 这种情况下,A会重新发送分组,接受到B的又一次确认后在发送下一个分组,后面会受到B最开始迟到的确认,但是什么都不做。
在这里插入图片描述
根据上述的确认和重传机制,我们就可以在不可靠的网络上实现可靠的传输。
4.信道利用率

停止等待ARQ协议的优点是简单,但也有很严重的确定,就是信道利用率太低。如下图所示:
在这里插入图片描述
信道利用率U = TD / (TD + RTT + TA)

二.连续ARQ协议
由于停止等待ARQ协议信道利用率太低,所以需要使用连续ARQ协议来进行改善。这个协议会连续发送一组数据包,然后再等待这些数据包的ACK。

发送方采用流水线传输。流水线传输就是发送方可以连续发送多个分组,不必每发完一个分组就停下来等待对方确认。如下图所示:

在这里插入图片描述
连续ARQ协议通常是结合滑动窗口协议来使用的,发送方需要维持一个发送窗口,如下图所示:
在这里插入图片描述
图(a)就是发送方维持的窗口,它的意思是,在发送窗口内的五个分组可以连续发送出去,不需要等待对方的确认,这样提高了信道的利用率。

连续ARQ协议规定,发送方每收到一个确认,就把窗口向前移动一个,如图b如果原来发送了前五个,那么现在可以发送第六个了。

接收方一般是采用累计确认的方式,不是对每一个收到的的分组都发送给=一个确认,而是在收到连续的几个有序分组后,对最后一个分组确认,这样就代表在这个分组之前的所有分组都收到了。

累积确认的优点是容易实现,即使确认丢失也不必重传。但缺点是,不能正确的向发送方反映出接收方已经正确收到的所以分组的信息。比如发送方发送了前5个分组,而中间的第3个分组丢失了,这时候接收方只能对前2个发出确认。而不知道后面3个分组的下落,因此只能把后面的3个分组都重传一次,这种机制叫Go-back-N(回退N),表示需要再退回来重传已发送过的N个分组。

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

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

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

在这里插入图片描述

规则:

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

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

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

此外,TCP利用滑动窗口协议来进行流量控制,如下图所示:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41478279/article/details/88747630