TCP的拥塞控制_基础知识_四种拥塞控制方法

TCP的拥塞控制

一.拥塞控制的基本概念

  • 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫作拥塞
    • 计算机网络中的链路容量(带宽)、交换节点中的缓存和处理机等都是网络的资源
  • 若出现拥塞而不进行控制,整个网络的吞吐量将随输入负荷的增大而下降。
    在这里插入图片描述

二.拥塞控制的基本方法

首先,先对比流量控制与拥塞控制
流量控制:以接收方的接收能力控制发送方(源点)的发送速率只与特定的点对点通信的发送方和接收方之间的流量有关
拥塞控制:源点根据各方面因素,按拥塞控制算法自行控制发送速率全局性问题,涉及网络中所有的主机、路由器等

总结:流量控制是接收方限制发送方的流量,拥塞控制是根据全局的情况,设置了拥塞窗口,限制发送.


从控制论的角度分类,可分为开环控制和闭环控制

开环控制:

  • 试图用良好的设计来解决问题。
  • 从一开始就保证问题不会发生。
  • 一旦系统启动并运行起来,就不需要中途修正。

当网络的流量特征可以准确规定且性能要求可以事先获得时,适合使用开环控制。

闭环控制:

  • 基于反馈的控制方法,包括以下三个部分:
    • 监测网络拥塞在何时、何地发生。
    • 把拥塞发生的相关信息传送到可以采取行动的地方。
    • 调整网络的运行以解决拥塞问题。

当网络的流量特征不能准确描述或者当网络不提供资源预留时,适合使用闭环控制。因特网采用的就是闭环控制方法。


衡量网络拥塞的一些指标:

  • 由于缓存溢出而丢弃的分组的百分比
  • 路由器的平均队列长度
  • 超时重传的分组数量
  • 平均分组时延和分组时延的标准差

根据拥塞信息的反馈形式,可将闭环拥塞控制算法分为显示反馈算法和隐式反馈算法.

显示反馈算法:从拥塞节点(即路由器)向源点提供关于网络中拥塞状态的显式反馈信息。

隐式反馈算法:源点自身通过对网络行为的观察(例如超重传或往返时间RTT)来推断网络是否发生了拥塞。TCP采用的就是隐式反馈算法

拥塞控制并不仅仅是运输层要考虑的问题。显式反馈算法就必须涉及网络层。虽然一些网络体系结构(如ATM网络)主要在网络层实现拥塞控制,但因特网主要利用隐式反馈在运输层实现拥塞控制。

三.TCP的四种拥塞控制的方法

慢开始,拥塞避免,快重传,快恢复

为了集中精力讨论拥塞控制算法的基本原理,假定如下条件
1.数据是单方向传送的,而另一个方向只传送确认。
2.接收方总是有足够大的接收缓存空间,因而发送方的发送窗口的大小仅由网络的拥塞程度来决定,也就是不考虑接收方对发送方的流量控制。
3.以TCP最大报文段MSS(即TCP报文段的数据载荷部分)的个数作为讨论问题的单位,而不是以字节为单位(尽管TCP是面向空节流的)


首先,先来认清概念swnd,cwnd,rwnd
在这里插入图片描述
图解:

发送窗口的大小由接收窗口和拥塞窗口共同决定

加入慢开始门限
在这里插入图片描述

(一)慢开始算法与拥塞避免算法

最开始的拥塞窗口为cwnd=1,防止一开始数据传输量过大,造成拥塞.
假设慢开始门限值ssthresh=16,也就是说cwnd增大到16之后,切换算法为拥塞避免算法.

慢开始算法开始的过程:指数增长,一个传输轮次结束,也就是一个RTT的时间结束,cwnd由1变2,2变4,4变8…
在这里插入图片描述
拥塞避免算法开始的过程:线性增长,不同与慢开始算法的指数增长,拥塞避免每次只+1.
在这里插入图片描述
假如,出现了部分报文段丢失的情况,重传计时器超时,此时拥塞窗口变为1,重新开始慢开始算法,同时慢开始门限值/2.


总结:直观图如下:
在这里插入图片描述
图解:

“慢开始”是指一开始向网络注入的报文段少,而并不是指拥塞窗口cwnd的值增长速度慢。 “拥塞避免”也并非指完全能够避免拥塞,而是指在拥塞避免阶段将cwnd值控制为按线性规律增长,使网络比较不容易出现拥塞。

(二) 快重传算法和快恢复算法(改进TCP性能)

快重传算法有什么用?

  • 采用快重传算法可以让发送方尽早知道发生了个别TCP报文段的丢失。
  • “快重传”是指使发送方尽快(尽早)进行重传,而不是等重传计时器超时再重传
    • 这就要求接收方不要等待自己发送数据时才进行捎带确认,而是要立即发送确认,即使收到了失序的报文段要立即发出对已收到的报文段的重复确认
    • 发送方一旦收到3个连续的重复确认,就将相应的报文段立即重传,而不是等该报文段的重传计时器超时再重传。

在这里插入图片描述
图解:

对于个别丢失的报文段,发送方不会出现超时重传,也就不会误认为出现了拥塞而错误地把拥塞窗口cwnd的值减为1。实践证明,使用快重传可以使整个网络的吞吐量提高约20%。


快恢复算法有什么用?

  • 与快重传算法配合使用的是快恢复算法,发送方一旦收到3个重复确认,就知道现在只是丢失了个别的报文段,于是不启动慢开始算法,而是执行快恢复算法
    • 发送方将慢开始门限ssthresh的值和拥塞窗口cwnd的值都调整为当前cwnd值的一半,并开始执行拥塞避免算法
    • 也有的快恢复实现是把快恢复开始时的cwnd值再增大一些,即cwnd=新ssthresh+3.
      • 既然发送方收到了3个重复的确认,就表明有3个数据报文段已经离开了网络。
      • 这3个报文段不再消耗网络资源而是停留在接收方的接收缓存中。
      • 可见现在网络中不是堆积了报文段而是减少了3个报文段,因此可以适当把cwnd值增大一些。

总结:直观图如下:

在这里插入图片描述

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

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

相关文章

spring boot 配置多数据源 踩坑 BindingException: Invalid bound statement (not found)

在上一篇:《【已解决】Spring Boot多数据源的时候,mybatis报错提示:Invalid bound statement (not found)》 凯哥(凯哥Java) 已经接受了,在Spring Boot配置多数据源时候,因为自己马虎,导致的一个坑。下面&a…

Notepad++:多行数据操作

1)删除关键字之后(或之前)的所有字符 删除s之后(包含s)的所有内容;快捷键:s.*$ 替换成功 删除s之前(包含s)的所有内容;快捷键:^.*s 2&#xff09…

深度学习中的张量维度

1 深度学习中的张量 在深度学习框架中,Tensor(张量)是一种数据结构,用于存储和操作多维数组。张量可以被视为一种扩展的矩阵,它可以具有任意数量的维度。 在深度学习中,张量通常被用来表示神经网络的输入…

PowerDesigner生成数据字典

这里写自定义目录标题 1,创建物理模型2,创建数据源连接3,获取表4,创建报告 先看下最终效果 1,创建物理模型 2,创建数据源连接 填写数据源连接信息 测试连接是否成功 3,获取表 连接刚创建的数…

Springboot数据校验与异常篇

一、异常处理 1.1Http状态码 HTTP状态码是指在HTTP通信过程中,服务器向客户端返回的响应状态。它通过3位数字构成,第一个数字定义了响应的类别,后两位数字没有具体分类作用。以下是常见的HTTP状态码及其含义: - 1xx(信…

[PyTorch][chapter 8][李宏毅深度学习][Back propagation]

前言: 反向传播算法(英:Backpropagation algorithm,简称:BP算法)是一种监督学习算法,常被用来训练多层感知机。 它用于计算梯度计算中,降低误差。 目录: 链式法则 模型简介(Model) 损失函…

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用

【MATLAB第84期】基于MATLAB的波形叠加极限学习机SW-ELM代理模型的sobol全局敏感性分析法应用 前言 跟往期sobol区别: 1.sobol计算依赖于验证集样本,无需定义变量上下限。 2.SW-ELM自带激活函数,计算具有phi(x)e^x激…

第二证券:诱多诱空是指什么?股民该如何应对?

诱多诱空是指什么? 诱多诱空各指代主力的一类操盘行为。诱多是指主力有意营建股价上涨的假象,从而诱使不知情股民买入该股,主力趁机抛售股票离场,因为本身股价上涨靠主力一手织造,主力撤资后股价会回落,买…

Next.js 学习笔记(三)——路由

路由 路由基础知识 每个应用程序的骨架都是路由。本页将向你介绍互联网路由的基本概念以及如何在 Next.js 中处理路由。 术语 首先,你将在整个文档中看到这些术语的使用情况。以下是一个快速参考: 树(Tree):用于可…

云原生系列2-CICD持续集成部署-GitLab和Jenkins

1、CICD持续集成部署 传统软件开发流程: 1、项目经理分配模块开发任务给开发人员(项目经理-开发) 2、每个模块单独开发完毕(开发),单元测试(测试) 3、开发完毕后,集成部…

3A服务器 (hcia)

原理 认证:验证用户是否可以获得网络访问权。 授权:授权用户可以使用哪些服务。 计费:记录用户使用网络资源的情况 实验 步骤 1.配置ip地址 2.配置认证服务器 aaa authentication-scheme datacom(认证服务器名字&#xf…

2024 年 8 个顶级开源 LLM(大语言模型)

如果没有所谓的大型语言模型(LLM),当前的生成式人工智能革命就不可能实现。LLM 基于 transformers(一种强大的神经架构)是用于建模和处理人类语言的 AI 系统。它们之所以被称为“大”,是因为它们有数亿甚至…

iPhone手机开启地震预警功能

iPhone手机开启地震预警功能 地震预警告警开启方式 地震预警 版权:成都高新减灾研究所 告警开启方式

CSS浮动

前置传统网页布局的三种方式: 标准流(普通流/文档流): 浮动流: 定位流: 浮动: 实现元素在一行中向哪个方向排列 浮动后的元素还是可以设置边距的。 float默认是不会继承,但是可以强制设置flo…

使用Matlab实现声音信号处理

利用Matlab软件对声音信号进行读取、放音、存储 先去下载一个声音文件;使用这个代码即可 clear; clc; [y, Fs] audioread(xxx.wav); plot(y); y y(:, 1); spectrogram(y); sound(y, Fs); % player audioplayer(y, Fs);y1 diff(y(:, 1)); subplot(2, 1, 1); pl…

美国第二大互联网供应商泄露3600万用户数据

12月18日,美国第二大互联网服务供应商Xfinity 透露,10月份发生的一起网络攻击泄露了多达3600万用户的敏感数据。 Xfinity由康卡斯特公司所属,为美国用户提供宽带互联网和有线电视等服务。 该公司表示,攻击是受Citrix Bleed的 CVE…

基于PHP的蛋糕购物商城系统

有需要请加文章底部Q哦 可远程调试 基于PHP的蛋糕购物商城系统 一 介绍 此蛋糕购物商城基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈:phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销…

08.queue 容器

8、queue 容器 概念: Queue 是一种先进先出(First In First Out,FIFO)的数据结构,他有两个出口 队列容器允许从一端新增元素,从另一端移除元素队列中只有队头和队尾才可以被外界使用,因此队列…

Oracle:JDBC链接Oracle的DEMO

1、引入jar包: 2、DEMO: package jdbc;import java.sql.*;public class OracleConnectionExample {public static void main(String[] args) throws SQLException {Connection conn null;PreparedStatement statement null;try {// Register JDBC dri…

基于Hadoop的农产品价格信息检测分析系统

基于Hadoop的农产品价格信息检测分析系统 前言数据处理模块1. 数据爬取2. 数据清洗与处理3. 数据存储 数据分析与检测模块1. 农产品价格趋势分析2. 农产品价格检索3. 不同市场价格对比 创新点 前言 为了更好地了解农产品市场价格趋势和不同市场之间的价格差异,我设…