TCP流量控制+拥塞控制

流量控制:

  • 目标:流量控制主要解决的是发送方和接收方之间处理能力的不匹配问题。它的目的是确保发送方不会发送数据过快,以至于接收方无法及时接收并处理这些数据,从而避免数据包在网络中堆积和丢失。
  • 实现方式:在TCP协议中,流量控制主要通过使用滑动窗口机制来实现。接收方会告知发送方其当前能够接收的数据量(即接收窗口大小),发送方根据这个信息调整自己的发送速率。

流量控制: 流量控制主要关注的是发送方和接收方之间的数据传输速率。它确保发送方不会发送数据过快,以至于接收方来不及处理。流量控制的目的是防止接收方的缓冲区溢出,这通常通过动态调整接收窗口的大小来实现。接收方通过TCP报文的确认(ACK)来告知发送方其缓冲区的可用空间(接收窗口大小),发送方根据这个信息来调整发送速率。如果接收方的缓冲区满了,它会发送一个窗口大小为0的ACK,这时发送方会停止发送新的数据,直到接收方处理完数据并更新窗口大小。

如下,

(1)三次握手开始时:

A声明win=3,请求SYN;

B回复win=3,回复请求SYN,确认ACK;

A回复win=3,确认ACK。

(2)握手一旦建立好:

A连续发送3个数据给B,同时每一个数据里还在声明自己的窗口任然win=3,即A没接收到数据。

(3)B的3个win已经被占满

(4)当CPU取走一个窗口数据,空出1个:

B又给A发去win=1的信号

(5)A继续发来1个数据填充空白窗口

拥塞控制:

  • 目标:拥塞控制着眼于整个网络资源的管理,而非单个连接。它是为了防止过多的数据同时涌入网络,导致中间节点(如路由器)的缓冲区溢出,进而引发网络性能急剧下降甚至崩溃的问题。
  • 实现方式:TCP采用多种拥塞控制算法,包括慢开始、拥塞避免、快重传和快恢复等策略。发送方维护一个称为“拥塞窗口”的状态变量,根据网络反馈动态调整这个窗口的大小以适应网络状况。例如,在建立连接或检测到丢包时,TCP会启动慢开始算法逐渐增加发送速率;而在收到三个重复确认后,会触发快重传和快恢复算法。

拥塞控制: 拥塞控制则是为了防止网络中的数据包过多,导致网络拥塞。当网络中的路由器或链路负载过重时,可能会出现丢包现象。拥塞控制通过调整发送方的发送速率来避免这种情况。TCP协议中的拥塞控制算法包括慢开始(Slow Start)、拥塞避免(Congestion Avoidance)、快重传(Fast Retransmit)和快恢复(Fast Recovery)等策略。这些策略共同工作,使得发送方在网络出现拥塞迹象时能够减少发送速率,而在网络状况良好时逐渐增加发送速率。

cwnd(Congestion Window)

是TCP(传输控制协议)中的一个重要概念,它代表拥塞窗口的大小,用于控制发送方在任何给定时间可以发送到网络上的数据量。拥塞窗口的主要目的是防止网络拥塞,确保数据包不会过多地涌入网络,从而避免网络资源过载。

拥塞窗口cwnd的产生和调整遵循TCP的拥塞控制算法,这些算法包括慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)和快速恢复(Fast Recovery)。

ssthresh

在TCP拥塞控制中通常被称为“慢启动阈值”(Slow Start Threshold)。这个术语描述了拥塞窗口(cwnd)在慢启动阶段增长到某个特定值时,TCP将从慢启动算法切换到拥塞避免算法的点。当拥塞窗口达到或超过这个阈值时,TCP将开始以更保守的方式增长窗口,即从指数增长(慢启动)变为线性增长(拥塞避免),以避免网络拥塞。在网络出现拥塞迹象时,如超时重传或连续收到三个重复的确认ACK,ssthresh会被设置为当前拥塞窗口的一半,这是为了迅速减少发送到网络中的数据量,给网络一个恢复的机会。

  1. 初始值:在TCP连接建立时,ssthresh通常被设置为一个较大的值,例如65535字节(这是在TCP Reno版本中常见的默认值),这允许TCP在网络中快速地探测可用的带宽。

  2. 动态调整:当网络出现拥塞迹象时(例如,通过超时重传或连续收到三个重复的确认ACK),ssthresh会被设置为当前拥塞窗口(cwnd)的一半。这样做的目的是迅速减少发送到网络中的数据量,给网络一个“喘息”的机会,以便处理积压的数据包。

慢启动(Slow Start)(指数增长):

第一个包,2^0=1;第二个包,2^2=4;第三个包,2^3=8;第四个包,2^4=16(ssthresh=16)

一切顺利,数据包直接飙到慢启动阈值(如果ssthresh=65535字节,中间可能早就网络拥塞了)

拥塞避免(Congestion Avoidance)(线性增长):

16,17,18,19,20,21,22,23,24,网络超时cwnd

慢启动(Slow Start)

(一夜回到解放前,同时ssthresh被更新为拥塞窗口的一半:cwnd/2)

第一个包,2^0=1;第二个包,2^2=4;第三个包,2^3=8;ssthresh=12

拥塞避免(Congestion Avoidance)(线性增长)

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

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

相关文章

【.NET Core】深入理解async 和 await 理解

【.NET Core】深入理解async 和 await 理解 文章目录 【.NET Core】深入理解async 和 await 理解一、概述二、async异步执行机制理解三、async与await应用3.1 async与await简单应用3.2 带有返回值async与await应用 四、async和await中常见问题总结4.1 当方法用async标识时&…

7条策略,提升可视化大屏的科技感,值得收藏。

以下是从设计角度上提升科技感的几条建议: 使用现代化的字体: 选择现代化的字体能够让大屏幕看起来更加科技感。比如,Sans-serif字体、Roboto字体、Lato字体等都是现代化的字体。 设计简洁、清晰的图表: 图表是可视化大屏设计中…

端口号被占用怎么解决

1、快捷键"winR"打开运行,在其中输入"cmd"命令,回车键打开命令提示符。 2、进入窗口后,输入"netstat -ano"命令,可以用来查看所有窗口被占用的情况。 比如端口号为7680的端口被占用了&#xff0c…

一次失败的面试经历:我只想找个工作,你却用面试题羞辱我

金三银四就要来了,即将又是一波求职月,面对跳槽的高峰期,很多软件测试人员都希望能拿一个满意的高薪offer,但是随着招聘职位的不断增多,面试的难度也随之加大,而面试官更是会择优录取 小王最近为面试已经焦…

循环测试之旅 —— 深度解析Pytest插件 pytest-repeat!

在软件开发中,测试的重要性不言而喻。而为了提高测试的鲁棒性和可靠性,Pytest插件 pytest-repeat 应运而生。这个插件可以帮助你轻松实现测试用例的循环运行,以更全面地评估代码的稳定性。本文将深入介绍 pytest-repeat 插件的基本用法和实际…

msvcp140.dll丢失要怎么处理的一些解决方法,分享一些解决办法

在Windows操作系统中,有时候我们会遇到一些dll文件丢失或损坏的问题。其中一个常见的错误是"找不到msvcp140.dll"。这个错误会导致一些应用程序无法正常运行,给我们的电脑使用带来了很大的困扰。不用担心,今天我们就来说说由于找不…

OpenAI视频生成模型Sora的全面解析:从ViViT、扩散Transformer到NaViT、VideoPoet

前言 真没想到,距离视频生成上一轮的集中爆发(详见《视频生成发展史:从Gen2、Emu Video到PixelDance、SVD、Pika 1.0、W.A.L.T》)才过去三个月,没想OpenAI一出手,该领域又直接变天了 自打2.16日OpenAI发布sora以来(其开发团队包…

《剑指Offer》笔记题解思路技巧优化 Java版本——新版leetcode_Part_4

《剑指Offer》笔记&题解&思路&技巧&优化_Part_4 😍😍😍 相知🙌🙌🙌 相识😢😢😢 开始刷题1. LCR 148. 验证图书取出顺序——栈的压入、弹出序列2. LCR 14…

简单贪吃蛇模拟(C语言版本·)

简单贪吃蛇模拟(C语言版本) 一、所需win32 API知识二、游戏逻辑实现 一、所需win32 API知识 1.在这儿,直接弱化概念,把在贪吃蛇中用到的API知识说一下!  1.1用cmd命令来设置控制台窗口的长宽   1.2.用title 指令…

如何使用Pycharm中的image模块以及导入打开图片(属性)

在学习pytorch深度学习的过程中,通常会使用到大量的数据集,包括训练集和测试集。 以下是pytorch加载数据集的流程: 在notebook中使用help方法查看Dataset类的功能以及操作: 使用dataset需要继承Dataset父类 重写__getitem__方法和…

更换笔记本电脑内存条

写在前头 本人笔记本电脑早年购买,随着学习工作量的增大,我在使用电脑时往往需要同时打开多个软件,这时电脑的表现就难以言论了。虽然这个电脑在我的手中表现出其“志在千里”的鸿志(毕竟它主人是谁里),但…

前端秘法基础式(CSS)(第二卷)

目录 一.字体 1.字体的设置 2.字体的颜色 2.1预定义的颜色值 2.2十六进制 2.3rgb表示法 3.字体粗细及样式 4.文本 4.1text-align 4.2text-indent 4.3text-decoration 二.背景属性 三.圆角矩形 四.元素显示模式 五.盒模型 六.弹性布局 七.Chrome调试工具 一.字…

普通人steam搬砖到底能不能做,一定谨记这4点

steam/csgo搬砖项目拥有小投资收益稳定的特点,多搬多赚,这个项目已存在很多年,是非常老牌的阳光项目,很多人比较关心普通人steam搬砖到底能不能做,这里想提醒你谨记这4点。 1:steam/csgo搬砖项目不需要玩游…

java.sql.SQLException: No operations allowed after statement closed.

背景 某天下午,客服反馈线上服务出现问题,不能分配了。于是我登录到系统上,进行同样的操作发现也不行。当然同时我已经登录到服务器打开了日志,发现报错了,下面就是日志的错误信息: java.sql.SQLExceptio…

AI嵌入式K210项目(29)-模型加载

文章目录 前言一、下载部署包二、C部署三、搭建文件传输环境四、文件传输五、调试六、MicroPython部署总结 前言 上一章节介绍了如何进行在线模型训练,生成部署包后,本章介绍加载模型; 一、下载部署包 训练结束后,在训练任务条…

基于ESP32+Platformio的物联网RTOS_SDK-CC_Device

本项目基于ESP32以及Platformio平台开发,请自行查阅如何配置这个环境 开源gitee地址:cc_smart_device 如果愿意贡献项目or提出疑问和修改的,请在gitee上提issue 项目里的mqtt服务器是公共的 请大家最好换成私有的 否则容易收到其他用户的错误…

mybatis 基础入门使用

1、mybatis 简介 1.1、mybatis 特性 MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架; MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集; MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和…

【Java面试】MongoDB

目录 1、mongodb是什么?2、mongodb特点什么是NoSQL数据库?NoSQL和RDBMS有什么区别?在哪些情况下使用和不使用NoSQL数据库?NoSQL数据库有哪些类型?启用备份故障恢复需要多久什么是master或primary什么是secondary或slave系列文章版…

【shell】2、Makefile

文章目录 一、变量1.1 定义简单变量1.2 定义数组1.3 引用变量1.4 规则中定义变量 一、变量 1.1 定义简单变量 用变量名 值的语法来定义变量。这些变量可以用于存储命令、文件名、目录路径等信息,以便在Makefile规则中重复使用 # 定义一个变量 VAR_NAME value# …

【医学大模型】MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用

MEDDM LLM-Executable CGT 结构化医学知识: 将临床指导树结构化,便于LLM理解和应用 提出背景对比传统医学大模型流程步骤临床指导树流程图识别临床决策支持系统 总结解决方案设计数据收集与处理系统实施临床决策支持 提出背景 论文:https://arxiv.org/p…