传输层7——TCP拥塞控制(重点!!!)

目录

一、认识拥塞控制

1、什么叫做拥塞?

2、拥塞的特点

3、流量控制 VS 拥塞控制

二、TCP如何防止拥塞?

1、慢开始

2、拥塞避免

3、3重复确认 和 快重传算法

4、快恢复算法

5、总结

三、主动队列管理AQM

1、技术背景

2、AQM思

想和实现策略


一、认识拥塞控制

1、什么叫做拥塞?

需求超过可供资源,即不够用
例如车太多,路不够宽,即拥塞

资源不够,我增加资源量不就行了吗?
不行。
例如:
一,增加节点缓存
可处理机处理速度跟不上 导致 排队
排队久了 导致 数据重传
重传 导致更多数据发到网络
更加拥堵

二、增加处理机处理速度
处理机快了,他没问题了,不代表其他地方没问题
依旧可能拥塞

好,你可能会疑惑,单个优化解决不了问题
那我tm全部都提高不就行了吗?
我速度加快,缓存加大,传输加快,你变快,我变大,统统加快加大
岂不妙哉?
谬也。
这样是能够容许更大的流量
可是,容量总是有限的,并不能无穷无尽
同时,更大的容量将会导致更大拥塞,造成更大的损失

所以,不能从根本上消除拥塞
因此,只能尽量避免拥塞
同时,拥塞会趋于恶化
例如路由器没有足够缓存,就会丢弃分组
于是发送方重传
导致更多的数据进入网络交通中
更堵

2、拥塞的特点

拥塞的控制是困难的,改进某个局部,
可能会对其他局部带来影响
因此,拥塞控制需要全盘考虑
这是十分复杂的

常注意的几个点:
1、分组的分组是拥塞表现,而不是原因
2、拥塞控制机制本身往往导致了网络拥塞的发生
3、开环控制:设计初期,考虑全局,一旦运行,力求不拥塞
4、闭环控制:不求消除拥塞,而是动态调节,力求避免拥塞(其实就是自主反馈调节机制)

闭环控制方式对拥塞的措施:
1、检测网络,以便知道何时、何地发生拥塞
2、把拥塞信息传到不拥塞,可以处理的地方
3、根据反馈,调节系统运行,消除拥塞

要动态检测网络是否拥塞,以及时反馈,总得有个标准
一些常见的拥塞标注:
丢失分组数、超时重传的分组数、平均分组时延等
这不重要,指标很多,略微分析即可

3、流量控制 VS 拥塞控制

拥塞控制是全局性的问题
是某一个地方除了问题,影响了全局的运行
因此属于全局性的协调
涉及所有人

流量控制仅仅是TCP链接双方的问题
是端对端之间出了问题
仅仅设计这俩货

二、TCP如何防止拥塞?

有四种机制:慢开始、拥塞避免、快重传、快恢复
将上述四种机制加以合适的方法进行搭配使用
即可达到消除拥塞,修正系统,通畅运行的妙用!

在讲解机制之前,需要了解的相关知识:
首先,发送方维持一个拥塞窗口cwnd,拥塞窗口取决于拥塞程度
其次,使发送窗口==拥塞窗口cwnd
一般来说,只要没有拥塞,就尽量增大拥塞窗口,以发送更多数据
相反,拥堵则减少

发送方如何得知到底发生拥塞了没有?
如何判断?
一般网络拥塞,就会导致路由器来不及处理
从而丢掉分组
可是,现代通信的传输质量很高
分组丢失的概率远小于1%
于是,只要发送的超时计时器超过时间
就可以判断网络发生了拥塞
因此,对发送方来说:网络拥塞的标志是:重传超时

1、慢开始

从小到大逐渐增加发送窗口
那么一开始设置多大呢?
SMSS:发送方最大报文段。单位,字节

慢开始阶段的初始cwnd设置规则

SMSS(字节)初始cwnd值(单位:SMSS)
SMSS > 21902 SMSS
1095 < SMSS ≤ 21903 SMSS
SMSS ≤ 10954 SMSS

拥塞窗口的单位实际上是字节数
慢开始规定:
每收到一个新的报文段,拥塞窗口最多增加1个SMSS大小(重传不算)
因此,每一次拥塞窗口增加的字节数一定小于等于SMSS

慢开始的机制,使得一开始并不发送很多的数据
而是逐步增加,称为慢开始
为了防止cwnd增加过大,该机制还设置了慢开始门限ssthresh
即发送窗口最大容量

只要慢开始的拥塞窗口大于ssthresh慢开始门限,则启动拥塞避免机制

2、拥塞避免

机制:每经过一个RTT时间,拥塞窗口增加1
慢开始则是每经过一个RTT时间,确认多少,增加多少
拥塞避免并非消除拥塞,只是减缓拥塞窗口增长速度,使网络不容易拥塞

当慢开始拥塞窗口大于门限,启动拥塞避免
让拥塞窗口增加的慢一点

而当拥塞避免运行到一定程度,拥塞窗口大到一定程度后
发送方开始出现重传超时
于是,判断网络拥塞
怎么办?
调整门限拥塞窗口cwnd设为1、执行慢开始算法
调整多少?
门限减一半,ssthresh /= 2

因此,如上述,慢开始和拥塞避免两种机制反复交替运行
就可以达到减少拥塞发生的情况

快重传、快恢复:啊????那我呢???

事实上,仅仅靠慢开始和拥塞控制并不能真正的减少拥塞
还有新的问题,还有高手

3、3重复确认 和 快重传算法

如图:

当时传送到M3时,分组丢失;但是事实上并没有发生拥塞
仅仅只是意外丢了一个分组M3
此时如果发送方迟迟收不到确认,就会导致超时重传
于是,判定网络阻塞,执行慢开始算法,导致降低传输效率

此时,
对于接收方,每收到一个数据分组
不论该数据分组是否是有序到达,接收方必须即时回发确认分组
于是,在超时重传时间内,
发送方就会收到多个对同一个报文的确定报文
于是,当发送方收到3个对同一个报文的确认报文时
就认为现在并未出现网络拥塞,
而是仅仅少接收一个报文段M3
因此,启动快重传算法:立即进行重传M3
同时,不启动慢开始,而是启动快恢复算法

4、快恢复算法

什么是快恢复算法?
即:
调整门限:ssthresh /= 2
设置拥塞窗口,cwnd  = ssthresh

执行完快恢复算法后,
开始执行拥塞避免算法

5、总结

慢开始:初始拥塞窗口很小,逐渐快速增大拥塞窗口
拥塞避免:当慢开始cwnd超过门限,启动拥塞避免,直到发生超时重传
超时重传发生,认为拥塞:
于是调整门限 = 当前超时cwnd / 2,cwnd设置为1
启动慢开始

特殊情况:
当发送方收到3个同样的ACK确定报文
启动快重传算法,迅速对丢失数据重传
发送方判断并未发生网络拥塞
于是不启动慢开始,启动快恢复:
调整门限ssthresh = cwnd / 2
cwnd = ssthresh

执行流程图:(必须理解!重点!!!)


拥塞窗口的增大减小,合起来称为AIMD算法

发送方的发送窗口 = min(接收方接收窗口, 发送方拥塞窗口)


三、主动队列管理AQM

1、技术背景

网络层对TCP拥塞控制影响最大的就是路由器的分组丢弃策略。
路由器按照先进先出的顺序进入缓存队列,如果后来的分组超过了队列长度
将会丢弃后续的分组,该策略叫做尾部丢弃

而路由器的丢弃往往会导致一连串的分组被丢弃
这就导致发送方判定网络拥塞,进入慢开始
同时,TCP的链接是复用网络层中的IP数据报的
因此,一个路由器的尾部丢弃可能会同时影响多个TCP链接
于是,这就导致许多TCP链接同时进入慢开始状态
从而使得整个网络的速度一同降低
这个现象就叫做:全局同步

为了避免全局同步问题,需要对路由器的分组丢弃策略进行调整
由是,提出了主动队列管理

2、AQM思

想和实现策略

导致全局同步问题的主要是分组集中被丢弃,导致多个TCP受到影响
这样太被动
因此,要逐步的丢弃,在出现拥塞征兆的初期,就逐步的进行部分丢弃
从而减少堆砌的压力,其实也就是一种预警措施

那么,该什么时候丢弃分组?
为路由器维持两个参数:队列最大门限 和 队列最小门限
于是:每有一个分组抵达,计算一次平均队列长度
如果平均队列长度 < 最小门限,加入缓存队列
如果平均队列长度 > 最大门限,丢弃分组
如果平均队列长度在最大和最小之间,按概率P进行丢弃

但是目前概率P并没有明确的标准


 

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

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

相关文章

[64]最小路径和⭐

[64]最小路径和⭐ 题目描述 给定一个包含非负整数的 m x n 网格 grid &#xff0c;请找出一条从左上角到右下角的路径&#xff0c;使得路径上的数字总和为最小。 **说明&#xff1a;**每次只能向下或者向右移动一步。 示例输入 示例 1&#xff1a; 输入&#xff1a;grid …

AI技术架构:从基础设施到应用

人工智能&#xff08;AI&#xff09;的发展&#xff0c;正以前所未有的速度重塑我们的世界。了解AI技术架构&#xff0c;不仅能帮助我们看懂 AI 的底层逻辑&#xff0c;还能掌握其对各行业变革的潜力与方向。 一、基础设施层&#xff1a;AI 技术的坚实地基 基础设施层是 AI 技…

每日计划-1213

1. 完成 SQL2 查询多列 https://www.nowcoder.com/exam/oj?page1tabSQL%E7%AF%87topicId199 2. 八股部分 1) C 中面向对象编程如何实现数据隐藏&#xff1f; 在c中&#xff0c;可以将数据成员声明为私有或受保护&#xff0c;并提供公有的成员函数来访问和修改这些数据成员&am…

【ADS射频电路设计教程】1. ADS基本操作

下面介绍ADS中主要仿真器的使用 1. 直流仿真 直流仿真器在控制面板的simulator-dc 直流仿真器 但是ADS自带有很多仿真器&#xff0c;可以直接来调用 选用晶体管电流扫描的模板 就可以输出模板 然后调入晶体管模型 然后要设置扫描的电压&#xff0c;选择dc仿真器对vds进行扫描…

EasyGBS点对点穿透P2P远程访问技术在安防视频监控中的应用

随着信息技术的快速发展&#xff0c;安防视频监控系统在公共安全领域的应用变得越来越广泛。传统的视频监控系统多依赖于中心服务器进行视频流的集中处理和分发&#xff0c;这不仅增加了网络带宽的负担&#xff0c;还可能成为系统性能瓶颈。为了解决这些问题&#xff0c;P2P&am…

CTFHub 命令注入-综合练习(学习记录)

综合过滤练习 命令分隔符的绕过姿势 ; %0a %0d & 那我们使用%0a试试&#xff0c;发现ls命令被成功执行 /?ip127.0.0.1%0als 发现一个名为flag_is_here的文件夹和index.php的文件&#xff0c;那么我们还是使用cd命令进入到文件夹下 http://challenge-438c1c1fb670566b.sa…

美团2024年秋招第一场笔试【前端移动端】

美团2024年秋招第一场笔试【前端&移动端】 2024/12/12 1.在一个长度为28的数组中删除第5个元素时&#xff08;元素序号&#xff1a;1~28&#xff09;&#xff0c;需要向前移动&#xff08;23&#xff09;个元素。 2.如下图一个树型结构&#xff0c;其结点E在树的中序遍历…

2025周易算命网站搭建详细方法+源码选择php环境的配置

以下是一个详细的搭建教程&#xff0c;包括网站分类、环境配置、程序设计和功能实现。 1. 环境准备 1.1 服务器选择 操作系统: Linux&#xff08;推荐使用Ubuntu或CentOS&#xff09;Web服务器: Nginx数据库: MySQLPHP版本: 7.4.x&#xff08;确保小于8.0&#xff09; 1.2 安…

【ABAP SAP】开发-BUG修补记录_采购申请打印时品名规格品牌为空

项目场景&#xff1a; TCODE:自开发程序ZMMF004 采购申请打印 问题描述 ZMMF004打印的时候&#xff0c;有的采购申请的品名、规格、品牌为空 原因分析&#xff1a; 1、首先我通过写SQL语句查底表来看这几条采购申请本身有无品名、规格、品牌 SQL语句如下&#xff0c;只需修…

人员离岗监测摄像机智能人员睡岗、逃岗监测 Python 语言结合 OpenCV

在安全生产领域&#xff0c;人员的在岗状态直接关系到生产流程的顺利进行和工作环境的安全稳定。人员离岗监测摄像机的出现&#xff0c;为智能人员睡岗、逃岗监测提供了高效精准的解决方案&#xff0c;而其中的核心技术如AI识别睡岗脱岗以及相关的算法盒子和常见的安全生产AI算…

Linux之条件变量,信号量,生产者消费者模型

Linux之条件变量&#xff0c;信号量&#xff0c;生产消费者模型&#xff0c;日志以及线程池 一.条件变量1.1条件变量的概念1.2条件变量的接口 二.信号量2.1信号量的重新认识2.2信号量的接口 三.生产者消费者模型3.1生产者消费者模型的概念3.2基于阻塞队列的生产者消费者模型3.3…

Leecode刷题C语言之K次乘法运算后的最终数组①

执行结果:通过 执行用时和内存消耗如下&#xff1a; 代码如下&#xff1a; int* getFinalState(int* nums, int numsSize, int k, int multiplier, int* returnSize) {int *ret (int *)malloc(sizeof(int) * numsSize);memcpy(ret, nums, sizeof(int) * numsSize);while (k…

配置中心 选型 : Apollo Vs. Nacos Vs. spring cloud config

为什么我们需要一个微服务配置中心&#xff1f; 首先&#xff0c;我们可以想象下&#xff0c;如果没有配置中心&#xff0c;我们的项目可能是这样的&#xff1a;不同环境的配置文件都放在项目里面&#xff0c;部署时可以通过启动参数来指定使用哪个环境的配置。 这种方式有两…

LAVE——基于大语言模型的新型代理辅助视频编辑工具允许用户根据自己的编辑风格进行调整

概述 论文地址&#xff1a;https://arxiv.org/abs/2402.10294 视频是一种非常强大的交流和讲述故事的媒介。随着社交媒体和视频共享平台的出现&#xff0c;视频的受欢迎程度直线上升&#xff0c;许多人都在制作和分享自己的内容。然而&#xff0c;对于初学者来说&#xff0c;视…

【Vulkan入门】09-CreateFrameBuffer

目录 先叨叨git信息关键代码VulkanEnv::FindHostVisitbaleMemoryTypeIndex()TestPipeLine::CreateFramebuffers() 与网上大多数文章不同&#xff0c;其他文章基本上都使用窗口框架&#xff08;X11、GLFW、WSL等&#xff09;提供的surface来显示Vulkan渲染出的图像。我认为那样会…

题目 1688: 数据结构-字符串插入

第一种方式字符串 #include<iostream> #include<cstring> #include<algorithm> using namespace std; int main(){string s1,s2;int n;cin>>s1>>s2>>n;s1.insert(n-1,s2);cout<<s1<<endl;return 0; } 第二种方式字符数组 …

【KodExplorer】可道云KodExplorer-个人网盘安装使用

说明&#xff1a;安装kodExplorer &#xff08;不是Kodbox&#xff09;&#xff1b;Kodbox需求服务器至少2核4G内存&#xff0c;要求环境具备php/redis/mysql/。安装kodExplorer 就是比较方便简单部署&#xff0c;个人版免费。 一、安装环境需求 服务器: Windows&#xff0c;…

在服务器(linux系统)安装anaconda

按照官方教程操作即可 1.下载anaconda3&#xff0c;选择对应版本 curl -O https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh2.安装anaconda bash ~/Anaconda3-2024.06-1-Linux-x86_64.sh一直按“enter”键查看协议&#xff0c;然后选择“yes”即可。…

使用 WebRtcStreamer 实现实时视频流播放

WebRtcStreamer 是一个基于 WebRTC 协议的轻量级开源工具&#xff0c;可以在浏览器中直接播放 RTSP 视频流。它利用 WebRTC 的强大功能&#xff0c;提供低延迟的视频流播放体验&#xff0c;非常适合实时监控和其他视频流应用场景。 本文将介绍如何在Vue.js项目中使用 WebRtcSt…

建立基于TCP的客户端和服务端

函数介绍&#xff1a; 1.socket() 作用&#xff1a;创建套接字 domain: AF_INET&#xff1a;IPv4 Internet 协议族。AF_INET6&#xff1a;IPv6 Internet 协议族。AF_UNIX&#xff1a;Unix 域协议族&#xff0c;用于在同一台主机上的进程间通信。 type: SOCK_STREAM&#xff1a…