计算机网络——拥塞控制(1)

2023-11-15

1. 拥塞(congestion)

当过多的包在网络缓冲区中竞争某个相同链路时,队列会溢出丢包,当这种丢包成为普通事件时,则称网络发生拥塞。
简单概述就是对聚合带宽的需求超过了链路的可用容量。

1.1. 产生原因

宏观原因:网络资源分布不均匀,流量分布不均匀,
微观原因:报文聚合到达率大于路由器输出链路的带宽

1.2. 后果

  1. 多个包丢失,链路利用率低下
  2. 全网同步振荡,吞吐量下降
  3. 高排队延迟,拥塞崩溃

2. 拥塞控制

资源分配就是尽量合理的满足用户对网络资源的需求,但是总会有满足不了的情况
拥塞控制就是网络主机和路由器防止网络过载的情况采取的措施。这种措施可以是阻止几个用户使用网络,更好的方式是让全网都来减少流量,所以拥塞控制经常包含资源分配方法。

2.1. 资源分配和拥塞控制基本单位:数据流

流是在源目主机对之间,通过相同路由而发送的一系列包,在路由器中的资源分配中这是一个重要的抽象。
流过同一路由器,且具有若干相同头部特征的一系列数据包。这些特征是:源地址、目地址、源端口号、目端口号、协议类型、服务类型TOS、输入端逻辑接口等。
“通道”是端-端连通的一种抽象,“流”对网络路由器是可见的。

2.2. 拥塞控制与流量控制的区别


拥塞控制(congestion control)与全网有关,涉及多个端到端、主机、路由器等很多网络元素;目的是确保通信子网能够承载用户提交的通信
量,是一个全局问题,

流量控制(flow control)只与一对端到端的通信量有关,只涉及快速发送方与慢速接收方的问题,是局部问题,一般都是基于反馈进行控制的

要防止这两者的混淆,但它们有些机制是相同的

2.3. 解决拥塞:资源分配机制

解决拥塞本质上是更合理的资源分配:
 1. 以路由器为中心与以主机为中心
 2. 基于预留与基于反馈
 3. 基于窗口与基于速率

2.3.1. R/H为中心的分配

以R为中心,链路算法(Link Algorithm). 在网络设备中(如路由器和交换机) 执行,作用是检测网络拥塞的发生,产生拥塞反馈信息,R决定何时转发包,决定丢掉哪个包,通知正产生网络流量的那些主机允许它们发送包的数目

以H为中心,源算法(Source Algorithm).源算法在主机和网络边缘设备中执行,作用是根据反馈信息调整发送速率端主机观察网络状态(多少个包成功通过了网络)并因而调整其行为

二者并不互斥,R中心的拥塞管理仍需要H执行R发送的建议消息,H中心的拥塞管理业需要R丢弃R溢出时那些包

2.3.1.1. 源拥塞控制算法-TCP层

源算法中使用最广泛的是TCP协议中的拥塞控制算法。TCP是目前在Internet中使用最广泛的传输协议.
 下表给出拥塞控制源算法的简单描述

拥塞控制源算法 描述
Tahoe-TCP 慢启动、拥塞避免、快速重传-早期较为普遍采用版本
Reno-TCP 多一个:快速恢复
NewReno-TCP 引入了部分确认和全部确认的概念.
SACK-TCP 规范了TCP中带选择的确认消息
Vegas-TCP 采用带宽估计,缩短了慢启动阶段的时间

2.3.1.2. 源算法测量网络是否拥塞的参数

缓冲区缺乏造成的丢包率;
平均队列长度;
超时重传包数目;
平均包延迟(RTT是重要指标);
包延迟变化(Jitter)。

2.3.1.3. 路由器向源反馈方法

向负载发生源发送一个告警包;
包结构中保留一个位或域用来表示发生拥塞,一旦发生拥塞,路由器将所有的输出包置位,向邻居告警;
主机或路由器主动地、周期性地发送探测(probe),查询是否发生拥塞。

2.3.2. 基于预留与基于反馈

  1. 基于预留
    建立流时,端主机请求网络给予一定的容量,每个R分配足够的资源(缓冲区或链路带宽的比例)来满足这一请求。问题:利用率?
    如果由于资源的过量则R不能满足该请求而拒绝该流。这同打电话时碰到忙音一样?

  2. 基于反馈
    端主机首先没有预留任何容量,而按照它们接收到的反馈来调整其发送。 调整或者是显式的,如拥塞R发送一个“请慢下来”消息到主机或
    隐式的:如端主机根据外部可观察的网络行为,如包丢失率,来调整其发送率

2.3.2.1. 两种机制的比较

  1. 基于预留的系统总是意味着
    以路由器为中心的资源分配机制:因每个R负责保持跟踪现在有多少容量被预留,并保障在其所做的预留内每个主机是活着的。
    如果在作了预留后某主机发送数据快于它曾经所要求的,则该主机的包将是准备丢弃。R也将会拥塞

  2. 基于反馈的系统
    可以既是以R为中心也可是以H为中心的机制。一般如果反馈是显式的,则R至少某种程度就被包括在资源分配模式里; 如果反馈是隐式的,则几乎所有的重担都落在端主机上,当R变成拥塞后就默默地丢包。

2.3.3. 基于窗口与基于速率

不论流控还是拥控,对发送者,都需要一个方法来表达:多少数据要传输?
用窗口大小来描述:如TCP:流控也可用窗口通告机制来预留缓冲空间,来支持资源分配
用速率大小来描述:用速率控制发送者行为,如接收方可说它可处理1Mbps的视频,而发送方则坚持这一速率

2.4. 资源分配评价标准

怎样评价资源分配机制的好坏

  1. 有效性
  2. 公平性

2.4.1. 资源分配的有效性(提高网络效率)

2个主要测量指标:

  1. 网络吞吐量(实际传输bps)
  2. 延迟

如果有方法,增加吞吐量,提高链路利用率,但是增加了R内队列长度,包平均延迟也变长了,并不是个很好的方法。

2.4.1.1. 网络能力

用吞吐率和延迟之比来描述资源分配模式的有效性,该比称为网络能力
Power = 吞吐率/延迟
Power是加速度量纲 bit/s^2

2.4.2. 资源分配的公平性

网络资源分配还要考虑公平性
定义公平性时又陷入什么是公平的困难
基于预约的资源分配机制显然导致了可控制的不公平
该机制可能通过预约使接收视频流在1Mbps,而相同链路中的FTP却只有10Kbps

一般公平原则(若没有明确要求)
当某条链路中存在几个流时,对接收每个流都应该有相等的带宽(平均主义)

3. 排队规则与流量整形

  1. 排队规则
    不管其它资源分配机制是多么简单或复杂每个路由器都必须实现某些排队或调度规则,以便管理等待发送包的缓冲区(分配缓冲区资源)
  2. 排队算法
    是带宽(包得到发送)和缓冲区的分配方法(包被丢弃),它还直接影响包经历的延迟
  3. 3个排队算法:FIFO、公平排队、加权公平排队

3.1. FIFO

首先到达的包首先发送

当R的缓冲空间满时,尾部的包就丢弃(tail drop),不考虑包是否重要
FIFO和tail drop是不同的概念,前者是发送调度策略,后者是丢弃策略,但二者常捆绑在一起叫做FIFO

3.1.1. 优先排队

给每个包打上可携带的优先权标记,如IP服务类型TOS(DiffServ)。 R先发送其优先权高的包
这一方式离Best-effort delivery并不远

3.1.2. TOS(DiffServ)

在IPv4报文头部有个TOS域(8bit),IPv6有个Class域(8bit)
RFC791,RFC1122,RFC1349都定义过每个bit的含义; RFC1349废除了之前两个RFC的定义
RFC 2474又重新定义了TOS的前6个bit,称为DiffServ Code Point(DSCP)后两个bit留给Explicit Congestion Notification (ECN)

3.2. 公平排队

3.2.1. FIFO主要问题

不能区别不同的流,即不能按报文所属的流来区分。问题:

  1. 对在源端实现的拥塞控制算法没有帮助
  2. 由于存在非TCP应用,FIFO可能把端-端拥塞机制旁路掉
    例如IP电话,这类应用能把自己的包洪泛到网上路由器,引起丢弃其他应用的包
  3. 大多数基于UDP对多媒体应用也会产生同样问题

3.2.2. 公平排队算法FQ

FQ主要思想:
为每个正在被路由器处理的流分别维护一个队列,路由器以轮循方式服务每个队列。
当一个流发送包太快,则其队列填满;当一个队列到达一个特定的长度,属于该队列的后继包就被丢掉,这样,任何源就不可能多占用其他流的网络容

FQ并不告诉源端任何有关路由器的状态,或并不限制源端发送怎样快

3.3. 加权公平排队WFQ

加权公平队列(Weighted Fair Queueing)

  1. 给排队流加权,R服务每个队列时每次发送多少比特,它直接控制每个流将得到多少链路带宽
  2. 简单FQ给每个队列权重是1,即每轮每个队列逻辑上仅1比特被传输->1/n
  3. WFQ:可让3个队列分别权重2:1:3则导致带宽分别是2/6:1/6:3/6
  4. WFQ中的流在使用中可能是“流量类型”,由TOS或DiffServ.来定义

3.4. 流量整形(Traffic Shaping)

3.4.1. 基本思想

造成拥塞的主要原因是网络流量通常是突发性的
强迫包以一种可预测的速率发送;
在ATM网中广泛使用。

3.4.2. 网络流监管的三准则

平均速率:100bps比6000bps的源约束要严格多,希望限制某个流的长期平均速率
峰值速率:网络可允许平均速率6000bps,希望限制其峰值速率<15000bps
突发长度:希望限制极短时间间隔内所能发送到网络的最大包数

3.4.3. 漏桶算法(The Leaky Bucket Algorithm)

将用户发出的不平滑的数据包流转变成网络中平滑的数据包流;
可用于固定包长的协议,如ATM;也可用于可变包长的协议,如IP,使用字节计数;
无论负载突发性如何,漏桶算法强迫输出按平均速率进行,不灵活,溢出时要丢包。

3.4.4. 令牌桶算法(The Token Bucket Algorithm)

漏桶算法不够灵活,因此加入令牌机制;
基本思想:漏桶存放令牌,每T秒产生一个令牌,令牌累积到超过漏桶上界时就不再增加。包传输之前必须获得一个令牌,传输之后删除该令牌;

3.4.4.1. 漏桶算法与令牌桶算法的区别

流量整形策略不同:漏桶算法不允许空闲主机积累发送权,以便以后发送大的突发数据;令牌桶算法允许,最大为桶的大小。
漏桶中存放的是数据包,桶满了丢弃数据包;令牌桶中存放的是令牌,桶满了丢弃令牌,不丢弃数据包没有令牌才丢弃数据包。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算机网络——拥塞控制(1) 的相关文章

  • 常见排序算法之归并排序——归并排序

    哈喽大家好 我是保护小周 本期为大家带来的是常见排序算法中的归并排序 博主在这里先分享归并排序的递归算法 包您一看就会 快来试试吧 目录 一 归并排序 1 1 基本思想 1 2 算法思想 1 3 程序设计思想 1 4 程序实现 1 5 归并
  • SQL日期函数

    一 知识点 在SQL中 由于不能直接执行算术函数 所以日期函数在SQL就十分有用 日期函数拥有多个方法 每个方法都可以对日期进行查改或计算 比如 GETDATE 方法 获取当前的系统日期 DATEADD 日期部分 number date 返
  • nexus(Maven仓库私服)的安装、配置、使用和仓库迁移

    简介 Nexus下载 点击进入 Nexus 是Maven仓库管理器 如果你使用Maven 你可以从Maven中央仓库 下载所需要的构件 artifact 但这通常不是一个好的做法 你应该在本地架设一个Maven仓库服务器 在代理远程仓库的同
  • 利用labelme制作语义分割masks掩膜数据集

    1 labelme的安装 在terminal终端执行命令行操作 conda create n labelme python 3 6 创建labelme环境 activate labelme 激活labelme conda install p
  • 基于vivado实现FFT/IFFT

    文章目录 前言 一 基本过程 二 vivado配置 1 新建工程 2 调用DDS的IP核 2 调用FFT的IP核 三 编写Verilog程序 1 顶层文件fft v 2 仿真文件fft tb v 四 运行仿真 1 运行仿真设置 2 仿真波形
  • 二叉树的性质

    二叉树的性质以及满二叉树 完全二叉树 性质一 在二叉树的第i层 最多有2的 i 1 次方个结点i gt 1 性质二 深度为k的二叉树上最多有含有2的k次方 1个结点 k gt 1 性质三 对于任何一个二叉树 若它含有n0个叶子结点 n2个度
  • Spring Bean自动装配的简介

    转自 Spring Bean自动装配的简介说明 Spring Bean装配为依赖关系注入 Spring Bean装配方式称之为 Spring Bean依赖注入方式Spring Bean容器拥有多种装配Bean方式 如 使用XML 装配Bea

随机推荐

  • 数据科学—K均值算法实践

    K均值算法实践 问题描述 目标 数据集 分析 算法阐述 代码实现 结果 问题描述 现在有一组数据 需要通过聚类方法发掘其内在结构 目标 对数据进行聚类分析 将数据分为四类 k 4 数据集 clusterdata txt存储待聚类数据 共包含
  • jQuery操作CheckBox的方法(选中,取消,取值)详解

  • 通讯协议024——全网独有的OPC AE知识四之接口(八)

    本文简单介绍OPC AE规范的IOPCEventAreaBrowser接口的相关知识 更多通信资源请登录网信智汇 wangxinzhihui com OPC AE规范描述了OPC事件服务器应该实现的对象和接口 实现在多个OPC客户端间共享事
  • 2.5.6 共享分区CPU分配

    最后更新2021 07 27 共享分区CPU分配这个动作是系统Hypervisor自动完成的 我们只能通过HMC定义规则 但不能直接干预 CPU分配受几个限定参数影响 分别是Physical Processor 物理CPU 分配数量 Vir
  • Spring MVC视图解析器简介说明

    转自 Spring MVC视图解析器简介说明 Spring MVC视图解析器简介说明 下文讲述 Spring MVC视图 的相关说明 如下所示 Spring 视图解析器 Spring视图解析器用于对Spring中的视图进行解析 如下配置所示
  • 大话西游详细解读

    其实要理清 大话西游 的脉络 只要弄清楚命运对至尊宝的安排 和他面对命运和爱情的心路历程就够了 如果再理一下紫霞和白晶晶的故事 大话西游 的故事就纤毫毕现了 如下 至尊宝的故事 无奈的命运与无望的爱至尊宝原来是家在五岳山第四编101号B1的
  • 2023年IT行业就业前景分析,准职场人必看!

    随着疫情的放开 2022已接近尾声 新的一年即将来临 作为打工人最关心的肯定是2023年的就业市场以及行业未来发展前景 如何最直观地看待这个行业是否还有前景 最好的方式就是看市场需求 作为准职场人的你 速速关注起来 根据智联招聘10月发布的
  • 学习笔记——JDBC

    初识JDBC 文章目录 初识JDBC 一 JDBC是什么 二 使用步骤 1 JDBC开发前的准备工作 1 1 下载对应驱动的jar包 1 2 针对文本编辑器的方式开发的配置 1 3针对编译软件 例如IDEA开发的配置 2 JDBC编程 2
  • 立创梁山派GD32F450ZGT6--屏幕扩展板LVGL应用

    该文章工程是基于裸机情况下运行的LVGL 通过GUI Guider 1 4 0进行页面布局配置 一 介绍 GUI Guider是恩智浦为LVGL开发了一个上位机GUI设计工具 可以通过拖放控件的方式设计LVGL GUI页面 加速GUI的设计
  • 大语言模型之十-Byte Pair Encoding

    Tokenizer 诸如GPT 3 4以及LlaMA LlaMA2大语言模型都采用了token的作为模型的输入输出 其输入是文本 然后将文本转为token 正整数 然后从一串token 对应于文本 预测下一个token 进入OpenAI官网
  • 攻防世界 Morse writeup

    题目 三 题型 crypto 题目 Morse 来源 攻防世界 https adworld xctf org cn challenges list 思路 直接利用摩斯密码进行解密 具体步骤 Step1 根据题目猜测是摩斯密码 Step2 将
  • 2019最近计算机毕业设计-题目汇总大全-系列5

    javaweb python爱好者 如果对以下项目感兴趣可以邮箱 cswork2019 163 com 与我沟通交流 课题名称 备注 区块链交易信息的获取与可视化分析 基于2D物理引擎 液体 的H5小游戏 基于Cocos2D的微信小游戏的设
  • 高校圆桌派第三期话题征集强势来袭~

    高校圆桌派 话题风暴等你来 即日起参与 高校圆桌派 活动 就有机会获得CSDN高校圆桌大礼包和CSDN周边礼品免费包邮送到家 高校圆桌派第二期话题征集结果公示 1 刚毕业的程序员有必要执着于进入大厂吗 小厂和大厂怎么选择 2 新能源汽车行业
  • 最简单的获取安卓应用sha1值的方法

    每个安卓应用都有一个签名证书 签名证书可以由jdk生成 当证书生成后 证书就有其sha1值 md5值和sha256值 使用此证书打包后的apk 也有其一样的sha1值 md5值和sha256值 有两种方法可以获取sha1值 1 解压apk
  • 百度:度度熊有一个N个数的数组,他想将数组从大到小排好序...

    度度熊有一个N个数的数组 他想将数组从大到小排好序 但是萌萌的度度熊只会下面这个操作 任取数组中的一个数然后将它放置在数组的最后一个位置 问最少操作多少次可以使得数组从小到大有序 输入描述 首先输入一个正整数N 接下来的一行输入N个整数 N
  • 缤纷多彩的404页面(404.html)

    文章来源 https www skyqian com archives 404 Pages html 一般而言 第一时间会在博客更新 CSDN随缘更新 引言 别离滋味浓于酒 著人瘦 此情不及墙东柳 春色年年如旧 勿埋我心 404是个很常见的
  • Redis以及Jedis的GEO地图功能

    Redis以及Jedis的GEO地图功能 引言 redis是一个高性能的非关系型数据库 作为一个单线程的应用程序 速度非常快 并且不存在多线程情况下的共同资源访问锁的问题 PS 太久没有写文章 老脸一红 今日记录一下Redis的地图坐标功能
  • uthash

    在软件开发中 不可不免的会使用到hash表 hash表的优点这里就不说了 以下介绍一个hash表的C实现 uthash是用宏实现的 使用的时候非常方便 只用包含uthash h即可 Uthash的三个数据结构 1 typedef struc
  • php加密自定义版权,分享几种好用的PHP自定义加密函数(可逆/不可逆)

    项目中有时我们需要使用PHP将特定的信息进行加密 也就是通过加密算法生成一个加密字符串 这些加密后的字符串可以通过解密算法进行解密 便于程序对解密后的信息进行处理 最常见的应用在用户登录以及一些API数据交换的场景 最常见的应用在用户登录以
  • 计算机网络——拥塞控制(1)

    1 拥塞 congestion 当过多的包在网络缓冲区中竞争某个相同链路时 队列会溢出丢包 当这种丢包成为普通事件时 则称网络发生拥塞 简单概述就是对聚合带宽的需求超过了链路的可用容量 1 1 产生原因 宏观原因 网络资源分布不均匀 流量分