一、概述
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的情况
2.1 无差错情况
在无差错情况下,A发送完M1后,就什么也不干,等到B收到数据包,返回确认信息后给A,A收到确认信息。才会继续发送下一个数据包
2.2 超时重传
如果A在发送M1数据包给B的过程中出现差错,即不是正确的数据包到B这了。那么B就会丢弃。此时并不会给A返回确认信息。A在经过一段时间后,发现还是没有确认信息,就会将M1进行重传(即超时重传)
注意:
1、因为发送方发送的分组可能丢失,需要重传。所以需要保存已发送的分组副本。等到收到确认信息后,才会进行清除
2、超时时间需要略长于往返时间
2.3 确定丢失和确定迟到
当B收到A发送的数据,返回确认包时,存在丢失和迟到两种情况。针对这两种情况,有不同的处理方法
1、确认丢失
B收到M1包,但是B回传的确认包丢失。A重传M1,B丢弃重复的M1包,并且B再次回传确认包
2、确认迟到
B收到M1包,但是B回传的确认包并没有立即到A那里,A以为没有发送成功,再次发送。B丢弃重复的M1包,并且回传确认包。A继续发送M2包,此时A终于收到了第一次B发的确认包,这时A什么也不做
即:只要没有收到确认包,就要重发。收到了确认包就不再发送重复的
2.4 信道利用率
停止等待协议的优点是简单,但缺点是信道利用率太低。(一个包一个包的确认,效率太慢)
- TD表示发送分组数据包用的时间,RTT是数据包传输往返的时间,TA是接受确认用的时间。
- 信道的利用率 U :
可以到这样信道的利用率U是很低的。
3、连续ARQ协议
由于停止等待ARQ协议的信道利用率很低,所以需要采用连续ARQ协议。该协议在发送端采用流水线方式进行发送数据,然后在等待这些数据包的确认
3.1 流水线传输
在发送端采用流水线方式进行传输。发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。(信道上一直有数据不间断的传送,可以获得很高的信道利用率)
现在大多采用这种方式,那如何保证可靠传输呢?
方式1:采用单个回传确认信息
3.2 单个确认
假设发送窗口为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