TCP可靠传输

一、概述

1、什么是TCP可靠传输

​ 由于网络层是不可靠传输,因此TCP层采用一些措施来提供可靠的传输。

可靠的传输应该满足下面两个要求:

(1)传输的信道不产生差错;

(2)保证传输数据的正确性,无差错、不丢失、不重复、并且按序到达。

即正确传输,接收方及时处理发送的数据

2、TCP如何实现可靠传输

TCP为了提供可靠传输:

(1)首先,采用三次握手来建立TCP连接,四次握手来释放TCP连接,从而保证建立的传输信道是可靠的。

(2)其次,TCP采用了连续ARQ协议(回退N,Go-back-N;超时自动重传)来保证数据传输的正确性,使用滑动窗口协议来保证接方能够及时处理所接收到的数据,进行流量控制。

(3)最后,TCP使用慢开始拥塞避免快重传快恢复来进行拥塞控制,避免网络拥塞。

​ 这里我们先关注第二点:连续ARQ协议

二、连续ARQ协议

1、什么是ARQ协议

​ 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一。它包括停止等待ARQ协议和连续ARQ协议,错误侦测(Error Detection)、正面确认(Positive Acknowledgment)、逾时重传(Retransmission after Timeout)与负面确认继以重传(Negative Acknowledgment and Retransmission)等机制。

2、停止等待ARQ协议

​ 想要知道为什么TCP使用连续ARQ协议,首先我们来看下什么是停止等待ARQ协议。

以下我们关注从A发送到B的情况

image-20210110101333520

2.1 无差错情况

​ 在无差错情况下,A发送完M1后,就什么也不干,等到B收到数据包,返回确认信息后给A,A收到确认信息。才会继续发送下一个数据包

2.2 超时重传

​ 如果A在发送M1数据包给B的过程中出现差错,即不是正确的数据包到B这了。那么B就会丢弃。此时并不会给A返回确认信息。A在经过一段时间后,发现还是没有确认信息,就会将M1进行重传(即超时重传

注意

1、因为发送方发送的分组可能丢失,需要重传。所以需要保存已发送的分组副本。等到收到确认信息后,才会进行清除

2、超时时间需要略长于往返时间

2.3 确定丢失和确定迟到

当B收到A发送的数据,返回确认包时,存在丢失和迟到两种情况。针对这两种情况,有不同的处理方法

image-20210110134603955

1、确认丢失

​ B收到M1包,但是B回传的确认包丢失。A重传M1,B丢弃重复的M1包,并且B再次回传确认包

2、确认迟到

​ B收到M1包,但是B回传的确认包并没有立即到A那里,A以为没有发送成功,再次发送。B丢弃重复的M1包,并且回传确认包。A继续发送M2包,此时A终于收到了第一次B发的确认包,这时A什么也不做

即:只要没有收到确认包,就要重发。收到了确认包就不再发送重复的

2.4 信道利用率

​ 停止等待协议的优点是简单,但缺点是信道利用率太低。(一个包一个包的确认,效率太慢)

image-20210110135040007

  • TD表示发送分组数据包用的时间,RTT是数据包传输往返的时间,TA是接受确认用的时间。
  • 信道的利用率 U

image-20210110135110822

​ 可以到这样信道的利用率U是很低的。

3、连续ARQ协议

​ 由于停止等待ARQ协议的信道利用率很低,所以需要采用连续ARQ协议。该协议在发送端采用流水线方式进行发送数据,然后在等待这些数据包的确认

3.1 流水线传输

在发送端采用流水线方式进行传输。发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。(信道上一直有数据不间断的传送,可以获得很高的信道利用率)

image-20210110135750268

​ 现在大多采用这种方式,那如何保证可靠传输呢?

方式1:采用单个回传确认信息

3.2 单个确认

image-20210110140027117

假设发送窗口为5(表示发送端一次可以发送5个数据包)

1、当发送端收到1的接收确认后(表示数据包1已经被接收了)

2、滑动窗口向右滑动一位,将数据包1从窗口中删除。 即可继续发送数据包6

3、如果没有收到一个确认信息,那么就会停止继续发送数据包

问题: 滑动窗口方式仍需要每个数据包对应一个确认,效率不高(确认还是一个个确认)

方案:接收端采用 累积确认 方式

3.3 累积确认

接收方只要对按序到达的最后一个分组发送确认信息。即代表这个分组之前的所有分组都收到了

比如:发送方发了包1,包2,包3;包1含字节0到10,包2含字节11到20,包3含字节21到30。接受方成功收到包1,包2。那么接受方发回一个包含确认序号21的包,发送方就知道字节0到20(包1,包2)都成功收到,必要时要重发的只需从字节21开始。

​ 但是累积确认会有这么个问题:不能准确向发送方反应每个数据包的确认情况

比如:A向B发送了5个数据包,B只有3数据包没有收到。那么B只能向A发送收到前两个数据包的确认。那么A就会再向B发送3,4,5三个数据包。这种现象叫做Go-back-N(回退 N),表示需要再退回来重传已发送过的 N 个分组。

​ 所以当通信线路质量不好时,连续ARQ协议会带来不好的影响

参考链接:

https://blog.csdn.net/guoweimelon/article/details/50878503

https://blog.csdn.net/guoweimelon/article/details/50879588

https://baike.baidu.com/item/ARQ


如果本篇博客有任何错误和建议,欢迎大佬们批评指正

我是知逆,我们下期见

Peace

posted @ 2021-01-10 14:15  知逆  阅读(526)  评论(0编辑  收藏  举报