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 #下图所示处新增一行配置 用户名需要输入自己当前主机的用户名

大语言模型中的Agent;常见的Agent开发工具或框架

大语言模型中的Agent 大语言模型中的Agent是指以大语言模型为核心驱动,具有自主理解、感知、规划、记忆和使用工具等能力,能够自动化执行复杂任务的系统.以下是一些例子: AutoGPT:它相当于一个完整的工具包,可以为各种项目构建和运行自定义AI Agent。使用OpenAI的GPT-4和…

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

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

Android10 rk3399 以太网接入流程分析

Netd守护进程服务 Netd模块是Android中专门负责网络管理和控制的后台守护进程开发板路径./etc/init/netd.rc service netd /system/bin/netdclass mainsocket dnsproxyd stream 0660 root inetsocket mdns stream 0660 root systemsocket fwmarkd stream 0660 root inetonres…

框架专题:反射

1. 什么是反射? 简单来说,反射是一种程序自省的能力,即在程序运行时动态地获取其结构信息或操作其行为。这包括类、方法、属性等元信息。反射的核心在于让代码变得更加动态化,从而突破静态语言的限制。 以Java为例,反…

Git:查看分支、创建分支、合并分支

一、查看分支 查看的git命令如下: git branch # 列出本地已经存在的分支,并且当前分支会用*标记 git branch -r # 查看远程版本库的分支列表 git branch -a # 查看所有分支列表(包括本地和远程,remotes/开头的表示远程分支&…

【深度学习】论文复现-对论文数据集的一些处理

如何书写伪代码: ref:https://www.bilibili.com/video/BV12D4y1j7Zf/?vd_source3f7ae4b9d3a2d84bf24ff25f3294d107 i14时产出的图片比较合理 import json import os.path from matplotlib.ticker import FuncFormatter import pandas as pd import matplotlib.py…

C#调用WebService的方法

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

Java CPU飙升 排查

一、概述 CPU 是整个电脑的核心计算资源,CPU的最小执行单元是 线程; 在现代操作系统中,进程和线程是两种主要的调度单位; 进程是程序中正在运行的一个应用程序,而线程是系统分配处理器时间资源的基本单位。一个进程至少…

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

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

12寸半导体厂等保安全的设计思路

等级保护(等保)二级和三级的主要区别在于安全要求的严格程度、所需部署的安全措施和设备、以及对安全事件响应和处理的能力。以下是等保二级和三级之间的一些关键区别: 一、 安全要求严格程度: - 等保二级:适用于需要较高安全保护的信息系统,要求能够防范轻微的恶意攻击…

Docker Compose 配置指南

目录 1. Docker Compose 配置1.1 基本配置结构1.2 docker-compose.yml 的各部分1.3 常用配置选项 2. Docker Compose 使用方法2.1 创建 Docker Compose 配置文件2.2 启动服务2.3 查看容器状态2.4 查看服务日志2.5 停止服务2.6 重新构建服务 3. Docker Compose 常用命令3.1 dock…

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

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

手动修改nginx-rtmp模块,让nginx-rtmp-module支持LLHLS

文章目录 1. 背景2. 开发环境搭建2.1 ffmpeg在ubuntu上安装2.2 nginx-rtmp-module在ubuntu上安装2.3 安装vscode环境2. 修改nginx-rtmp-module2.1 主要更新内容2.2 新增配置项2.3 代码更新3. LLHLS验证方法3.1 配置验证3.2 功能验证4. 注意事项5. 已知问题6. 后续计划1. 背景 …

Git的简介

文章目录 一.Git是什么二.核心概念三.工作流程四.Git的优势 下载Git 推荐官网下载 官网地址 一.Git是什么 Git是一个分布式版本控制系统,用于跟踪文件的变化并协调多人对同一项目的开发工作。它就像是一个时光机器,能够记录文件在不同时间点的状态&…

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.实现…