当前位置: 首页 > news >正文

【网络原理】TCP提升效率机制(二):流量控制和拥塞控制

 

目录

一. 前言

二. 流量控制

三. 拥塞控制


一. 前言

TCP的可靠传输依靠确认应答机制,超时重传机制是对确认应答的一种补充,解决了丢包问题

为了提高传输效率,避免大量的时间都浪费在等待应答的过程,故引入了滑动窗口机制,将等待策略进行调整,一次性发送多个数据然后等待,滑动窗口的窗户大小决定了传输效率

通过流量控制和拥塞控制机制,共同决定窗口的大小


二. 流量控制

众所周知,窗口越大,一次携带的数据就越多,传输效率就越高,但是窗口不能无限增大,如果窗口过大,可能会影响传输的可靠性(TCP中可靠性最重要)

窗口过大

  • 窗口过大,传输效率太快,可能会出现接收方处理不过来,那么可能会出现丢包问题
  • 如果接收方缓冲区,已经满了,仍然传入数据,那么多出来的数据就会丢掉
  • 丢包数据即使重传,依然没有意义,因为缓冲区还是满的

 如果出现缓冲区满的问题,那就只能停下,等接收方处理一些数据之后,再发数据


 这种缓冲区满了,就停下来的行为,肯定是不可取的,不如控制传输速度

只需要让发送方发送速度和接收方处理速度,步调一致即可,这个过程肯定不是静态的,是一直在变化的

接收方反过来影响发送方的发送速度即可(流量控制)


接收方如何影响发送方?

接收方在返回ACK报文的时候,在报头中,有一个16位窗口大小,通过这个字段,反馈给发送方将窗口大小设置为多大合适


窗口大小的设置

接收方会根据自己接收缓冲区剩余的大小,作为ACK报文中的窗口大小数值,接收方拿到这个数值进行调整窗口大小

窗口大小最大不是65535字节(16位),可以通过TCP选项中的参数(窗口扩展因子),扩展窗口大小,通常窗口的大小为16位窗口大小*2^窗口扩展因子


接收方如何得知缓冲区满了?

如果接收方收到的ACK报文中,窗口大小为0,则表示接受缓冲区满了,需要停止发送


如何恢复发送?

 发送方会周期性的发送窗口探测包(不携带载荷),只是为了触发ACK报文,如果报文中窗口大小不是0,说明又可以发送了


三. 拥塞控制

流量控制关注的是接收方的缓冲区,拥塞控制关注的是传输路况

接收方处理数据的速度很快,但是这会双方通信路况不好,数据不能到达,发送方发送再多的数据也没有用

如果根据某个窗口大小发送数据,但是出现了丢包问题,那么就可以认为通信路径发送了问题,那么就减少窗口大小,如果正常,那么就可以适当放大窗口

由于网络的复杂性和随机性,无法确定什么时候路况好,什么时候不好,窗口大小是一直变化的 


经典版本

拥塞控制中如何得知窗口大小?(一个字“试!”) 

  1.  慢启动:由于刚刚开始传输数据,无法准确判断传输的路况,不适合发送大量数据,也有可能传输路况很好,那么通过指数增长窗口大小,可以保证传输的效率
  2.  拥塞避免:指数增长达到一定的阈值,就会转变为线性增长
  3.  拥塞处理:这里涉及两种策略:超时重传/快速恢复

为什么指数增长变为线性增长?

一开始使用指数增长,可以让窗口大小快速变大,可以保证传输速率,到达一定的阈值(会变化),如果保持指数增长,会增长太快,可能导致网络拥堵,使用线性增长,可以使窗口持久保持在一个比较高的速率,并且也不容易丢包

为什么会产生拥塞?

 线性增长也是一种增长,时间长了,也是会引起丢包问题,一旦出现丢包,就会直接将窗口大小设为较小的值,重新开始,也会重新设置指数增长的阈值


 全新版本

 这个全新的版本,相比经典版本,更适合现在的网络环境,现在网络环境相比之前不管是网络带宽还是通信质量都有很大的进步

当网络拥堵时,发生数据丢包情况,则会触发快速重传机制,TCP会立即重传丢失的数据包,而无需等待,窗口的大小会变为拥塞时的一半,后续就没有指数增长的过程,一直都是线性增长,下一次拥塞时,在变为原来的一半,线性增长,一直循环

 好处

  • 避免从慢启动开始,减少吞吐量波动。

  • 更平滑地恢复传输速率。

滑动窗口的大小是依靠拥塞控制和流量控制共同实现的,取其中的的最小值


点赞的宝子今晚自动触发「躺赢锦鲤」buff!

相关文章:

【网络原理】TCP提升效率机制(二):流量控制和拥塞控制

目录 一. 前言 二. 流量控制 三. 拥塞控制 一. 前言 TCP的可靠传输依靠确认应答机制,超时重传机制是对确认应答的一种补充,解决了丢包问题 为了提高传输效率,避免大量的时间都浪费在等待应答的过程,故引入了滑动窗口机制&…...

DeepSeek+Cline:开启自动化编程新纪元

目录 一、引言:AI 编程时代的曙光二、认识 DeepSeek 和 Cline2.1 DeepSeek 是什么2.2 Cline 详解2.3 两者结合的魅力 三、DeepSeek Cline 安装与配置全流程3.1 安装 VS Code3.2 安装 Cline 插件3.3 获取 DeepSeek API Key3.4 配置 Cline 与 DeepSeek 连接 四、实战演…...

【RedisLockRegistry】分布式锁

RedisLockRegistry分布式锁 介绍 RedisLockRegistry‌是Spring框架提供的一种分布式锁机制,它基于Redis来实现对共享资源的保护,防止多个进程同时对同一资源进行修改,从而避免数据不一致或其他问题‌ 基本原理 RedisLockRegistry通过Redi…...

脚本批量启动Node服务器

创建文件start-projects.ps1 定义项目路径(使用PowerShell中更可靠的路径表示方式) $变量A “E:/XXXX文件根目录” $变量B “E:/XXXX” $变量C “E:/XXXX” 打开变量A并执行npm run dev Start-Process powershell -ArgumentList “-NoExit”, “-Com…...

使用命令行加密混淆C#程序

C#作为托管语言编译生成的IL中间代码极易被反编译工具还原源码。据统计,超过83%的商业软件曾遭遇过代码逆向风险,导致核心算法泄露、授权被跳过. 因此对于C#语言开发的程序来说, 在发布前进行混淆和加密非常有必要. 本文主要介绍如何使用恒盾C#混淆加密…...

零基础上手Python数据分析 (23):NumPy 数值计算基础 - 数据分析的加速“引擎”

写在前面 —— 超越原生 Python 列表,解锁高性能数值计算,深入理解 Pandas 的底层依赖 在前面一系列关于 Pandas 的学习中,我们已经领略了其在数据处理和分析方面的强大威力。我们学会了使用 DataFrame 和 Series 来高效地操作表格数据。但是,你是否好奇,Pandas 为何能够…...

深度学习实战106-大模型LLM+股票MCP Server的股票分析和投资建议应用场景

大家好,我是微学AI,今天给大家介绍一下深度学习实战106-大模型LLM+股票MCP Server的股票分析和投资建议应用场景。 文章目录 一、项目背景(一)大型语言模型(LLM)在金融领域的应用趋势(二)模型上下文协议(MCP)的兴起(三)大模型LLM+股票MCP服务的需求二、开发流程(…...

IDEA配置将Servlet真正布署到Tomcat

刚开始只能IDEA运行完Servlet web application 并保持IDEA运行才能通过浏览器访问到我的Servlet,跟想象中的不一样,不应该是IDEA运行完项目以后只要打开Tomcat就能访问吗?事实时运行完项目只要关掉IDEA就不能再访问到应用了,而且T…...

交叉编译paho.mqtt.c和paho.mqtt.cpp(MQTT客户端)

一、参考资料 【MQTT】paho.mqtt.cpp 库的 介绍、下载、交叉编译、MQTT客户端例子源码-CSDN博客 【MQTT】paho.mqtt.c 库的“介绍、下载、交叉编译” 详解,以及编写MQTT客户端例子源码-CSDN博客 二、准备工作 1. 重要说明 paho.mqtt.cpp与paho.mqtt.c&#xff…...

Prometheus中部署Alertmanager

部署Alertmanager 是 Prometheus 生态系统中的一个重要步骤,用于管理和处理 Prometheus生成的告警。Alertmanager和Prometheus Server一样均采用Golang实现,并且没有第三方依赖。一般来说我们可以通过以下几种方式来部署Alertmanager:二进制包…...

van-field组件设置为textarea属性被软键盘遮挡问题

在移动端van-field 输入框当type为text时,调出软键盘输入框会被顶上去,但type为textarea时不会被顶上去,可以用下面方法来实现: 1. 来2个van-field type为text的输入框z-index: 1 type为textarea的输入框z-index: 9999&#x…...

websheet之 编辑器

一、默认编辑器 该单元格编辑器是控件自带的编辑器,用户不需要指定。 二、下拉选择 该单元格编辑器是控件自带的编辑器的一种。该控件需要你指定下拉的数据源。在下面的例子中,我们给C3和C6单元格指定了币种的下拉选择编辑器。参数见:六、 参…...

氢气泄漏应急预案应包括哪些内容?

氢气泄漏应急预案是科研实验室中应对氢气泄漏事故的重要文件,其内容需要全面覆盖预防、检测、响应和善后处理等环节,确保在紧急情况下能够快速、有序地采取措施,最大限度地减少事故风险和损失。以下是氢气泄漏应急预案应包括的主要内容&#…...

【每天一个知识点】IPv4(互联网协议版本4)和IPv6(互联网协议版本6)

IPv4(互联网协议版本4)和IPv6(互联网协议版本6)是用于在互联网上标识和定位设备的两种主要协议。它们的主要区别在于地址空间、结构、以及一些附加功能。以下是两者的对比: 1. 地址长度 IPv4: 地址长度为32位&#xf…...

【高频考点精讲】前端构建工具对比:Webpack、Vite、Rollup和Parcel

前端构建工具大乱斗:Webpack、Vite、Rollup和Parcel谁是你的菜? 【初级】前端开发工程师面试100题(一) 【初级】前端开发工程师面试100题(二) 【初级】前端开发工程师的面试100题(速记版) 最近在后台收到不少同学提问:“老李啊,现在前端构建工具这么多,我该选哪个?…...

牛客小白月赛115-B题:签到题

题目传送门牛客网竞赛题目 一、题目描述 给定n道题目,每道题难度为aᵢ。要从中选出m道题组成比赛,使得难度最低的题目(签到题)数量尽可能多。求签到题的最大可能数量。 输入: 第一行两个整数n,m(1≤m≤n≤210⁵)第…...

【QQMusic项目复习笔记——音乐管理模块详解】第四章

🌹 作者: 云小逸 🤟 个人主页: 云小逸的主页 🤟 motto: 要敢于一个人默默的面对自己,强大自己才是核心。不要等到什么都没有了,才下定决心去做。种一颗树,最好的时间是十年前,其次就是现在&…...

IPv6 技术细节 | 源 IP 地址选择 / Anycast / 地址自动配置 / 地址聚类分配

注:本文为 “IPv6 技术细节” 相关文章合集。 部分文章中提到的其他文章,一并引入。 略作重排,未整理去重。 如有内容异常,请看原文。 闲谈 IPv6 - 典型特征的一些技术细节 iteye_21199 于 2012-11-10 20:54:00 发布 0. 巨大的…...

代码随想录算法训练营day11(二叉树)

华子目录 翻转二叉树思路 对称二叉树思路 二叉树的最大深度思路 翻转二叉树 https://leetcode.cn/problems/invert-binary-tree/description/ 思路 采用递归的思路可以前序遍历和后序遍历,不能使用中序遍历 # Definition for a binary tree node. # class TreeNo…...

A Comprehensive Survey of Spoken Language Models

语音大语言模型(Spoken Language Model, SLM)正在引领人工智能领域的新一轮革新浪潮。正如文本自然语言处理从任务特定模型迈向通用大语言模型的演进,语音领域也正在经历类似转型。 为填补该领域系统性综述的空白,芝加哥大学、卡…...

深入解析 SMB 相关命令:smbmap、smbclient、netexec 等工具的使用指南

Server Message Block(SMB)协议是广泛应用于文件共享、打印机共享和进程间通信的网络协议,尤其在 Windows 环境中常见。渗透测试和网络安全审计中,SMB 是一个重要的攻击面,相关工具如 smbmap、smbclient 和 netexec 提…...

伊克罗德信息亮相亚马逊云科技合作伙伴峰会,以ECRobot 智能云迁移助手在GenAI Tech Game比赛勇夺金牌!

十年同行,共赴盛会:伊克罗德信息亮相2025亚马逊云科技Partner Summit 2025亚马逊云科技合作伙伴峰会(AWS Partner Summit)于乌镇盛大启幕,这场全球云计算领域的顶级盛会汇聚了亚马逊云科技全球核心合作伙伴、行业领袖与…...

【蓝桥杯】P12165 [蓝桥杯 2025 省 C/Java A] 最短距离

最短距离 题目描述 在一条一维的直线上,存在着 n n n 台显示器和 n n n 个电源插座。老师给小蓝布置了个任务:负责将每台显示器通过电源线与一个插座相连接(每个插座最多只能给一台显示器供电);同时,老…...

深入浅出Sentinel:分布式系统的流量防卫兵

引言 在当今的微服务架构和分布式系统中,服务间的依赖关系错综复杂,一个服务的故障可能会像多米诺骨牌一样引发整个系统的崩溃。如何有效地保护系统免受突发流量、不稳定依赖服务的影响,成为每个架构师和开发者必须面对的挑战。今天&#xf…...

vite+vue2+elementui构建之 vite.config.js

webpack版本太低,构建依赖太多,头大。 各种查阅资料,弄了一份直通构建vite构建elementUi核心文件, 构建基于开源若依vue2vue3版本改造,感谢开源,感谢若依。 package.json 地址 vitevue2elementui构建之…...

【Pandas】pandas DataFrame radd

Pandas2.2 DataFrame Binary operator functions 方法描述DataFrame.add(other)用于执行 DataFrame 与另一个对象(如 DataFrame、Series 或标量)的逐元素加法操作DataFrame.add(other[, axis, level, fill_value])用于执行 DataFrame 与另一个对象&…...

Java 后端开发环境安装

Java环境安装 1. 安装程序 Java1.8下载,由于官网下载需要登录,比较麻烦,所以我将安装文件放到了我的资源中,大家通过资源直接下载即可 jdk-8u351-windows-x64.exe 大家根据自己的电脑的配置选择适当的版本 然后一路下一步 这里…...

Azure Data Factory ETL设计与调度最佳实践

一、引言 在Azure Data Factory (ADF) 中,调度和设计ETL(抽取、转换、加载)过程需要综合考量多方面因素,以确保数据处理高效、可扩展、可靠且易于维护。以下将详细介绍相关关键考虑因素、最佳实践,并辅以具体示例说明…...

【Mybatis】MyBatisPlus的saveBatch真的是批量插入吗?深度解析与性能优化

前言 在使用MyBatis-Plus进行批量数据插入时,许多开发者会发现:即使调用saveBatch方法,数据库仍会产生大量INSERT语句。本文将深入源码揭示背后的真相,并提供3种性能优化方案,让你的批量插入速度提升10倍!…...

图像预处理-图像亮度变换

一.亮度变换 首先有两个关联的说法: 亮度调整:像素强度整体变高或者变低。 对比度调整:暗处像素强度变低,亮处像素强度变高,从而拉大中间某个区域范围的显示精度。 opencv中操作这两种变换的公式为: 对比…...

基于AI应用创业IDEA:使用百度搜索开放平台的MCP广场智能推荐MCPServices服务

基于AI应用创业IDEA:使用百度搜索开放平台的MCP广场智能推荐MCPServices服务 在当今快速发展的技术时代,人工智能(AI)已经成为推动各行各业创新的关键力量。特别是在创业领域,AI技术不仅能够帮助提升产品性能&#xf…...

URP-利用矩阵在Shader中实现物体的平移和缩放

一、平移 方法一: v.positionOS.xyz _Translate.xyz; 方法二: 利用矩阵实现平移: 二、缩放 方法一: v.positionOS.xyz * _Scale.xyz*_Scale.w; _Scale.w实现全局缩放 方法二: Shader"unity/Translation"…...

跟着尚硅谷学vue-day5

计算属性和watch监视 一.姓名案例 1.姓名案例-插值语法 <div id"root">姓&#xff1a;<input type"text" value"张" v-model"firstname"><br/><br/>名&#xff1a;<input type"text" value&q…...

猫咪如厕检测与分类识别系统系列【十三】猫咪进出事件逻辑及日志优化【下】

前情提要 家里养了三只猫咪&#xff0c;其中一只布偶猫经常出入厕所。但因为平时忙于学业&#xff0c;没法时刻关注牠的行为。我知道猫咪的如厕频率和时长与健康状况密切相关&#xff0c;频繁如厕可能是泌尿问题&#xff0c;停留过久也可能是便秘或不适。为了更科学地了解牠的如…...

【Java学习笔记】冒泡排序

冒泡排序 思想&#xff1a;经过一轮遍历比较&#xff0c;把最大的放在数组的末尾 int[] a {3, 2, 1}; for( int i 0; i < a.length-1; i){for( int j 0; j < a.length-1-i; j){if(a[j] > a[j1]){int temp a[j];a[j] a[j1];a[j1] temp;}} } for( int i 0; i &…...

【含文档+PPT+源码】基于微信小程序的校园快递平台

项目介绍 本课程演示的是一款基于微信小程序的校园快递平台&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系统 3.该项目附带…...

Vue3 自定义指令完全指南

Vue3 自定义指令完全指南 目录 基本概念指令注册方式常用应用场景注意事项 基本概念 在Vue3中&#xff0c;自定义指令是用于直接操作DOM的重要工具。相比Vue2&#xff0c;Vue3的指令系统进行了优化和简化。 生命周期钩子 钩子名称对应Vue2名称触发时机createdbind元素属性…...

神经辐射场(NeRF)技术解析:3D重建与虚拟世界的未来

神经辐射场&#xff08;NeRF&#xff09;技术解析&#xff1a;3D重建与虚拟世界的未来 ——从算法突破到元宇宙基础设施的演进之路 摘要 本文通过算法演进图谱、训练流程解析、PyTorch代码实战及产业应用洞察&#xff0c;构建从学术创新到工程落地的完整技术框架。实验数据显…...

050_基于springboot的音乐网站

一、系统架构 前端&#xff1a;vue | element-ui | html | jquery | css | ajax 后端&#xff1a;springboot | mybatis 环境&#xff1a;jdk1.8 | mysql | maven | nodejs | idea 二、代码及数据 三、功能介绍 01. web端-注册 02. web端-登录 03. web…...

Django之旅:第七节--模版继承

定义母版—new.html <!DOCTYPE html> <html lang"en"><head></head><body><div>{% block contents %}{% endblock %}</div></body> </html> 继承母模板 {% extends new.html %} {% block contents %}&…...

Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2

在 Windows 10 上运行 Ollama 时遇到 llama runner process has terminated: exit status 2 错误&#xff0c;可能是由多种原因引起的。以下是逐步解决方案&#xff1a; 1. 检查 Ollama 服务状态 按 Win R 输入 services.msc&#xff0c;找到 Ollama 服务&#xff0c;确保其状…...

基于 Python(selenium) 的百度新闻定向爬虫:根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容

该项目能够根据输入的关键词在百度新闻上进行搜索,并爬取新闻详情页的内容。 一、项目准备 1. 开发环境配置 操作系统:支持 Windows、macOS、Linux 等主流操作系统,本文以 Windows 为例进行说明。Python 版本:建议使用 Python 3.8 及以上版本,以确保代码的兼容性和性能。…...

YOLOX-PAI手部检测模型

YOLOX-PAI手部检测模型 # numpy > 1.20 from modelscope.pipelines import pipeline from modelscope.utils.constant import Tasksmodel_id iic/cv_yolox-pai_hand-detection hand_detection pipeline(Tasks.domain_specific_object_detection, modelmodel_id) output …...

速成GO访问sql,个人笔记

更多个人笔记&#xff1a;&#xff08;仅供参考&#xff0c;非盈利&#xff09; gitee&#xff1a; https://gitee.com/harryhack/it_note github&#xff1a; https://github.com/ZHLOVEYY/IT_note 本文是基于原生的库 database/sql进行初步学习 基于ORM等更多操作可以关注我…...

SkyWalking 安装与使用详细总结

SkyWalking 是一款开源的分布式应用性能监控&#xff08;APM&#xff09;系统&#xff0c;用于监控微服务、云原生应用、容器等。它支持服务跟踪、性能监控、日志分析和数据可视化。以下是 SkyWalking 的安装与使用详细步骤。 一、SkyWalking 安装 1. 下载 SkyWalking 访问 …...

产业观察:中国商飞2025.4.25

一.中国商飞简介 1.1 公司背景 中国商飞于 2008年5月11日 在上海成立&#xff0c;是实施国家大型飞机重大专项中大型客机项目的主体。公司由多家国有大型企业共同出资组建&#xff0c;包括国务院国资委、上海国盛集团、中航工业集团等。总部设在上海&#xff0c;拥有多个研发…...

【爬虫】DrissionPage-获取douyim用户下的视频

之前看过DrissionPage&#xff0c;觉得很厉害&#xff0c;比selenium简单&#xff0c;适合新手。因为盲目跟风逆向&#xff0c;今天看了一个DrissionPage案例直播&#xff0c;学习一下&#xff0c;真香哈。 DrissionPage官网&#xff1a;&#x1f6f0;️ 概述 | DrissionPage官…...

Kubernetes 节点 Not Ready 时 Pod 驱逐机制深度解析(下)

#作者&#xff1a;邓伟 文章目录 三、深度解析&#xff1a;源码逻辑与调优策略四、常见问题与排查五、最新动态与技术演进总结 三、深度解析&#xff1a;源码逻辑与调优策略 TaintManager 核心源码逻辑 &#xff08;1&#xff09;参数定义&#xff08;kube-controller-manage…...

markdown自动标题序号,标题序号,目录处理

在vscode下有插件 markdown aheads markdown标题与目录处理插件。 使用方法&#xff1a;在vscode中 ctrlshiftp 输入 AHeads 选择功能。 包含以下功能&#xff1a; "AHeads:AddIndex": "添加标题序号" "AHeads:RemoveIndex": "移除标题…...

模式设计简介

设计模式简介 设计模式是软件开发中经过验证的最佳实践解决方案,它是针对特定问题的通用解决方案,能够帮助开发者提升代码的可维护性、可扩展性和复用性。设计模式并非具体的代码实现,而是一种解决问题的思路和方法论,它源于大量的实践经验总结,旨在解决软件开发过程中反…...