TCP流量控制+拥塞控制

news/发布时间2024/6/7 23:29:33

流量控制:

  • 目标:流量控制主要解决的是发送方和接收方之间处理能力的不匹配问题。它的目的是确保发送方不会发送数据过快,以至于接收方无法及时接收并处理这些数据,从而避免数据包在网络中堆积和丢失。
  • 实现方式:在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.bcls.cn/jYSu/245.shtml

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

相关文章

14:00面试,14:06就出来了,问的问题过于变态了。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到12月一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40…

Matlab机械臂建模:机器人工具箱的使用导入自己的机械臂模型

本文主要介绍如何在matlab中建立机械臂模型(前提要下载了Robotics Toolbox机器人工具箱~),并进行基于正逆运动学计算的轨迹运动。对于已有的Solidworks机械臂三维模型,如何导入Matlab,并对其进行运动控制。 关于机器人…

腾讯云4核8G服务器够用吗?能支持多少人?

腾讯云4核8G服务器支持多少人在线访问?支持25人同时访问。实际上程序效率不同支持人数在线人数不同,公网带宽也是影响4核8G服务器并发数的一大因素,假设公网带宽太小,流量直接卡在入口,4核8G配置的CPU内存也会造成计算…

uniapp API文档地址 以及 HBuilder安装

uniapp API文档地址 以及 HBuilder安装 一、进入 当前网站 uni-app 官网 二、点击截图下载文件 三、下载HBuilder X 进入 当前网站 浏览器会识别 也可以自行选择版本四、直接点击Download For Windows 直接点击下载会下载压缩包 解压 后 双击截图内的 .exe五、以上上述完…

Discuz! X收藏列表页调用封面图片详细教程

Discuz! X默认收藏列表不显示封面图,我们接到客户需求要开发封面图功能在帖子列表,这是我们整理好的详细教程,下载即可查看 修改后,显示封面的收藏列表截图: 详细开发教程下载地址:Discuz! X收藏列表页调用…

ECMAScript 2024(ES15)Set新增方法(求交集、并集、差集、超集)

Chrome 浏览器将在下一个版本(Chrome 122)支持 7 个全新的 JavaScript 方法,以增强 Set 对象的功能。 这些方法都是由 proposal-set-methods 提案提出的,目前该提案已经进入第三阶段,API 已经基本稳定。预计在 2024 年…

第13章 网络 Page738~741 13.8.3 TCP/UDP简述

libcurl是C语言写成的网络编程工具库,asio是C写的网络编程的基础类型库 libcurl只用于客户端,asio既可以写客户端,也可以写服务端 libcurl实现了HTTP\FTP等应用层协议,但asio却只实现了传输层TCP/UDP等协议。 在学习http时介绍…

数据结构(2) 线性表

线性表 线性表的定义线性表的基本操作lnitList(&L)DestroyList(&L)Listlnsert(&L,i,e)ListDelete(&L,i,&e)LocateElem(L,e)GetElem(L,i)Length(L)PrintList(L)Empty(L)Tips:引用值 小结 根据数据结构的三要素–逻辑结构、数据的运算、存储结构,…

HTML5

HTML5 一、 HTML简介 HTML5 在狭义上是指新一代的 HTML 标准,在广义上是指:整个前端。 1. HTML5 优势 针对 JavaScript ,新增了很多可操作的接口。新增了一些语义化标签、全局属性。新增了多媒体标签,可以很好的替代 flash 。更…

UI设计20问(01):如何规避公说公有理婆说婆有理。

hello,我是大千UI工场,这次又开辟了一个新专题,回答UI设计中经常碰到问题,本期先回答UI设计评判标准的问题,欢迎关注评论点赞转发。 一、什么是公说公有理婆说婆有理 "公说公有理,婆说婆有理"是…

《合成孔径雷达成像算法与实现》Figure6.18

% rho_r c/(2*Fr)而不是rho_r c/(2*Bw) % Hsrcf exp函数里忘记乘pi了 clc clear close all参数设置 距离向参数设置 R_eta_c 20e3; % 景中心斜距 Tr 2.5e-6; % 发射脉冲时宽 Kr 20e12; % 距离向调频率 alpha_os_r 1.2; …

【IDEA关闭项目一直转圈】

IDEA关闭项目一直转圈: IDEA启动时,会自动打开上次关闭时所有显示的窗口,如果本次工作不需要上次打开的所有窗口,可以基于选择窗口界面的右上角去关闭。 项目关闭失败 但是偶尔会出现窗口关闭时,一直显示“正在关闭项…

PyCharm 新建目录 (directory or folder)

PyCharm 新建目录 [directory or folder] 1. 新建目录2. Enter new directory name -> OKReferences 1. 新建目录 right mouse click on the project -> New -> Directory 2. Enter new directory name -> OK ​​​ References [1] Yongqiang Cheng, https:/…

matlab入门,在线编辑,无需安装matab

matlab相关教程做的很完善,除了B站看看教程,官方教程我觉得更加高效。跟着教程一步一步编辑,非常方便。 阅读 MATLAB 官方教程: MATLAB 官方教程提供了从基础到高级的教学内容,内容包括 MATLAB 的基本语法、数据处理…

MySQL的基础架构

文章目录 前言MySQL的基础架构总结 前言 你使用 MySQL 开发,你知道 MySQL 的基础架构吗?本文带你来入门MySQL 的基础架构 MySQL的基础架构 MySQL 是我们经常使用到的数据库。它的基础架构分为 server 层与存储引擎层。 server 层:用于存储…

作业帮 x TiDB丨多元化海量数据业务的支撑

导读 作业帮是一家成立于 2015 年的在线教育品牌,致力于用科技手段助力教育普惠。经过近十年的积累,作业帮运用人工智能、大数据等技术,为学生、老师、家长提供学习、教育解决方案,智能硬件产品等。随着公司产品和业务场景越来越…

C++文件操作->文本文件(->写文件、读文件)、二进制文件(->写文件、读文件)

#include<iostream> using namespace std; #include <fstream>//头文件包含 //文本文件 写文件 void test01() { //1.包含头文件 fstream //2.创建流对象 ofstream ofs; //3.指定打开方式 ofs.open("test.txt", ios::out); //4.写…

宝塔FTP文件传输服务结合cpolar内网穿透实现远程连接本地服务

⛳️ 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 文章目录 ⛳️ 推荐1. Linux安装Cpolar2. 创建FTP公网地址3. 宝塔FTP服务设置4. FTP服务远程连接小结 5. 固定FTP公网地址6. 固…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到9月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

Java——网络编程

目录 一、什么是网络编程 1、常见的软件架构&#xff08;CS & BS&#xff09; 1.1、BS架构的优缺点​编辑 1.2、CS架构的优缺点​编辑 2、小结​编辑 二、网络编程三要素​编辑 1、IP​编辑 1.1、IPv4​编辑 1.2、IPv6​编辑 1.3、小结​编辑 1.4、IPv4的一些细…
推荐文章