在学习和面试中通常会遇到TCP协议的相关问题,我在此详解TCP协议中的可靠传输、流量控制、拥塞控制是怎么实现的
一、可靠传输
图1(TCP超时重传模式)
TCP协议的可靠传输的第一种模式,停止等待ARQ协议,原理当A主机往B主机发送一个数据包后,A主机会等待B主机返回一个确认数据,当A主机等待一定时间未收到B主机的确认数据,将会重传上一个数据包。
图2(TCP连续ARQ协议)
TCP协议的可靠传输的第二种模式,由第一种改进后可得到。由于使用停止等待ARQ协议,A主机每发一个数据包,就要等待一段时间才能发第二个数据包,这样的传输数据效率慢,就出现了连续ARQ协议和滑动窗口协议。
其原理是A主机将待发送的数据先存储在缓存中,然后根据窗口大小决定一次发送多个数据包,当B机器确认收到所有数据包就会返回一个确认,告诉A主机收到了最后那个数据包。比如一次发送了M1,M2,M3,M4,B主机就只会确认M4数据包收到。窗口的大小由A和B共同决定,取最大发送量和最大接受量的最小值。
发生丢失重传有两种情况,情况一:不采取 SACK技术,假如发送M5,M6,M7,M8,丢失M7数据包,主机A就会重传M7,M8两个数据包。情况二:采取SACK技术,就只会重传丢失的数据包,SACK技术其原理是:确认数据包附带所收到的数据包信息,告诉发送方已经收到哪些数据包,所以不需要重传
二、流量控制
图3(TCP流量控制)
在数据发送有缓存的概念,就是无论发送数据还是接收数据,都需要把数据先放入缓存,在发送到应用程序 在发送方发送数据后,会得到接收方返回的确认数据包,在确认数据包中有一个RWND值,其意义是告诉发送方当前我还可以接收多少数据,从而让发送方增大或者减小数据包的发送,从而进行流量控制
三、拥塞控制
图4(TCP拥塞控制一)
上图是拥塞控制的第一种模式,在数据刚开始建立传输的时候,生成一个拥塞窗口大小CWND,然后CWND一开始指数级增加,在达到阈值ssthresh的时候进入拥塞避免算法,开始加法递增,假如传输过程中出现数据包的丢失,就将拥塞窗口值设为初始值再进行满开始,并且阈值的大小为出现丢包的时候CWND值的一半。
发送发会比对接收窗口(RWND)大小和拥塞窗口(CWND)大小来取二者的最小值决定发送多少数据,当拥塞窗口比接收窗口小,代表网路拥堵,需要减少数据发送。当接收窗口比拥塞窗口小,代表接收方接收数据能力差,需要减少数发送。
图5(TCP拥塞控制二)
由于每次出现网络拥塞都重新进入慢开始会导致网络传输效率慢,所以加入了快重传和快恢复。快重传:当网络出现丢包的时候,发送方继续发送数据,接收方发送数据包丢失信息,当发送发收到接收方三个相同的丢失信息后,立马重传丢失数据包。快恢复:当快重传出现的时候,将拥塞窗口大小减半并直接进入拥塞避免算法进行加法递增,避免的拥塞窗口太小从而导致发送数据效率太慢。
以上是我对可靠传输__流量控制__拥塞控制的理解,如果有帮助的话请多多点赞收藏,你的点赞就是对我最大的鼓励