• TCP的拥塞控制


    TCP有流量控制和拥塞控制。

    流量控制 Flow Control
    拥塞控制 Congestion Control

    流量控制是防止发送方的数据填满接收方的缓存,调节的是两个端点的流量。

    拥塞控制是防止链路中的节点的阻塞。链路中节点故障,或处理能力弱,也会造成阻塞,就像堵车一样。

    发送方需要根据网络状况,调节发送数据量的大小。

    1. TCP的拥塞控制算法

    TCP的拥塞控制算法有很多种,常见的有Liunx内核默认的 Reno 算法 和 Google的 BBR 算法。

    Reno算法是《计算机网络》收录的算法,下面详述该算法。

    Reno算法的拥塞控制过程,分为4个阶段:

    基本过程就是,先快速增长,然后慢速增长语法拥塞。还有就是发生拥塞后的措施和快速恢复。

    名词解释:
    ​cwnd -- 拥塞窗口
    ssthresh(slow start threshold)-- 慢启动到拥塞避免到阈值
    RTT——Round Trip Time,也就是一个数据包从发出去到回来的时间
    RTO(Retransmission TimeOut)重发超时时间

    1. 慢启动

    拥塞窗口一开始是一个很小的值,不同的版本会有不同,一般是1,3,10等。
    数据包发出后,每收到一个ack,拥塞窗口就加1。
    如此,3个数据包,收到3个ack,就会变成6,翻倍。
    慢启动过程,拥塞窗口成倍增长,即指数级增长。

    2. 拥塞避免

    当拥塞窗口达到阈值,就会进入拥塞避免阶段。
    此阶段,每收到一个ACK,拥塞窗口就会加1,拥塞窗口成线性增长。

    发送拥塞,分为两种情况:

    2.1 RTO超时,重传数据包。TCP认为这种情况很糟,反应强烈。

    sshthresh = cwnd/2
    cwnd 重置为初始值,是1 ?
    进入慢启动过程

    2.2 收到3个duplicate ACK,这种情况较轻,反应不强烈。

    cwnd = cwnd / 2
    sshthresh = cwnd

    进入快恢复阶段

    3. 快重传

    快重传,就是,发送只要连续收到3个重复确认,就会立即重传刚才丢失的包。例如,收到3个序号2的重复确认,
    就会立即重传2号包。因为2号包没到,没有ACK,所有才有的3个重复的2号包ACK。

    4. 快恢复

    收到3个重复确认,阈值ssthresh减半,cwnd=ssthresh,直接进入拥塞避免算法,收到新的ACK,线性增大拥塞窗口
    快恢复的关键点就是,不从慢启动开始,而是直接从拥塞避免开始,拥塞窗口线性增长。

    2. ssthresh的值该设置成多少​​?

    动态的,​因为不同设备,不同网络环境中网络等承载能力是不同的,初始值会设置很大,
    然后按照上面介绍的到了拥塞发生阶段,sshthresh会被设置成拥塞发生时候,拥塞窗口的一半。

    3. 收到多个重复ACK比RTO网络情况好?

    收到多个重复的ACK,说明中间有一个包没有正常接收,后面的包还能正常接收。
    而RTO,超时,则说明中间的一个包,以及后面的所有包都没有正常的接收,这个拥塞就比较严重了。


    参考:

    https://blog.csdn.net/qq_26896213/article/details/84594060?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase
    https://zhuanlan.zhihu.com/p/76023663
    https://www.cnblogs.com/bewolf/p/11077721.html

  • 相关阅读:
    Extjs4.0中清空filefield已选文件
    .net操作读取word中的图像并保存
    WebForm_PostBackOptions未定义 错误排查
    数据库关键字
    VS2008生成WebSite和WebApplication的区别(转载)
    安装天乙论坛(SSH架构的开源项目)时遇到的问题
    Hibernate与Oracle char类型的列之间的兼容问题
    关于spring3使用AOP编程时需要引入哪些jar包的问题
    让IE支持HTML5的Canvas
    IIS + TOMCAT 注意事项
  • 原文地址:https://www.cnblogs.com/mengff/p/13246797.html
Copyright © 2020-2023  润新知