• 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时,执行前面介绍的“拥塞避免”算法,使窗口大小缓慢增大,避免网络拥塞。

  • 相关阅读:
    (二)全局属性
    (十二)this关键字
    (十一)构造方法的重载和成员方法的重载
    (十)foreac遍历、break和countinue以及标签和switch循环
    java集合
    关于java赋值操作的原子性问题
    spring list map set
    apache benchmark
    为什么java web项目中要使用spring
    spring IOC
  • 原文地址:https://www.cnblogs.com/Jun10ng/p/12616302.html
Copyright © 2020-2023  润新知