NS3学习——队列管理机制

目录

1.介绍

2.被动式队列管理机制

2.1 优缺点 

2.1.1 TCP全局同步现象 

3.主动式队列管理机制

3.1 RED算法概述

3.2 RED具体算法

3.2.1 计算队列平均长度

3.2.2 计算丢弃包的概率

1.介绍

由于路由器是基于包交换的设备,为了处理多个数据包同时向同一端口转发,其必须在端口维护一个或多个队列,而对队列的管理能力会直接影响路由器的性能。路由器有两类控制队列的算法,队列管理算法和队列调度算法,前者主要是在必要时通过丢包来管理队列长度。后者决定下一个要发送哪个包,主要用来管理各流之间带宽的分配。

由于Internet数据本质上是突发的,因此允许传输突发的数据包非常必要,而路由器中队列的重要作用就是吸收突发的数据包。较大的队列能够吸收更多的突发数据,提高吞吐量,但TCP机制往往会保持较高的队列占用,从而增加了数据包的排队延迟。因此需路由器对队列进行管理,维持较小的队列长度,降低排队延迟,提高吞吐量,保持较大的队列空间来吸收突发数据包。

队列管理算法可以分为两大类:被动式队列管理(Passive Queue Management,PQM)和主动式队列管理(Active Queue Management,AQM)。

2.被动式队列管理机制

这是一种传统的网络队列管理方法,它在网络节点的缓存(队列)达到最大容量时,才会采取行动丢弃数据包。

典型代表是 DropTail 算法,它在队列满时丢弃新到达的数据包,以此来指示网络拥塞。DropTail通常会与FIFO(First In First Out)相结合,数据报传送的顺序与封包进入队列的顺序相同,先进入队列的封包先传送出去,后进入队列的封包较晚传送出去。如果队列长度超过暂存空间的大小,就会把队列最尾端的数据报丢弃。DropTail在丢弃数据报时,并不会去考虑要丢弃的数据报属于哪个数据流,只是单纯的把超过暂存空间大小的数据流丢弃。

2.1 优缺点 

优点:操作简单

缺点:

1.死锁(lock-out)问题:在某些情况下,该算法会让某个流或者少数几个流独占队列空间,阻止其他流的包进入队列。这

2.满队列(full queues)问题:由于该算法只有在队列满时才会发出拥塞信号,因此会使得队列在相当长时间内处于充满(或几乎充满)的状态。而队列管理最重要的目标之一就是降低稳定状态下队列的长度,因为端到端的延迟主要就是由于在队列中排队等待造成的。

3. TCP全局同步(global synchronization)问题:

2.1.1 TCP全局同步现象 

由于Internet上数据的突发本质,到达路由器的包也往往是突发的。如果队列是满的或者几乎是满的,就会导致在短时间内连续大量地丢包。而TCP流具有自适应特性,源端发现包丢失就急剧地减小发送窗口,包到达速率就迅速下降,于是网络拥塞得以解除,但源端得知网络不再拥塞后又开始增加发送速度,最终又造成网络拥塞,这种现象常常会周而复始地进行下去,从而在一段时间内网络处于链路利用率很低的用状态,降低了整体吞吐量,这就是所谓地"TCP全局同步"现象。

除了DropTail外,另外两种在队列满时用得比较多的队列管理机制是Random Drop 和 Drop Front。当队列满时,前者从队列中随机找出一个包丢弃以让新来的包进入队列;后者从队列头部丢包,以便让新包进入队列。这两种方法虽然都解决了"死锁"问题,但仍然没有解决"满队列"问题。由于这几种方法都是在队列满了被迫丢包,因此称为被动式队列管理。

3.主动式队列管理机制

在队列充满之前丢包,这样端节点便能在队列溢出前对拥塞做出反应。这种方法便称为"主动式队列管理"(Active Queue Management)。

3.1 RED算法概述

RED(Random Early Detection)就是一种典型的主动式队列管理机制。

RED拥塞控制机制的基本思想是通过监控路由器输出端口队列的平均长度来探测拥塞,一旦发现拥塞逼近,就随机地选择连接来通知拥塞,使他们在队列溢出导致丢包之前减小拥塞窗口,降低发送数据速度,从而缓解网络拥塞。由于RED是基于FIFO队列调度策略的,并且只是丢弃正进入路由器的数据包,而且能够通过确保到来的包几乎总是有可用的队列空间,从而阻止"死锁"行为的发生。

3.2 RED具体算法

RED算法主要分为两个部分。1.计算平均队列长度(avg),决定了路由器队列容纳突发性数据的程度,以此作为对拥塞程度的估计;2.计算丢包概率(Pb),决定了在当前拥塞程度下,路由器丢弃分组的概率。

3.2.1 计算队列平均长度

RED在计算平均队长avgQ时,采用了类似低通滤波器(low-pass filter)带权值的方法:

avgQ = (1-w)×avgQ+q×w

其中,w为权值,q为采样测量时实际队列长度。这样由于Internet数据的突发本质或者短暂拥塞导致的实际队列长度暂时的增长将不会使得平均队长有明显的变化,从而"过虑"掉短期的队长变化,尽量反映长期的拥塞变化。

在计算平均队长的公式中,权值w相当于低通滤波器的时间常数,它决定了路由器对输入流量变化的反应程度。因此对w的选择非常重要,如果w过大,那么RED就不能有效地过虑短暂的拥塞;如果w太小,那么avgQ就会对实际队列长度的变化反应过慢,不能合理地反映拥塞状况,在这种情况下,路由器就不能有效检测到早期的拥塞。w的值应根据不同情况预先设置,一般来说,它是由路由器允许发生的突发业务的大小和持续的时间所决定的。

3.2.2 计算丢弃包的概率

 计算平均队长的目的就是为了反映拥塞状况,根据拥塞的程度来计算丢弃包的概率,从而有效地控制平均队列长度。 RED有两个和队列长度相关的阈值:minth和maxth。当有包达到路由器时,RED计算出平均队长avgQ。若avgQ小于minth,则没有包需要丢弃;当minth≤avgQ≤maxth时,计算出概率P,并以此概率丢弃包;当avgQ>maxth时,所有的包都被丢弃。

计算概率P的方法如下:

Pb = maxp×(avgQ-minth) / (maxth-minth)

P = Pb / (1-count×Pb)

P不仅和avgQ有关,而且还和从上一次丢包开始到现在进入队列的包的数量count有关。随着count的增加,下一个包被丢弃的可能性也在缓慢增加。这主要是为了在到来的包之间均匀间隔地丢包,避免连续丢包,从而避免产生全局同步现象。

阈值minth和maxth就是由理想的平均队长决定的。根据目前Internet上数据流的特点,可以将maxth设为minth的两倍。如何确定理想的平均队长仍是一个有待研究的问题。

参考资料:

DropTail与RED队列管理 (csdn.net)

主动、被动队列管理算法、RED - yyxxzz22 - 博客园 (cnblogs.com)

TCP全局同步 - yyxxzz22 - 博客园 (cnblogs.com)

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

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

相关文章

HDR视频技术之十一:HEVCH.265 的 HDR 编码方案

前文我们对 HEVC 的 HDR 编码优化技术做了介绍,侧重编码性能的提升。 本章主要阐述 HEVC 中 HDR/WCG 相关的整体编码方案, 包括不同应用场景下的 HEVC 扩展编码技术。 1 背景 HDR 信号一般意味着使用更多比特,一般的 HDR 信号倾向于使用 10…

linux普通用户使用sudo不需要输密码

1.root用户如果没有密码,先给root用户设置密码 sudo passwd root #设置密码 2.修改visudo配置 su #切换到root用户下 sudo visudo #修改visudo配置文件 用户名 ALL(ALL) NOPASSWD: ALL #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名

【时间之外】IT人求职和创业应知【74】-运维机器人

目录 OpenAI最强推理模型o3发布,AGI测试能力暴涨 英伟达宣布收购以色列AI初创企业Runai 汤姆猫首款AI机器人产品明日发售 心勿贪,贵知足。 感谢所有打开这个页面的朋友。人生不如意,开越野车去撒野,会害了自己,不如…

C#调用WebService的方法

一、前言 在日常工作中,如果涉及到与第三方进行接口对接,有的会使用WebService的方式,这篇文章主要讲解在.NET Framework中如何调用WebService。 1.创建WebService (1)新建项目——模板选择ASP.NET Web 应用程序 &a…

Qt creator ,语言家功能缺失解决方法

1、找到工具->外部->配置 2、添加目录,双击命名语言家 3、在语言家目录下,添加工具 双击重命名lupdate,即更新翻译 %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate%{CurrentDocument:Project:FilePath}%{CurrentDocument:Projec…

Taro小程序开发性能优化实践

我们团队在利用Taro进行秒送频道小程序的同时,一直在探索性能优化的最佳实践。随着需求的不断迭代,项目中的性能问题难免日积月累,逐渐暴露出来影响用户体验。适逢双十一大促,我们趁着这个机会统一进行了Taro性能优化实践&#xf…

springboot471基于协同过滤算法商品推荐系统(论文+源码)_kaic

摘 要 传统办法管理信息首先需要花费的时间比较多,其次数据出错率比较高,而且对错误的数据进行更改也比较困难,最后,检索数据费事费力。因此,在计算机上安装协同过滤算法商品推荐系统软件来发挥其高效地信息处理的作用…

进程间关系与守护进程

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 进程间关系与守护进程 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨论💌 目录 1. 进程组 什…

【NLP 16、实践 ③ 找出特定字符在字符串中的位置】

看着父亲苍老的白发和渐渐老态的面容 希望时间再慢一些 —— 24.12.19 一、定义模型 1.初始化模型 ① 初始化父类 super(TorchModel, self).__init__(): 调用父类 nn.Module 的初始化方法,确保模型能够正确初始化。 ② 创建嵌入层 self.embedding n…

javaEE-多线程编程-3

目录 java 常见的包 : 回调函数: 什么是线程: 第一个线程: 验证多线程执行: 内核: 调用sleep()方法: 执行结果分析: 线程创建的几种方式: 1.继承Thread类,重写run()方法. 2.实现Runnable接口,重写run()方法. 3.继承Thread类,重写run()方法.但使用匿名内部类 4.实现…

怎么在idea中创建springboot项目

最近想系统学习下springboot,尝试一下全栈路线 从零开始,下面将叙述下如何创建项目 环境 首先确保自己环境没问题 jdkMavenidea 创建springboot项目 1.打开idea,选择file->New->Project 2.选择Spring Initializr->设置JDK->…

设计模式期末复习

一、设计模式的概念以及分类 是一套被反复使用,多数人知晓,经过分类编目,代码设计经验的总结,描述了在软件设计的过程中不断重复发生的问题,以及该问题的解决方案,他是解决特定问题的一系列套路&#xff0c…

Github——网页版上传文件夹

第一步:创建一个新的仓库或进入已存在的仓库页面 第二步:点进对应的文件夹下,然后 点击 “Upload files” 第三步:将文件夹拖拽到上传区域 打开资源管理器,将要上传的文件夹从计算机中拖拽到上传区域。 注意&#xf…

高级的SQL查询技巧有哪些?

成长路上不孤单😊😊😊😊😊😊 【14后😊///C爱好者😊///持续分享所学😊///如有需要欢迎收藏转发///😊】 今日分享关于高级SQL查询技巧方面的相关内容&#xf…

FastStone 10.x 注册码

简介 FastStone Capture是一款经典好用的屏幕截图软件,在屏幕截图领域具有广泛的应用和众多优势。 软件基本信息 FastStone Capture体积小巧,占用内存少,这使得它在运行时不会给计算机系统带来过多的负担,即使在配置较低的电脑…

K8S详解(5万字详细教程)

目录 ​编辑 一、集群管理命令 二、命名空间 1. 获取命名空间列表 2. 创建命名空间 3. 删除命名空间 4. 查看命名空间详情 三、Pod 1. Pod概述 2. Pod相位状态 3. 管理命令 3.1 获取命名空间下容器(pod)列表 3.2 查看pod的详细信息 3.3 创建 && 运行 3.4 …

费舍尔信息矩阵全面讲述

费舍尔信息矩阵(Fisher Information Matrix) 费舍尔信息矩阵是统计学中一个非常重要的概念,尤其在参数估计、最大似然估计(MLE)和贝叶斯推断中具有广泛的应用。它反映了参数估计的不确定性程度,也可以用来…

Zookeeper的监听机制

Zookeeper的监听机制是其实现分布式协调服务的一个核心功能。 它允许客户端注册Watcher(观察者)来监听特定的Znode(节点)上的事件,当Znode的状态发生变化时,Zookeeper会向注册了Watcher的客户端发送通知。…

[原创](Modern C++)现代C++的第三方库的导入方式: 例如Visual Studio 2022导入GSL 4.1.0

[简介] 常用网名: 猪头三 出生日期: 1981.XX.XX 企鹅交流: 643439947 个人网站: 80x86汇编小站 编程生涯: 2001年~至今[共23年] 职业生涯: 21年 开发语言: C/C、80x86ASM、PHP、Perl、Objective-C、Object Pascal、C#、Python 开发工具: Visual Studio、Delphi、XCode、Eclipse…

2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36)

参考:2002 - Can‘t connect to server on ‘192.168.1.XX‘ (36) ubantu20.04,mysql5.7.13 navicat 远程连接数据库报错 2002 - Can’t connect to server on ‘192.168.1.61’ (36) 一、查看数据库服务是否有启动,发现有启动 systemctl status mysql…