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

目录

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拥塞窗口减半,最终二者占用链路将趋于相等

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/561626.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】农田智能监控系统的实践探索

机器学习赋能现代农业&#xff1a;农田智能监控系统的实践探索 一、机器学习在现代农业中的重要作用二、机器学习在农田智能监控系统中的应用三、农田智能监控系统的实践意义 在科技飞速发展的今天&#xff0c;机器学习技术正以其强大的数据处理和模式识别能力&#xff0c;逐步…

Windows下Git的使用

目录 一、克隆远程仓库到本地二、git的三板斧2.1 add-将代码添加到本地仓库2.2 commit-提交代码到本地仓库2.3 push-推送本次添加操作到远程仓库2.4 gitee只有三板斧吗&#xff1f; 三、推送后没有出现绿点四、push到远程时报错五、git图形化界面下载链接 一、克隆远程仓库到本…

nodejs大文件上传

安装依赖 1.express 帮我们启动服务&#xff0c;并且提供接口 2.multer 读取文件&#xff0c;存储 3.cors 解决跨域 项目的目录结构&#xff1a; 前端代码&#xff1a; <input type"file" /><script>const file document.queryselector(input)// 分隔…

【漏洞复现】WordPress_Wholesale_Market admin-ajax.php 任意文件读取漏洞

0x01 产品简介 WordPress Wholesale Market是一个WordPress主题,专门设计用于创建批发市场和在线商城网站。该主题提供了许多功能和设计元素,使您能够轻松地构建一个功能强大的批发市场平台,以满足批发商和零售商的需求。 0x02 漏洞概述 WordPress Wholesale Market存在任…

(2022级)成都工业学院数据库原理及应用实验八: 数据库恢复技术

写在前面 1、基于2022级软件工程/计算机科学与技术实验指导书 2、成品仅提供参考 3、如果成品不满足你的要求&#xff0c;请寻求其他的途径 运行环境 window11家庭版 Navicat Premium 16 Mysql 8.0.36 实验要求 1、使用mysqldump实现数据库备份。 2、使用mysqldump实…

【声呐仿真】学习记录1-配置dave、uuv_simulator

【声呐仿真】学习记录1-配置dave、uuv_simulator 1.介绍2.配置3.一些场景 1.介绍 家|DAVE项目 — Home | Project DAVE 2.配置 参考官方教程安装|DAVE项目 — Installation | Project DAVE mkdir -p ~/uuv_ws/src cd ~/uuv_ws/src git clone https://github.com/Field-Robot…

基于SpringBoot的“体质测试数据分析及可视化”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“体质测试数据分析及可视化”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 体质测试数据分析及可视化设计结构图…

python多线程技术(Threading)

文章目录 前言一、多线程(Threading)是什么?二、threading库1.初识多线程2.增加新线程2.1 多线程的基本使用2.2 对多线程是同时进行的进行一个直观上的演示(非重点--理解是实时就行)2.3 thread.join()功能2.4 使用queue(队列)功能获取多线程的返回值(重要,这就是前面那…

永恒之蓝上线CS

该文介绍了在内网环境下&#xff0c;利用永恒之蓝漏洞&#xff08;EternalBlue&#xff09;将攻击者控制台&#xff08;CS&#xff09;上线的方法。前提条件是目标机器可上网、无防火墙和杀毒软件&#xff0c;并且存在永恒之蓝漏洞。使用Erebus插件的eterblue功能&#xff0c;通…

【Java框架】Spring框架(三)——Spring整合Mybatis及Spring声明式事务

目录 回顾Mybatis和新对象思路整理 Spring和MyBatis的整合步骤1. 创建Web工程&#xff0c;导入Spring和MyBatis的相关依赖2. 建立开发目录结构&#xff0c;创建实体类3. 创建数据访问接口和SQL映射语句文件4. 使用Spring配置文件配置数据源4.1 database.properties4.2spring配置…

第6章 Kafka-Eagle监控【Kafka】

第6章 Kafka-Eagle监控【Kafka】 前言推荐第6章 Kafka-Eagle监控6.1 MySQL环境准备6.2 Kafka环境准备6.3 Kafka-Eagle安装6.4 Kafka-Eagle页面操作 最后 前言 2024-3-27 22:44:15 本文是根据尚硅谷学习所做笔记 仅供学习交流使用&#xff0c;转载注明出处 推荐 【尚硅谷】…

纯干货|图像清晰度从哪里优化

1.Demosaic 调试Demosaic参数需要结合实验室静物高频细节需要插值出来如静物场景的视力表、星条卡和实验室灯箱环境下解析率卡的解析度指标满足要求。 Demosaic模块实现的功能就是将输入的Bayer数据转化成RGB数据。为获得彩色图像,需要利用当前像素及周围像素的色彩分…

计算机组成原理【CO】Ch7 I/O大题

目录 I/O大题解题方法 I/O接口 各种I/O方式的特点 I/O端口编址 程序查询方式 中断控制方式 DMA控制方式 程序中断的工作流程 程序中断的工作流程 DMA方式和中断方式的区别 I/O大题解题方法 CPU 程序查询中断DMA I/O接口的类型 按字传输&#xff1a;每次传输一个字 程…

ROS分布式通讯配置

4WD 必读&#xff1a;分布式通讯是相对于用虚拟机来连接小车上主机来说&#xff0c;如果是 4WD 笔记本无主 机用户&#xff0c;不存在分布式通讯一说。 1.4WD 用户单笔记设置一&#xff0c;连接底盘和雷达还有摄像头。 因为虚拟机带宽问题&#xff0c;无法保证摄像头正常运行。…

利用Django中的缓存系统提升Web应用性能

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 在构建现代Web应用时&#xff0c;性能通常是至关重要的考虑因素之一。为了提高用户体验和应…

车轮上的智能:探索机器学习在汽车行业的应用前景

文章目录 引言&#xff1a;一、机器学习在汽车设计中的应用设计优化模拟与测试 二、智能制造与生产三、自动驾驶技术感知与决策数据融合 四、市场与模式的变革五、机器学习对于汽车行业的机遇与挑战挑战机遇 引言&#xff1a; 在当今数字化时代&#xff0c;机器学习作为人工智…

Ansys 2024安装教程(附免费安装包资源)

鼠标右击软件压缩包&#xff0c;选择“解压到Ansys.2024.R1”。 打开解压后的文件夹&#xff0c;鼠标右击“ANSYS2024R1_WINX64_DISK1”选择“装载”。 鼠标右击“setup.exe”选择“以管理员身份运行”。  点击“安装ANSYS License Manger”。 点击“OK”。 点击”I …

【记录】Python3|Selenium 下载 PDF 不预览不弹窗(2024年)

版本&#xff1a; Chrome 124Python 3.12Selenium 4.19.0 版本与我有差异不要紧&#xff0c;只要别差异太大比如 Chrome 用 57 之前的版本了&#xff0c;就可以看本文。 如果你从前完全没使用过、没安装过Selenium&#xff0c;可以参考这篇博客《【记录】Python3&#xff5c;Se…

在PostgreSQL中如何有效地批量导入大量数据,并确保数据加载过程中的性能和稳定性?

文章目录 解决方案1. 使用COPY命令2. 调整配置参数3. 禁用索引和约束4. 使用事务5. 并发导入 总结 在PostgreSQL中&#xff0c;批量导入大量数据是一个常见的需求&#xff0c;特别是在数据迁移、数据仓库填充或大数据分析等场景中。为了确保数据加载过程中的性能和稳定性&#…

第62天:服务攻防-框架安全CVE 复现SpringStrutsLaravelThinkPHP

目录 思维导图 常见语言开发框架&#xff1a; 案例一&#xff1a;PHP-开发框架安全-Thinkphp&Laravel Thinkphp3.2.x日志泄露 自动化脚本检测 如何getshell 手工注入 ​ThinkPHP5 5.0.23 手工注入 工具检测 laravel-cve_2021_3129 案例二&#xff1a;JAVAWEB-开…