<计算机网络自顶向下> TCP拥塞

devtools/2024/11/14 3:00:27/

目录

TCP拥塞控制机制

TCP拥塞感知

TCP速率控制方法

 TCP拥塞控制和流量控制的联合动作

TCP拥塞控制策略

 TCP吞吐量

 TCP公平性


TCP拥塞控制机制

  • 端到端的拥塞控制机制
    • 路由器不向主机提供有关拥塞的反馈信息

      路由器负担较轻

      符合网络核心简单的TCP/IP架构原则

    • 端系统根据自身得到的信息判断是否发生拥塞,从采取动作
  • 拥塞控制的问题
    • 如何检测拥塞

      轻微拥塞

      拥塞

    • 控制策略

      在拥塞发送时如何动作,降低速率:轻微拥塞和拥塞的时候如何降低

      在拥塞缓解的时候如何动作,增加速率

TCP拥塞感知

发送端如何探测到拥塞

  • 某个段超时了:拥塞
    • 超时时间到,某个段的确认没有来(一旦超时,就认为拥塞了,有一定误判,但是总体控制方向是对的)

      原因1:网络拥塞(某个路由器缓冲区没空间了,被丢弃)概率大

      原因2:出错被丢弃了(传输过程中受到干扰,没有通过校验,被丢弃)概率小

  • 有关某个段的3次重复ACK:轻微拥塞(后三个是正常到的,相当于发出去4个堵了1个,说明轻微拥塞了)
    • 段的第1个ACK,正常,确认吕端,期待红段
    • 段的第2个重复ACK,意味着红段的后一段收到了,蓝段乱序到达
    • 短的第2,3,4个ACK重复意味着红段的后第2,3,4个段收到了,橙段乱序到达,同时红段丢失的可能性很大

TCP速率控制方法

  • 如何控制发送端发送的速率
    • 维持一个拥塞窗口的值:CongWin
    • 发送端限制已发送但是未确认的数据量(的上限):
      传输的最后一个字节序号 - 最后一个接收的字节序号 <= CongWin
    • 从而粗略的控制发送方的网络中注入的速率

    • CongWin是动态的,是感知到的网络拥塞程度的函数

      • 超时或者三个重复ACK,CongWin

        超时:CongWin降低为1MSS,进入SS(Slow Start)阶段然后再倍增到CongWIN/2(每个RTT),从而进入CA(Congestion Avoidance)阶段(是超时的话就先把窗口降到1MSS,然后每一个RTT翻倍,直到到达原窗口的一半,开始每个RTT增加1MSS)

        3个重复ACK:CongWin降为CongWin/2,CA阶段

      • 否则(正常收到ACK,没有发送以上情况):CongWIn跃跃欲试

        SS阶段:加倍增加(每个RTT)

        CA阶段:线性增加(每个RTT)

 TCP拥塞控制和流量控制的联合动作

  • 拥塞窗口值决定了由于拥塞控制的因素,发送方一次可以向网络当中在未经确认的情况下网网络当中注入字节的数量。
  • 对方接收窗口告诉发送方在未经确认的情况下可以向对方发送多少字节,到了对方一定有缓冲区可以把它存下,从而满足流量控制的目的(共享缓冲区是通过网络发送的)。
  • 这两个值的最小值决定了发送方一次在未确认的情况下可以往网络当中注入字节的数量。几满足了流量控制的要求,又满足了拥塞控制的要求。简单来说就是拥塞窗口大小和空闲缓冲区大小取一个最小值作为一次性可以注入的字节量

TCP拥塞控制策略

  • 慢启动(SS)
    • 在 TCP 连接刚刚建立时,拥塞窗口(Congestion Window,CongWin)通常会初始化为一个较小的值
    • 每收到一个确认,拥塞窗口值+1,从而每个RTT拥塞窗口值加倍
    • 这样子指数型额的增加必定会导致拥堵

  • AIMD(Additive Increase, Multiplicative Decrease)
    • 乘性减
      • 丢失时间以后将CongWin降低为1,将CongWin/2作为阈值,进入慢启动阶段
    • 加性增
      • 当CongWin>阈值的时候,如果一个RTT没有发生丢弃事件,将CongWin+1MSS;探测
    • 当收到3个冗余的ACK
      • CongWin减半,窗口(缓冲区大小)之后线性增长
    • 当超时时间发生的时候
      • CongWin被设置为1MSS,进入SS阶段
      • 之后窗口指数增长
      • 增长到一个阈值(上次发生拥塞的窗口的一半)的时候再线性增加

思路:三个重复的ACK表示网络还有一定的段传输能力,超时之前的3个重复的ACK表示“警报”

  • 超时事件后的保守策略
    • 将指数型增长变成线性的时候:在超时之前,当CongWin变成上次发生超时的窗口的一半
    • 实现
      • 变量:Threshold
      • 出现丢失:Threshold设置为CongWin的1/2

下面收到三个冗余ACK后除二,加三的原因是有三个冗余ACK,遇见一个加一

 

 TCP吞吐量

  • 假设拥塞窗口为w
  • 拥塞控制让他从w/2值到w变化,所以平均吞吐量(ss时间比较短所以忽略ss阶段)

(3w/2) /2*RTT=3w/4RTT

 TCP公平性

  • 如果有两个主机对分享了一个瓶颈的链路限制了主机和主机之间的通讯的带宽,每对主机会获得1/n的带宽

  • 为什么TCP是公平的(大致公平)
    • 两个竞争的TCP会话
      • 加性增加,斜率为1,吞吐量增加
      • 乘性减,吞吐量比例减少
      • 假设起初是不公平的:因为二者没有充分使用带宽所以开始进入拥塞避免阶段(ss时间太短,忽略),最后因为有缓冲队列的存在,会有一段时间x+y>R,最终A到A‘和B到B‘都会拥塞,然后就会RTT拥塞窗口减半,最终二者占用链路将趋于相等

 


http://www.ppmy.cn/devtools/5929.html

相关文章

C语言表达式求值、隐式类型转换、算数转换

文章目录 前言一、表达式求值二、隐式类型转换小案例 三、算数转换总结 前言 C语言表达式求值、隐式类型转换、算数转换等介绍 一、表达式求值 表达式求值的顺序一部分是由操作符的优先级和结合性决定的。 表达式求值由操作符优先级决定 优先级讨论的是相邻操作符 #includ…

MYSQL之增删改查(下)

前言&#xff1a; 以下是MySQL最基本的增删改查语句&#xff0c;很多IT工作者都必须要会的命令&#xff0c;也 是IT行业面试最常考的知识点&#xff0c;由于是入门级基础命令&#xff0c;所有所有操作都建立在单表 上&#xff0c;未涉及多表操作。 4.3 高级查询 4.3.1 聚合函…

【C++类和对象】拷贝构造与赋值运算符重载

&#x1f49e;&#x1f49e; 前言 hello hello~ &#xff0c;这里是大耳朵土土垚~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#x…

【项目实战】记录一次PG数据库迁移至GaussDB测试(下)

上一篇分享了安装、迁移&#xff0c;本篇将继续分享迁移前操作、 DRS迁移数据、迁移后一致性检查、问题总结及解决方法。 目录 四、迁移前操作 4.1 源端(PG) 4.2 目标端(GaussDB库) 五、DRS迁移数据 5.1 创建复制用户 5.2创建迁移任务。 六、迁移后一致性检查 6.1使用…

【c++】vector的使用

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 朋友们大家好&#xff0c;我们本篇来到一个新的容器&#xff0c;vector的讲解和使用 目录 1.vector简单介绍2.vector的使用2.1构造函数2.2遍历vector2.3对容量操作2.4vector的增删查改 1.v…

【剪映专业版】13快速为视频配好音:清晰、无噪声、对齐

视频课程&#xff1a;B站有知公开课【剪映电脑版教程】 使用场景&#xff1a;视频无声音或者视频有声音但是需要更改声音 时间指示器在哪里&#xff0c;就从哪里开始 红色按钮&#xff1a;开始录音 声音波纹&#xff1a;蓝色最佳&#xff0c;黄色或红色声音太大&#xff0c;…

精通MongoDB聚合操作API:深入探索高级技巧与实践

MongoDB 聚合操作API提供了强大的数据处理能力&#xff0c;能够对数据进行筛选、变换、分组、统计等复杂操作。本文介绍了MongoDB的基本用法和高级用法&#xff0c;高级用法涵盖了setWindowFields、merge、facet、expr、accumulator窗口函数、结果合并、多面聚合、查询表达式在…

适配器模式

适配器模式 适配器模式是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式&#xff0c;它结合了两个独立接口的功能。 适配器模式一般用于屏蔽业务逻辑与第三方服务的交互&#xff0c;或者是新老接口之间的差异。 在Dubbo中&#xff0c;所有的数据都是通过…