传输层——TCP协议如何保证可靠性并提高效率的?

TCP保证可靠性:
(1)校验和
(2)面向连接
(3)序号和确认序号
(4)确认应答机制 
(5)超时重传机制
(6)流量控制 
(7)拥塞避免
TCP提高效率:
(1)滑动窗口
(2)快重传 
(3)延迟应答
(4)捎带应答

TCP保证数据传输可靠性
1. TCP面向连接——“三次握手、四次挥手”
TCP在建立连接时需要“三次握手”建立连接,“四次挥手”断开连接
首先看一下“三次握手、四次挥手”的过程以及客户端和服务器的状态变化

在上图的“三次握手、四次挥手”的变化过程中,可以看到一个状态“TIMEWAIT”,那这是什么呢?
(1)率先断开连接的一方会进入TIMEWAIT状态,一般TIMEWAIT == 2*MSL,(MSL:报文的最大传输时间)。
不论在“三次握手”还是“四次挥手”过程中,最后一个响应报文ACK都不能够保证正常到达对端,为保证最后一个报文正常到达,率先断开连接的一方进入TIMEWAIT状态,如果在TIMEWAIT时间内,收到FIN报文,说明刚才发送的ACK发生丢包,若未收到任何报文,则说明刚才的ACK正常发送至对端。
(2)为什么TIMEWAIT==2*MSL?
MSL为报文传输的最大时间,2*MSL表示报文能够一来一回两次传输的最大时间。
如果ACK报文没有丢包,则会在MSL时间内正常到达对端,之后的MSL时间内client不会受到任何报文(没有消息就是最好的消息),表明刚才的ACK对方接收到了;
如果ACK报文丢包,则可能会在client等待的MSL时间内发送ACK,但中途丢包,之后client等待的MSL时间内,client一定会受到一个FIN,表明刚才的ACK丢包了,此时client会再次发送ACK响应。即,若丢包则一定会在2*MSL时间内重新收到一个FIN断开连接请求。
(3)为什么是“三次握手”,不能是两次、四次、五次?
首先我们看一下两次握手:

三次握手:

四次握手:
四次握手,client率先发起建立连接请求,会导致server认为连接建立好,client认为连接没建立好,与二次握手情况相同。
由此,我们也可以知道偶数次握手是不可以的。
五次握手:
五次握手与三次握手情况相同,但是三次握手已经可以解决最后一个报文丢包的问题,没必要用五次握手。

2 确认应答机制

3 超时重传机制
针对在传输过程中的丢包问题,可以分为两类:一类是响应报文丢包,一类是数据报文丢包
响应报文丢包:

数据报文丢包:

4 流量控制
如果主机A 一直向主机B发送数据,不考虑主机B的接受能力,则可能导致主机B的接受缓冲区满了而无法再接受数据,从而会导致大量的数据丢包,引发重传机制。而在重传的过程中,若主机B的接收缓冲区情况仍未好转,则会将大量的时间浪费在重传数据上,降低传送数据的效率。
所以引入流量控制机制,主机B通过告诉主机A自己接收缓冲区的大小,来使主机A控制发送的数据量。流量控制与TCP协议报头中的窗口大小有关。
TCP报头中的16位窗口大小,指自己接收缓冲区的剩余大小

5 拥塞控制
在数据传输过程中,可能由于网络状态的问题,造成网络拥堵,此时引入拥塞控制机制,在保证TCP可靠性的同时,提高性能。
拥塞控制:
(1)慢启动:在开始发送数据时,发送少量数据,检测网络状况,以指数方式增大窗口大小,直至达到一个阈值SST1;
(3)拥塞避免:之后一线性增长方式缓慢增大窗口大小,直至造成网络拥塞,此时窗口大小为W;
(4)在网络拥塞后,立即将窗口大小降为1,再次进行上述过程;
(5)慢启动:再次进入慢启动,但此时慢启动的阈值变为窗口大小最大值的一半(W/2);
(6)拥塞避免
(7).................

超时重传和拥塞控制都是在数据丢包时的处理措施,但是二者在应用场景上有什么区别呢?
超时重传:使用在有少量丢包时
拥塞控制:使用在有大量数据丢包时

TCP提升数据传输性能的措施
滑动窗口
在数据传输过程中,一次发送一个报文效率可能有些低,为了提高TCP的效率,引入滑动窗口,达到一次发送多个报文的效果。
滑动窗口大小:是指,无需等待应答可发送报文的最大值

2 快重传
引入滑动窗口可以一次发送多个报文,在这多个报文中,可能出现某一个或某几个报文丢包的情况,此时引入快重传机制,在保证数据丢包后重传的可靠性的同时,提升性能。

快重传和超时超时重传的比较:
(1)快重传是在收到三个连续相同的确认序号之后才会触发的,若只发送一条报文,则系统只能依靠超时重传保证数据的可靠性;
(2)快重传是在超时重传的基础上对于提高性能的改进。
3 延迟应答
延迟应答:在接收到数据之后并不立即应答,而是在等待一段时间时候再应答。
若立即应答,可能会返回的窗口大小会较小;若等待一段时间,等上层将缓冲区内的数据拿走一部分,则返回的窗口大小会大一些,这样在下次传输数据时,传输的数据量也就会越大。
窗口大小越大,网络的吞吐量越大
4 捎带应答
捎带应答:在主机B给出响应时并不只是向主机A发送ACK,而是将主机B想要发送的数据连同对主机A发送上一数据的应答一同发送给主机A,这样在保证TCP可靠性的同时,也提高了TCP传输数据的性能。

猜你喜欢

转载自blog.csdn.net/weixin_39294633/article/details/80974879
今日推荐