4.9 TCP 拥塞控制算法

news2024/12/19 10:11:54

欢迎大家订阅【计算机网络】学习专栏,开启你的计算机网络学习之旅!

文章目录

  • 1 TCP 拥塞控制算法
    • 1.1 慢开始(Slow Start)
    • 1.2 拥塞避免(Congestion Avoidance)
    • 1.3 快重传(Fast Retransmit)
    • 1.4 快恢复(Fast Recovery)
  • 2 主动队列管理(AQM)
    • 2.1 FIFO 与尾部丢弃策略
    • 2.2 随机早期检测(RED)
    • 2.3 主动队列管理的挑战与发展


1 TCP 拥塞控制算法

根据 RFC 5681,TCP 拥塞控制包括四个关键算法:慢开始拥塞避免快重传快恢复。这些算法通过动态调整拥塞窗口大小,确保数据流的高效传输,避免网络拥塞。

1.1 慢开始(Slow Start)

①目的
探测网络的负载能力,避免过早地过载网络。

②算法
从小到大逐渐增大拥塞窗口。
初始时,拥塞窗口通常为1个报文段,每收到一个确认报文,拥塞窗口增加1个最大报文段大小(SMSS)。这种增长方式是指数级的,迅速提升传输速率。

③慢开始门限(ssthresh)
当拥塞窗口达到一定大小时,TCP会切换到拥塞避免阶段。ssthresh定义了慢开始和拥塞避免之间的分界点
在这里插入图片描述

在这里插入图片描述

④传输轮次
传输轮次强调把拥塞窗口 cwnd 所允许发送的报文段都连续发送出去,并收到了对已发送的最后一个字节的确认。
例如:拥塞窗口 cwnd = 4,这时的往返时间 RTT 就是发送方连续发送 4 个报文段,并收到这 4 个报文段的确认,总共经历的时间。

一个传输轮次所经历的时间 = 往返时间 RTT

1.2 拥塞避免(Congestion Avoidance)

①目的
让拥塞窗口 cwnd 缓慢地增大,避免出现拥塞。

②算法
当拥塞窗口达到慢开始门限(ssthresh)后,TCP会转入拥塞避免阶段。在此阶段,拥塞窗口的增长采用加法增大(AIMD)策略,即每经过一个往返时间(RTT),拥塞窗口增加1个报文段(SMSS)。
增长速度较慢,避免过快增加窗口导致网络过载。

【示例】
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【注意】

  • “慢开始”是指一开始向网络注入的报文段少,并不显指拥塞窗口cwd增长速度慢;
  • “拥塞避免”并非指完全能够避免拥塞,而是指在拥塞避免阶段将拥塞窗口控制为按线性规律增长,使网络比较不容易出现拥塞

1.3 快重传(Fast Retransmit)

①目的
减少因丢包引起的延迟,快速恢复数据传输。

②算法
当发送方连续收到三个重复的确认报文时,TCP立即重传丢失的报文段,而无需等待超时重传。这样可以减少丢包后的等待时间,提高数据传输效率。

【示例】
在这里插入图片描述

③作用
使整个网络的吞吐量提高约 20%

1.4 快恢复(Fast Recovery)

当发送端收到连续三个重复的确认时,不执行慢开始算法,而是执行快恢复算法 FR (Fast Recovery) 算法。

①目的
避免丢包后进入慢开始,快速恢复数据传输速率。

②算法
在快重传后,TCP不会回到慢开始阶段,而是执行快恢复算法。此时,慢开始门限 设置为当前拥塞窗口的一半,拥塞窗口减小并迅速进入拥塞避免阶段。这样可以减少网络的震荡,保证网络高效运行。
在这里插入图片描述

【示例】
在这里插入图片描述
在这里插入图片描述

【TCP拥塞控制流程图】
在这里插入图片描述
【练习】
在这里插入图片描述

2 主动队列管理(AQM)

TCP 拥塞控制与网络层的队列管理策略密切相关。路由器的队列管理方式会影响到TCP的性能,特别是重传和拥塞的发生。

2.1 FIFO 与尾部丢弃策略

最简单的队列管理策略是FIFO(First In First Out),即按到达顺序处理数据包。若队列已满,采用尾部丢弃策略(tail-drop policy),丢弃新到达的分组。
在这里插入图片描述

该策略的问题在于:

  • 丢包会导致发送方进行重传,可能触发TCP进入慢开始阶段,降低网络吞吐量。
  • 在高负载情况下,尾部丢弃可能导致网络全局同步,即多个TCP连接同时进入慢开始状态,严重影响性能。

2.2 随机早期检测(RED)

为避免尾部丢弃导致的全局同步问题,提出了随机早期检测(RED) 机制。在RED中,路由器根据队列的平均长度决定是否丢弃包:

  • 队列长度小于最小阈值(THmin):正常排队;
  • 队列长度超过最大阈值(THmax):丢弃包;
  • 队列长度介于两个阈值之间:按一定概率丢弃包。

在这里插入图片描述
在这里插入图片描述

通过这种方式,RED能够更早地检测到网络拥塞,并减少全局同步的发生。

2.3 主动队列管理的挑战与发展

尽管RED等AQM算法能够在一定程度上优化队列管理,但它们仍存在一些问题,如过于复杂的参数设置和对网络实际负载的响应迟缓。

随着网络需求的不断变化,新的AQM算法不断涌现,以期解决这些问题。目前,新的AQM算法仍在实验阶段,尚未形成统一的标准。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机毕业设计Django+Tensorflow音乐推荐系统 音乐可视化 卷积神经网络CNN LSTM音乐情感分析 机器学习 深度学习 Flask

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装

【HarmonyOS】HarmonyOS 和 Flutter混合开发 (一)之鸿蒙Flutter环境安装 一、前言 flutter作为开源适配框架方案,已经在Android,IOS,Web,Window四大平台进行了适配,一套代码,可以同…

机器人变换关系

rigid 刚性变换(平移、旋转): 只改变位置和方向,拥有6个自由度,保持变换物体的形状。 affine 仿射变换(平移、旋转、缩放、倾斜等): 改变物体形状、位置、方向,拥有12…

RTU 通信模块赋能智慧路灯远程开关管理,点亮智慧城市节能增效

RTU(Remote Terminal Unit)远端测控单元在智慧路灯远程开关管理系统中主要负责数据通信和开关控制。能够实现对路灯设备的远程监测和控制,将路灯的状态信息(如开关状态、故障信息、亮度参数等)上传到管理平台&#xff…

Macbookpro M1 IDEA中安装mysql

一:安装与连接数据库 1. 首先在mysql中创建一个初始数据库:idea_db,如示: 2.打开IDEA,如果最右侧没有database窗口,则在插件那里下载“Database navigator”,稍后重启一下即可; 点击最右侧Database---->…

ISCTF复现-misc

File_Format 下载附件后用010打开查看文件头会发现是个exe文件 格式:文件描述(后缀名),文件头(hex):文件头标识(十六进制)PNG (png),文件头(hex):89504E47 PNGImageFile…

如何有效的开展接口自动化测试?

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 一、简介 接口自动化测试是指使用自动化测试工具和脚本对软件系统中的接口进行测试的过程。其目的是在软件开发过程中,通过对接口的自动化测试来提高测…

FFmpeg第一话:FFmpeg 简介与环境搭建

FFmpeg 探索之旅 一、FFmpeg 简介与环境搭建 二、FFmpeg 解码详解 第一话:FFmpeg 简介与环境搭建 FFmpeg 探索之旅一、前言二、FFmpeg 是什么?三、简单介绍其历史背景四、为什么用 C学习 FFmpeg?(一)高性能优势&#…

git branch -r(--remotes )显示你本地仓库知道的所有 远程分支 的列表

好的,git branch -r 这个命令用于列出远程分支。让我详细解释一下: 命令: git branch -rdgqdgqdeMac-mini ProductAuthentication % git branch -rorigin/main作用: 这个命令会显示你本地仓库知道的所有 远程分支 的列表。它不…

解锁 draw.io 流程图制作工具的强大功能与应用(1/2)

一、draw.io 简介 (一)基本概述 draw.io 是一款由 JGraph 公司开发的基于网页的在线图表绘制工具。它最大的优势之一就是无需进行繁琐的下载和安装步骤,只要打开浏览器,访问其官网,就能立即开始使用。无论是在 Window…

数据结构与算法:稀疏数组

前言 此文以整型元素的二维数组为例,阐述稀疏数组的思想。其他类型或许有更适合压缩算法或者其他结构的稀疏数组,此文暂不扩展。 稀疏数组的定义 在一个二维数据数组里,由于大量的元素的值为同一个值,比如 0或者其他已知的默认值…

【物联网技术与应用】实验4:继电器实验

实验4 继电器实验 【实验介绍】 继电器是一种用于响应施加的输入信号而在两个或多个点或设备之间提供连接的设备。换句话说,继电器提供了控制器和设备之间的隔离,因为设备可以在AC和DC上工作。但是,他们从微控制器接收信号,因此…

RV1126平台下的MobileSeg量化指南:高效部署低算力硬件

1 引言 MobileSeg系列模型采用编解码架构,并以轻量级模型作为骨干网络,专为低算力硬件(如BPU、NPU、ARM CPU等)设计。这使得MobileSeg在边缘设备和移动端应用中表现出色,具备高效能和灵活性。本文将以MobileSeg分割模…

随手记:小程序兼容后台的wangEditor富文本配置链接

场景&#xff1a; 在后台配置wangEditor富文本&#xff0c;可以文字配置链接&#xff0c;图片配置链接&#xff0c;产生的json格式为&#xff1a; 例子&#xff1a; <h1><a href"https://uniapp.dcloud.net.cn/" target"_blank"><span sty…

RabbitMQ的核心组件有哪些?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ的核心组件有哪些&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ的核心组件有哪些&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ是一个开源的消息代理&#xff08;Messag…

html基础-认识html

1.什么是html html是浏览器可以识别的的标记语言&#xff0c;我们在浏览器浏览的网页就是一个个的html文档 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>认识html</title> </head> <body><h1…

电子应用设计方案-59:智能电动床系统方案设计

智能电动床系统方案设计 一、引言 智能电动床作为一种高端家居产品&#xff0c;旨在为用户提供更加舒适、便捷和个性化的睡眠体验。本方案将详细介绍智能电动床系统的设计架构、功能特点和技术实现。 二、系统概述 1. 系统目标 - 实现床体的多部位电动调节&#xff0c;满足不…

【半导体二极管】

半导体二极管 半导体二极管是由两种不同类型的半导体材料&#xff08;N型和P型&#xff09;通过特定工艺结合而成的电子元器件。其基本结构为PN结。二极管的主要功能是控制电流的单向流动&#xff0c;即允许电流仅在一个方向流动&#xff0c;在反向电压作用下几乎不导电。 1.…

SpringBoot 新特性

优质博文&#xff1a;IT-BLOG-CN 2.1.0新特性最低支持jdk8,支持tomcat9 对响应式编程的支持&#xff0c;spring-boot-starter-webflux starter POM可以快速开始使用Spring WebFlux&#xff0c;它由嵌入式Netty服务器支持 1.5.8 2.1.0/2.7.0/3.0.0 Configuration propertie…

企业车辆管理系统(源码+数据库+报告)

一、项目介绍 352.基于SpringBoot的企业车辆管理系统&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技术&a…