计算机网络——TCP中的流量控制和拥塞控制
TCP中的流量控制和拥塞控制
流量控制
什么是流量控制
如果发送者发送数据过快,接收者来不及接收,那么就会出现分组丢失,为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。
流量控制的目的是:防止分组丢失,是构成TCP可靠性的一方面。
如何实现流量控制
由滑动窗口协议(连续ARQ协议)实现,滑动窗口协议即保证了分组无差错,有序接收,也实现了流量控制。主要的方式就是接收方返回的ACK会包含自己的接受窗口大小,并利用大小来控制发送方的数据发送。
拥塞控制
什么是拥塞控制
拥塞控制是作用于网络的,它是防止过多的数据注入网络,避免出现网络负载过大的情况,常见的方法就是
- 慢开始,避免拥塞
- 快重传、快恢复
拥塞控制算法
我们首先添加几个限定条件
- 数据是单方向传递,另一个窗口只发送确认
- 接收方的缓存足够大,因此发送方的大小由网络的拥塞程度来决定
慢开始算法
发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量,拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化,发送方让自己的发送窗口等于拥塞窗口,另外考虑到接收方的接受能力,发送窗口可能小于拥塞窗口。
慢开始算法的思路就是:不要一开始就发送大量的数据,先测探一下网络的拥塞程度,也就是说从小到大主键增加拥塞窗口的大小。
这里用报文段的个数作为拥塞窗口的大小举例说明慢开始算法,实际的拥塞窗口大小是以字节为单位的。
发送方没收到一个确认窗口,就把窗口cwnd加1
从上图可以看到,一个传输轮次所经历的时间其实就是往返时间RTT,而且每经过一个传输轮次,拥塞窗口cwnd就加倍
为了防止cwnd增长过大引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量,ssthresh的用法如下:
- 当 cwnd < ssthresh时:使用慢开始算法
- 当cwnd = ssthresh时:采用 慢开始或拥塞避免中的任意一种
- 当 cwnd > ssthresh时:采用拥塞避免算法
拥塞避免算法
拥塞避免算法让拥塞窗口缓慢增长,即没经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样能够让拥塞窗口按线性规律增长。
无论是在慢开始阶段,还是在拥塞控制阶段,只要发送方判断网络出现拥塞,就把慢开始门限 ssthressh设置为当前出现拥塞时发送窗口大小的一半(不能小于2),然后将拥塞窗口cwnd设置为1,执行慢开始算法。
这样做的目的是迅速减少主机发送到网络中的分组数,使得发送拥塞的路由器有足够时间把队列中积压的分组处理完毕。
- 拥塞窗口cwnd初始化为1个报文段,慢开始门限初始值为16
- 执行慢开始算法,指数规律增长到第4轮,即cwnd=16=ssthresh,改为执行拥塞避免算法,拥塞窗口按线性规律增长
- 假定cwnd=24时,网络出现超时(拥塞),则更新后的ssthresh=12,cwnd重新设置为1,并执行慢开始算法。当cwnd=12=ssthresh时,改为执行拥塞避免算法
乘法减小和加法增大
- 乘法减小”指的是无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞,就把慢开始门限ssthresh设置为出现拥塞时的发送窗口大小的一半,并执行慢开始算法,所以当网络频繁出现拥塞时,ssthresh下降的很快,以大大减少注入到网络中的分组数。
- 加法增大”是指执行拥塞避免算法后,使拥塞窗口缓慢增大,以防止过早出现拥塞。常合起来成为AIMD算法。
快重传算法
快重传要求接收方在收到一个失序的报文段后,就立即发出重复确定(为的是使发送方及早知道有报文段没有达到对方,可提高网络吞吐量约20%)而不要等到自己发送数据时捎带确定。快重传算法规定,发送方只要一连收到三个重复确定就应当立即重传对方尚为收到的报文段,而不必继续等待设置的重传计时器时间到期
快恢复
快重传配合使用的还有快恢复算法,有以下两点要求
- 当发送方连续收到三个重复确认时,就执行乘法减小算法,把ssthresh门限减半(为了预防发送拥塞),但是接下来并不执行慢开始算法
- 考虑到如果网络出现拥塞的话,就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞,所以此时不执行慢开始算法,而是将cwnd设置为ssthresh减半后的值,然后执行拥塞避免算法,使cwnd缓慢增大,如下图所示:TCP Reno版本是目前使用最广泛的版本。
在采用快恢复算法时,慢开始算法只是在TCP连接建立时和网络出现超时时才使用
相关文章:
计算机网络——TCP中的流量控制和拥塞控制
TCP中的流量控制和拥塞控制 流量控制 什么是流量控制 如果发送者发送数据过快,接收者来不及接收,那么就会出现分组丢失,为了避免分组丢失,控制发送者的发送速度,使得接收者来得及接收,这就是流量控制。 …...
BFV/BGV全同态加密方案浅析
本文主要为翻译内容,原文地址:Introduction to the BFV encryption scheme、https://www.inferati.com/blog/fhe-schemes-bgv 之前的一篇博客我们翻译了CKKS全同态加密方案的内容,但该篇上下文中有一些知识要点,作者在BFV/BGV中已…...
Elasticsearch 实战应用详解!
Elasticsearch 实战应用详解 一、概述 Elasticsearch 是一个高度可扩展的开源全文搜索引擎,它能够处理大量数据并提供实时搜索和分析能力。基于 Lucene 构建,Elasticsearch 通过简单的 RESTful API 接口隐藏了 Lucene 的复杂性,使全文搜索变…...
最新最全面的JAVA面试题免费下载
面对求职市场的激烈竞争,掌握全面且深入的Java知识已成为每一位Java开发者必不可少的技能。《2023最新版Java面试八股文》是一份精心整理的面试准备资料,旨在帮助广大开发者系统复习,从容应对Java及相关技术栈的面试挑战。这份文档不仅汇聚了…...
修改sql server 数据库的排序规则
文章目录 引言I 解决方案案例II 知识扩展排序规则SQL SERVER支持的所有排序规则引言 新增sql server 数据库实例的默认排序规则不支持中文存储,导致乱码 解决方案: 修改排序规则为Chinese_PRC_CI_AS 或者 Chinese_PRC_Stroke_CI_AS_WS或者Chinese_PRC_CI_AI_KS_WS 仅对新增…...
Node学习记录-until实用工具
来源:Nodejs 第十八章(util) util 是Node.js内部提供的很多实用或者工具类型的API util.promisify 用于将遵循Node回调风格(即最后一个参数为回调函数)的函数转换成返回Promise的函数,这样可以使得异步代…...
【Mac】安装 VMware Fusion Pro
VMware Fusion Pro 软件已经正式免费提供给个人用户使用! 1、下载 【官网】 下拉找到 VMware Fusion Pro Download 登陆账号 如果没有账号,点击右上角 LOGIN ,选择 REGISTER 注册信息除了邮箱外可随意填写 登陆时,Username为…...
解决go run main.go executable file not found in %PATH%
项目场景: 命令行执行go run 都会报 executable file not found in %PATH% 问题描述 最近我发现,我通过命令行,无论是跑什么go文件,都会出现这个错误。但是我通过我的IDE就能跑,于是我也没有管它。 但是最近&#x…...
C++ 手写常见的任务定时器
序言 最近在编写 C 的服务器代码时,我遇到了一个需求,服务器很可能会遇到那些长期不活跃的连接,这些连接占用了一定的资源但是并没有进行有效的通信。为了优化资源使用,我决定实现一个定时器,以便定期检查连接的活跃状…...
【VS+QT】联合开发踩坑记录
最新更新日期:2024/11/05 0. 写在前面 因为目前在做自动化产线集成软件开发相关的工作,需要用到QT,所以选择了VS联合开发,方便调试。学习QT的过程中也踩了很多坑,在此记录一下,提供给各位参考。 1. 环境配…...
PH热榜 | 2024-11-05
DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 Github:https://github.com/LaughingZhu/DevNow 1. FullContext 标语:用自然语言,让你的市场推广流…...
模拟机器人逐字回答,类似于实时回话
代码如下 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </head><…...
Java学习路线:JUL日志系统(一)日志框架介绍
目录 打印日志 日志的级别 打印文件 日志过滤器 日志输出流程 首先,为什么要使用日志系统? 如果单纯地用System.out.println打印信息,如果项目比较大,存在大量的信息就会显得非常凌乱。 而且,当我们希望在debug的…...
[渲染层网络层错误] net::ERR_CONTENT_LENGTH_MISMATCH 问题解决
问题描述 问题背景 微信小程序访问后端img资源的时候,偶尔出现这个感叹号,图片加载不出来,但是对应的url贴出来在浏览器中访问,或者重新加载是可以访问的。 错误描述 经查询前端报错 [渲染层网络层错误] net::ERR_CONTENT_LE…...
C 语言编程中的常见错误及解决方案
在 C 语言开发中,编译和链接错误是常见的问题,尤其是在处理多个源文件时。本文将总结一些常见的错误,并提供相应的解决方案,以帮助开发者更高效地排查和修复这些问题。 1. 结构体作用域问题 问题描述 在函数参数列表中定义结构体…...
开源模型应用落地-glm模型小试-glm-4-9b-chat-批量推理(二)
一、前言 GLM-4是智谱AI团队于2024年1月16日发布的基座大模型,旨在自动理解和规划用户的复杂指令,并能调用网页浏览器。其功能包括数据分析、图表创建、PPT生成等,支持128K的上下文窗口,使其在长文本处理和精度召回方面表现优异&a…...
【C++篇】数据之林:解读二叉搜索树的优雅结构与运算哲学
文章目录 二叉搜索树详解:基础与基本操作前言第一章:二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树? 第二章:二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 第三章&a…...
C#-类:声明类、声明类对象
一:类的声明 class 类名 {//特征——成员变量//行为——成员方法//保护特征——成员属性//构造函数和析构函数//索引器//运算符重载//静态成员 }类名:帕斯卡 同一个语句块中的不同类 不能重名 二:声明类对象 2.1 类的声明 ≠ 类对象的声…...
【AIGC】ChatGPT提示词Prompt高效编写技巧:逆向拆解OpenAI官方提示词
博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯OpenAI官方提示词的介绍OpenAI官方提示词的结构与组成如何通过分析提示词找到其核心组件 💯OpenAI官方提示词分析案例一:制定教学计划案例二&…...
【linux】端口监听和终止进程
端口监听和终止进程 有时候,即使进程看起来已经关闭,它可能仍然占用着端口。你可以使用 netstat -tulpn | grep <端口号> 来查看哪个进程正在使用该端口,然后使用 kill -9 来强制关闭该进程。 [naienotebook-npu-b1bb152e-7655cb9d4…...
Mirage Flow 与卷积神经网络(CNN)的跨模态融合应用
Mirage Flow 与卷积神经网络(CNN)的跨模态融合应用 你有没有想过,让机器不仅能“看见”图片,还能像人一样“理解”并“描述”图片里的故事?比如,给一张复杂的医学影像,它不仅能圈出病灶&#x…...
构建专业级Java量化交易系统的5个实战步骤
构建专业级Java量化交易系统的5个实战步骤 【免费下载链接】ta4j A Java library for technical analysis. 项目地址: https://gitcode.com/gh_mirrors/ta/ta4j 你是否曾想用Java构建自己的量化交易系统,但被复杂的技术指标和回测框架吓退?今天&a…...
快速部署MinerU镜像:开箱即用的PDF提取方案,告别繁琐配置
快速部署MinerU镜像:开箱即用的PDF提取方案,告别繁琐配置 1. 引言:为什么你需要一个“开箱即用”的PDF提取工具? 如果你曾经尝试过从一份复杂的PDF文档里提取文字、表格和公式,你大概率经历过这样的痛苦:…...
专业数据恢复工具对决:UFS Explorer与R-Studio的实战选型指南
1. 数据恢复工具的核心价值与选型逻辑 当硬盘突然罢工或重要文件被误删时,专业数据恢复软件就像数字世界的急救医生。我经历过太多凌晨三点被叫醒处理服务器崩溃的案例,选对工具往往能决定数据"复活"的成功率。UFS Explorer和R-Studio这对老对…...
告别CTex!TeX Live+Texstudio组合安装避坑指南(Windows/Mac双平台)
告别CTex!TeX LiveTexstudio组合安装避坑指南(Windows/Mac双平台) 如果你曾经使用过CTex套装,可能会被其"开箱即用"的便利性所吸引。但当你需要跨平台协作或追求更灵活的定制时,TeX LiveTexstudio的组合无疑…...
Phi-3-mini-4k-instruct-gguf开发者案例:为微信小程序后端提供的轻量API服务
Phi-3-mini-4k-instruct-gguf开发者案例:为微信小程序后端提供的轻量API服务 1. 项目背景与需求 在开发微信小程序时,我们经常需要为前端提供智能文本处理能力,比如自动生成商品描述、智能客服回复、内容摘要等。传统方案要么需要调用第三方…...
OpenClaw数据安全:Qwen3.5-4B-Claude本地处理敏感合同
OpenClaw数据安全:Qwen3.5-4B-Claude本地处理敏感合同 1. 为什么法律行业需要本地化AI处理 去年我参与了一个法律科技项目,团队最初尝试用公有云API处理合同文本时,遭遇了客户对数据出海的强烈抵触。某次演示中,当法务总监看到合…...
163MusicLyrics:开源高效歌词获取与管理解决方案
163MusicLyrics:开源高效歌词获取与管理解决方案 【免费下载链接】163MusicLyrics Windows 云音乐歌词获取【网易云、QQ音乐】 项目地址: https://gitcode.com/GitHub_Trending/16/163MusicLyrics 在数字音乐时代,歌词已成为音乐体验不可或缺的一…...
别再死记硬背了!用Python可视化理解L-smooth函数与梯度Lipschitz连续
别再死记硬背了!用Python可视化理解L-smooth函数与梯度Lipschitz连续 第一次接触L-smooth这个概念时,我盯着数学公式看了整整一个下午——梯度Lipschitz连续、二次上界、等价性证明,每个词都认识,连起来却像天书。直到我用Python画…...
实战指南:在CentOS 8上部署与配置BIND DNS权威服务器
1. 为什么要在CentOS 8上搭建DNS服务器? 想象一下这样的场景:公司内部有几十台服务器,每次新同事入职都要发一份IP地址对照表;开发团队每次联调测试都要反复确认服务地址;运维人员排查问题时要在记事本里翻找各种192.1…...
