TCP的滑动窗口和网络拥塞控制

TCP的滑动窗口和网络拥塞控制

TCP是面向连接,保证可靠性,流式传输服务,反之则是UDP。

面向连接:三握四挥

保证可靠性:发送的数据尽最大可能保证让接收端收到

流式传输:传输的数据是以字节流形式发送和接收

TCP采用了确认应答机制,所谓确认应答机制就是发送数据之后必须收到确认消息,才算一次有效的传输,反之UDP协议就是只管自己消息发出去即可。

滑动窗口

通过滑动窗口机制,实现对TCP传输速率的控制,本质上就是流量控制,这也是保证可靠传输的方法之一。

img

在TCP报头中:确认号就是指上文提到的“确认应答机制”,而窗口字段表示的是窗口大小,所以窗口的大小是可变的,会根据网络传输情况自适应调整大小。

由于每次传输都会可能造成数据丢失,所以在实际情况中,发送窗口都是右移到最大序列号的确认接收数据块后面。然后再发送一个窗口大小的数据块,比如窗口大小10,第一次发送了10-19数据块,根据对方的接收数据块,只收到了10-15,则窗口右移到16,再次发送16-25数据块。

此外,窗口分为发送窗口,和可接受窗口。(发送方和接收方)

当可接受窗口大小为0时

发送方会停止发送数据,等待接收方发送窗口为非0的通知,并且启用持续计时器。在规定的时间内未收到接收方的通告时会发送试探报文,试探报文是没有数据的,当对方回复窗口大小不为0时,重新开始传输,当大小持续为0时,计时器增加,直到大于60秒,断开。发送试探报文的时间是成倍增加的,第一次一秒,第二次两秒,第三次四秒……,大于60秒断开。

拥塞控制

拥塞控制是TCP协议中最复杂的一部分,因为网络请求是不可预测的。网络资源大于可用资源时就会造成网络拥塞。目前解决网络拥塞的方法有。

  • 慢启动:窗口大小从比较小的值开始吗,然后慢慢增加,这也就是为什么我们下载东西的时候,会有一个网络提速。当发送一次数据后,在定时器过期之前收到了确认应答消息(ACK),则拥塞窗口大小变为原来的2倍,依次往复,只要在定时器过期之前能收到ACK,都会增大2倍。

  • 拥塞避免:在慢启动的基础上,当慢启动的拥塞窗口第二次打到阈值的时候,启动拥塞避免,控制窗口增长速度,简单来说,当慢启动遇上拥塞避免之后,窗口的增长速度就不是线性了(2倍)

  • 快重传,在一个TCP数据段发送出去之后会启动一个定时器,看是否接受ACK会超时。

  • 快恢复,在快重传的基础上,。当快重传已经发送了丢失的数据后,快恢复机制被触发。

    在收到第三个重复ACK时,执行前面介绍的“拥塞避免”算法,使窗口大小缓慢增大,避免网络拥塞。

原文地址:https://www.cnblogs.com/Jun10ng/p/12616302.html