Linux网络:传输层TCP协议(四)拥塞控制及延迟应答

news2024/11/19 16:27:00

目录

一、拥塞控制

二、延迟应答


一、拥塞控制

虽然 TCP 拥有滑动窗口这个大杀器机制来根据具体情况对发送的数据大小和速度进行实时控制, 能够高效并且可靠的发送大量的数据.

但是如果在双方建立好连接后的刚开始阶段就发送大量的数据。仍然可能引发一些问题. 因为同一个网络上有很多台计算机, 有可能当前的网络状态就已经较为拥堵.

在不清楚当前网络的状态下, 直接发送大量的数据, 是很有可能导致网络更加拥堵的.。所以TCP引入了慢启动机制,先发少量的数据,让其先去探探路, 摸清当前的网络拥堵状态, 再决定按照多大的速度来向对方传输数据。

此处引入一个新的概念称为拥塞窗口

发送开始的时候, 将拥塞窗口大小定义为1;

每次收到一个 ACK应答, 拥塞窗口的大小就加1;

每次要发送数据报文的时候, 将拥塞窗口的大小和接收端主机反馈的窗口大小进行比较, 取较小的值作为实际发送的窗口;

像上面这样的拥塞窗口的增长速度, 是指数级别的。 "慢启动" 只是指初使时较慢, 但是增长速度非常快。

为了不增长的那么快, 因此不能使拥塞窗口单纯的加倍增长。

此处引入一个叫做慢启动的阈值来控制流量。

当拥塞窗口超过这个阈值的时候, 不再按照指数方式增长, 而是按照线性方式增长。

当 TCP 开始启动的时候, 慢启动阈值等于窗口最大值;

在每次网络拥塞,超时重发的时候, 慢启动阈值会变成原来的一半, 同时拥塞窗口置回1;

发生少量的丢包时, 仅仅是触发超时重传; 当大量的丢包出现时, 就认为是网络拥塞;

当 TCP 连接建立好通信开始后, 网络吞吐量就会逐渐上升; 随着网络发生拥堵, 吞吐量会迅速下降; 从而拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方, 但是又要避免给网络造成太大压力而采取的一种折中方案。

二、延迟应答

如果接收数据的主机接收到数据后立刻返回ACK应答, 根据拥塞控制和流量控制如果立马返回,这时候返回的窗口可能比较小。

假设接收端缓冲区为1MB。一次收到了 500KB的数据; 如果立刻应答, 返回的窗口就是500KB;

但实际上可能处理端的处理速度非常快, 10ms 之内就把500KB数据从缓冲区提出来了;

在这种情况下, 接收端处理的能力还远没有达到自己的极限, 即使窗口再放大一些, 也能正常处理过来;

如果接收端稍等一会再做应答, 比如等待 200ms 再做应答, 那么这个时候返回的窗口大小就是1M;

窗口越大, 网络的吞吐量就越大, 传输效率就会越高。

而我们的目标是在保证网络不拥塞的情况下尽量的去提高传输效率;

那么所有的包都可以进行延迟应答吗? 肯定也不是的;

数量限制: 每间隔N个包就应答一次;

时间限制: 超过最大的延迟时间就应答一次;

具体的数量和超时时间, 各个操作系统之间也有差异;

一般 N 取 2, 最大延迟时间取 200ms;

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

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

相关文章

【2024蓝桥杯/C++/A组/团建】

题目 代码 #include<bits/stdc.h> using namespace std;const int N 2e510;int a[N], b[N]; int ans; vector<int> Ga[N], Gb[N];void dfs(int ap, int af, int bp, int bf, int dep) {ans max(ans, dep);map<int, int> bk;for(auto ason : Ga[ap])if(aso…

免费【2024】springboot 程序设计基础视频学习系统的设计与实现

博主介绍&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流✌ 技术范围&#xff1a;SpringBoot、Vue、SSM、HTML、Jsp、PHP、Nodejs、Python、爬虫、数据可视化…

CSS:mix-blend-mode属性(设置元素的混合模式)

目录 一、mix-blend-mode属性介绍 二、mix-blend-mode常用属性值 三、mix-blend-mode属性应用 四、文字智能适配背景 1、原始样式 2、添加混合 3、实现代码 一、mix-blend-mode属性介绍 CSS中的【mix-blend-mode属性】描述了元素的内容应该与元素的直系父元素的内容和…

nodejs安装及环境配置轨道交通运维检测系统App-OA人事办公排班故障维修

✌网站介绍&#xff1a;✌10年项目辅导经验、专注于计算机技术领域学生项目实战辅导。 ✌服务范围&#xff1a;Java(SpringBoo/SSM)、Python、PHP、Nodejs、爬虫、数据可视化、小程序、安卓app、大数据等设计与开发。 ✌服务内容&#xff1a;免费功能设计、免费提供开题答辩P…

【前端 09】JavaScript中的对象与JSON

JavaScript中的对象与JSON 在JavaScript中&#xff0c;对象和JSON&#xff08;JavaScript Object Notation&#xff09;是两个紧密相连但又有区别的概念。它们都在数据处理和交换中扮演着重要角色。本文将详细讲解JavaScript中的自定义对象以及JSON对象的基本概念、格式、用法…

赵本山:我跟你找游大队去,王平:实话告诉你,我就是游队长——小品《卖梨》(下)的台词与解说

赵本山&#xff1a;我跟你找游大队去&#xff0c;王平&#xff1a;实话告诉你&#xff0c;我就是游队长 ——小品《卖梨》&#xff08;下&#xff09;的台词与解说 &#xff08;接上&#xff09; 王平&#xff08;饰演警察&#xff09;&#xff1a;你少废话 你赶紧给我挪地方…

视觉SLAM第二讲

SLAM分为定位和建图两个问题。 定位问题 定位问题是通过传感器观测数据直接或间接求解位置和姿态。 通常可以分为两类&#xff1a;基于已知地图的定位和基于未知地图的定位。 基于已知地图的定位 利用预先构建的地图&#xff0c;结合传感器数据进行全局定位。SLAM中的全局…

USB 2.0 协议专栏之 USB 2.0 连接与枚举(二)

前言&#xff1a;本篇博客为手把手教学的 USB 2.0 协议栈类精品博客&#xff0c;该专栏博客侧重针对 USB 2.0 协议进行讲解。本篇博客将针对 USB 2.0 中的连接与枚举进行教学&#xff0c;USB 的枚举过程是 USB 协议中至关重要的一环&#xff0c;也是嵌入式工程师必须掌握的内容…

杂谈(杂鱼谈论c语言)——2.大小端字节序

⼤⼩端字节序和字节序判断 当我们了解了整数在内存中存储后&#xff0c;我们调试看⼀个细节&#xff1a; #include <stdio.h> int main() {int a 0x11223344;return 0; } 调试的时候&#xff0c;我们可以看到在a中的 0x11223344 这个数字是按照字节为单位&#xff0c;…

【多模态大模型】 ALBEF in NeurIPS 2021

一、引言 论文&#xff1a; Align before Fuse: Vision and Language Representation Learning with Momentum Distillation 作者&#xff1a; Salesforce Research 代码&#xff1a; ALBEF 特点&#xff1a; 该方法使用ViT进行图像特征提取&#xff0c;提出将BERT分两部分&am…

解密阿里大神写的天书般的Tree工具类,轻松搞定树结构!

首发公众号&#xff1a;赵侠客 一、引言 最近公司新进了不少新人&#xff0c;包括一些来自阿里、网易等大型企业的资深工程师。我们组的一位新同事是阿里来的专家&#xff0c;我在CR&#xff08;Code Review, 简称CR&#xff09;时看到了他编写的一个关于树操作的工具类&#…

用qt调试can通信,波特率如何设置

硬件环境介绍&#xff1a; 1、usb转can通信模块型号为创芯科技的USB-CAN适配器&#xff0c;厂家提供的测试软件和demo程序&#xff0c;如下图所示&#xff1b; 2、下位单片机STM32&#xff0c;can通信参数如下图&#xff0c;该测试程序时单片机一直在发送数据&#xff1b; 测试…

STM32F103 RT-thread配置LCD的FMC

使用的正点原子F103ZET6开发板&#xff0c;屏幕是一块4.3寸的TFTLCD&#xff0c;接下来直接讲配置流程 参考文章&#xff1a;基于正点原子F103精英板和CubeIDE的Hal库LCD驱动移植&#xff08;从零开始&#xff09;_正点原子 cubeide-CSDN博客 1&#xff0c;使用RT_Thread Stu…

最新版Bertom降噪,压缩,均衡,简单好用有效,win和mac,支持Intel和M芯片

一。Denoiser Classic 3.07 win&mac 1&#xff09; Denoiser Classic是一个零延迟降噪插件&#xff0c;用于音乐&#xff0c;后期制作和现场使用。 2&#xff09;产品特点&#xff1a; Bertom Denoiser是一个专为音乐和后期制作/对话设计的降噪插件。 一个简单的用户界面&…

深入理解计算机系统 CSAPP 家庭作业11.8

回收子进程是书本537页的内容 在tiny.c文件加以下代码,记得重新编译哦 书中提到CGI是在动态内容中的,所以题目的意思应该是在动态内容里面回收 void handler1(int sig) {int olderrno errno;while (waitpid(-1,NULL,0)>0){Sio_puts("Handler reaped child\n");…

光伏电站气象站:现代光伏系统的重要组成部分

光伏电站气象站&#xff0c;作为现代光伏系统的重要组成部分&#xff0c;集成了气象学、电子信息技术、数据处理与分析等多学科技术于一体&#xff0c;能够实时监测并记录包括温度、湿度、风速、风向、太阳辐射强度、降雨量在内的多种气象参数。这些数据不仅是评估光伏板发电效…

基于粒子群优化算法(PSO)永磁同步电机电流环多参数辨识MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 仿真模型简介 在同步旋转dq 轴坐标系下建立PMSM 数学模型&#xff0c;将定子dq 轴电压设为辨识模型和实际测量值的输入&#xff0c;设计了PSO 辨识PMSM 参数的适应度函数。该辨识方法不需推导复杂的电机数学…

动态开辟字符串—malloc

该函数包含在头文件<stdlib.h>中. 函数原型 void * malloc (size_t size) ——分配所需的内存空间&#xff0c;并返回一个指向它的指针 size_t size, 该参数的类型是size_t(无符号整型),它表示要开辟的内存块的大小(以字节为单位),它的作用是告诉函数需要动态开辟多少个…

从代码层面熟悉UniAD,开始学习了解端到端整体架构

0. 简介 最近端到端已经是越来越火了&#xff0c;以UniAD为代表的很多工作不断地在不断刷新端到端的指标&#xff0c;比如最近SparseDrive又重新刷新了所有任务的指标。在端到端火热起来之前&#xff0c;成熟的模块化自动驾驶系统被分解为不同的独立任务&#xff0c;例如感知、…