OPENPPP2 —— VMUX_NET 多路复用原理剖析

在阅读本文之前,必先了解以下几个概念:

1、MUX(Multiplexer):合并多个信号到单一通道。

2、DEMUX(Demultiplexer):从单一通道分离出多个信号。

3、单一通道,可汇聚多个通道。

MUX 在网络编程之中得应用,例如:TCP/IP、QUIC/CONN

即为:一个网络链接(模式),可承载并映射多个网络链接(模式)得通信数据。

注意:TCP/QUIC链接均为模式链接,真实通信中不存在链接,它是一个逻辑概念。

其结构为:(* 以TCP & MUX为例子)

上述为一个典型的 “MUX多路复用” 网络通信程序结构,多个TCP链接经过MUX交换机,在单一的TCP链接之中复用通信,并经过互联网进行传输。

注意:MUX为双向通信结构,所以不需要区分流程箭头方向。

好的,经过上述的概念理解,我们在来剖析 OPENPPP2(PPP PRIVATE NETWORK™ 2)之中的 VMUX_NET 的网络通信结构。

浅显的初略结构图,大约是这样:

从上述图示之中,可以了解到它与上述的MUX多路复用存在一定的差异,其:VMux linklaye 与 VMux Connection 是多对对的关系。

一个很有意思的疑问点是:为什么 OPENPPP2 之中 VMUX_NET 被设计为多对多的关系呢?

这是源于以下几个点:

1、单一TCP链路,或会受到来自 “IDC、ASN、ISP” 的高级QOS策略宽频限制,故而导致难以达到或逼近 POINT-TO-POINT(点对点)网络链路的瓶颈带宽。

2、单一TCP链路,在应用程式保证有序的前提下,难以把产生的CPU的计算负载压力分摊到其它线程之中,这可能导致在宽频交换的高压状态,某一个CPU核心的负载压力过大。

3、关于拥塞控制协议大多存在的 “慢启动(ssthresh)”,从初衷是好的,但在大流、突发场景之中,或许并不一定都是好事。

拥塞控制协议大多包含动态调整 ssthresh,即会根据实况动态的上调与下调,当单一链接上调时启速会比较慢,会导致网络宽频突发不足(RTT时延越大越明显),但若多个链接同时处于慢启上调,那么基于指数效应在探测瓶颈带宽初期,亦可以获得不错的宽频吞吐速度。

这源于:

控制协议除特殊之外,几乎都是对具体逻辑连接,进行拥塞逻辑控制的,所以,在多个链接并行收发时,可以获得更高的网络宽频吞吐效率。

所以:

多对多MUX多路复用,可为人们带来以下几个优势:

1、可获更优良单链接宽频吞吐能效

2、对流媒体链接速度有一定的加成

3、相对低一些的网络抖动(Jetter)

4、相对低一些的首帧RTT时延

缺陷:

1、更高的开发及维护的复杂性,与DEV调试的复杂性。

2、可在多个线程/CPU核上处理,但MUX核心交换机仍仅同一个时间轮片之中为线性交换(可以理解为逻辑上的单核/单线程处理)。

以下,让我们捕捉一部分 VMUX_NET 的代码并分别阐述,其的设计实现意图:

RX收:

openppp2/ppp/app/mux/vmux_net.cpp at main · liulilittle/openppp2 

vmux_net::packet_input_unorder 函数是处于来自多个不同线程、不同链接输入过来的 “VMUX FRAME”(帧)。

openppp2 是建立在 TCP/IP 协议簇上方的,而每个 TCP/IP 协议簇,每个有序数据的交付到达是有序的,但多个不同 TCP/IP 链接并不是有序的。

举一例子:同时向 www.baidu.com 443 建立了两条TCP链接,A与B链接。

A向服务器发送数据,B也向服务器发送数据,两个是同时发送过去:那么服务器可能先收到A发送的数据,也能先收到B向服务器发送的数据。

这是源于:A/B可能会在发送到服务器时产生丢包,或因为网络波动(如TTL沿途跃点的路由)、OS内核事件排队等等,导致两个链接包发送到服务器先后顺序是不同的,在UDP之中乱序问题一直是不可避免地,回归TCP的本质协议实现,UDP存在的问题TCP协议本身也存在,只是大家基于逻辑链接开发,并不能从上层感知这种问题而已,但这并非是不存在。

TX发:

 openppp2/ppp/app/mux/vmux_net.cpp at main · liulilittle/openppp2

在 VMUX_NET 的实现之中,TX、RX两部分是核心实现,但:TX部分是重中之重,这关乎MUX的网络收发吞吐能效。

在 OPENPPP2 之中为了提高大流量发送能效,VMUX_NET 实现确保可以同时N个链接飞行流量(TX Inflation)。

openppp2/ppp/app/mux/vmux_net.cpp at main · liulilittle/openppp2

 

举个例子:

VMUX_NET 向MUX对端发送数据时,会尽可能让N个链接同时发送(N为最大通道数量:如4 or 8)。

例如:“假定4个通道分别为:A,B,C,D”

A通道正在发送数据,同一个MUX链接刚刚交付数据发送并重新接收数据再次发送,那么本次交付的数据将有B链路进行发送,当然如果A链路已经交付也不会由A链接在交付本次,它会被插入到可发送通道队列的尾部。(一个链表)

这可以获得以下几个优势:

1、保持MUX通道链接活性

2、减缓MUX通道链接浮动 ssthresh【突发】

此外:

前提:MUX通道都是同一个服务器,中途每一个MUX通道都不会经过其它转发服务器。

否则:每个MUX通道都由不同的服务器进行转发,则应当插入到链表头部。

VMUX_NET 多路复用MUX;四通道(4*TCP CONN)单服务器网络宽频吞吐监测。

能效表现:

INTEL™ ATOM X5-Z8300/1.44GHz, OPENPPP2-VMUX_NET + LINUX ROUTER FOWARD

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

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

相关文章

DeepSeek-R1大模型本地部署及简单测试

目录 DeepSeek-R1大模型本地部署及简单测试背景我的测试环境模型参数选择适用场景参数规模 本地部署安装 DeepSeek-R1大模型本地部署及简单测试 背景 最近deepseek非常火, 要说2025年震惊科技圈的事件要数DeepSeek这个国产AI的横空出世,这是一款免费、开源且隐私优…

强化学习笔记(3)——基于值函数的方法和策略梯度方法

分为两大类方法: 基于值函数的方法(Temporal Difference Methods, TD Methods) 策略梯度方法(Policy Gradient Methods)。 二者不同之处: 通过值函数来间接表达隐式的策略,一个是直接迭代优化策…

Excel 技巧23 - 在Excel中用切片器做出查询效果(★★★)

本文讲如何在Excel中用切片器做出查询效果。 目录 1,在Excel中用切片器做出查询效果 1-1,Excel 中的切片器是什么? 1-2,用切片器做出查询效果 1),点击任一表格内单元格,按下CtrlA&#xff0…

leetcode——排序链表(java)

给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 示例 1: 输入:head [4,2,1,3] 输出:[1,2,3,4] 示例 2: 输入:head [-1,5,3,4,0] 输出:[-1,0,3,4,5] 示例 3: …

苯乙醇苷类化合物的从头生物合成-文献精读108

Complete pathway elucidation of echinacoside in Cistanche tubulosa and de novo biosynthesis of phenylethanoid glycosides 管花肉苁蓉中松果菊苷全生物合成途径解析及苯乙醇苷类化合物的从头生物合成 摘要 松果菊苷(ECH)是最具代表性的苯乙醇苷…

AnyThingLLM本地私有知识库搭建

***************************************************** 环境准备 操作系统:Windows11 内存:32GB RAM 存储:预留 300GB 可用空间 显存: 16G 网络: 100M带宽 前置准备: 已安装ollama环境 deepseek本地大模型 ***************************…

【设计测试用例自动化测试性能测试 实战篇】

🌈个人主页:努力学编程’ ⛅个人推荐: c语言从初阶到进阶 JavaEE详解 数据结构 ⚡学好数据结构,刷题刻不容缓:点击一起刷题 🌙心灵鸡汤:总有人要赢,为什么不能是我呢 设计测试用例…

99.23 金融难点通俗解释:小卖部经营比喻PPI(生产者物价指数)vsCPI(消费者物价指数)

目录 0. 承前1. 简述:价格指数对比2. 比喻:两大指数对比2.1 简单对比2.2 生动比喻 3. 实际应用3.1 价格传导现象 4. 总结5. 有趣的对比6. 数据获取实现代码7. 数据可视化实现代码 0. 承前 本文主旨: 本文使用小卖部比喻PPI和CPI,…

【项目初始化】

项目初始化 使用脚手架创建项目Vite创建项目推荐拓展 使用脚手架创建项目 Vite Vite 是一个现代的前端构建工具,它提供了极速的更新和开发体验,支持多种前端框架,如 Vue、React 等创建项目 pnpm create vuelatest推荐拓展

开源智慧园区管理系统如何重塑企业管理模式与运营效率

内容概要 在如今快速发展的商业环境中,企业面临着日益复杂的管理挑战。开源智慧园区管理系统应运而生,旨在通过技术创新来应对这些挑战。它不仅是一个简单的软件工具,而是一个全面整合大数据、物联网和智能化功能的综合平台,为企…

stm32教程:EXTI外部中断应用

早上好啊大佬们,上一期我们讲了EXTI外部中断的原理以及基础代码的书写,这一期就来尝试一下用它来写一些有实际效能的工程吧。 这一期里,我用两个案例代码来让大家感受一下外部中断的作用和使用价值。 旋转编码器计数 整体思路讲解 这里&…

护眼好帮手:Windows显示器调节工具

在长时间使用电脑的过程中,显示器的亮度和色温对眼睛的舒适度有着重要影响。传统的显示器调节方式不仅操作繁琐,而且在低亮度下容易导致色彩失真。因此,今天我想为大家介绍一款适用于Windows系统的护眼工具,它可以帮助你轻松调节显…

Mysql进阶学习

目录 一.Mysql服务器内部架构(了解) 二.Mysql引擎 2.1 innodb引擎 2.2 myisam引擎 三.索引 3.1索引分类 3.2mysql索引数据结构 3.3聚簇索引和非聚簇索引 3.4回表查询 3.5索引下推 四.事务 数据库事务特征 事务隔离性,隔离级别 事务实现原理 五.锁 ①…

解锁维特比算法:探寻复杂系统的最优解密码

引言 在复杂的技术世界中,维特比算法以其独特的魅力和广泛的应用,成为通信、自然语言处理、生物信息学等领域的关键技术。今天,让我们一同深入探索维特比算法的奥秘。 一、维特比算法的诞生背景 维特比算法由安德鲁・维特比在 1967 年提出…

使用 postman 测试思源笔记接口

思源笔记 API 权鉴 官方文档-中文:https://github.com/siyuan-note/siyuan/blob/master/API_zh_CN.md 权鉴相关介绍截图: 对应的xxx,在软件中查看 如上图:在每次发送 API 请求时,需要在 Header 中添加 以下键值对&a…

sizeof和strlen的对比与一些杂记

1.sizeof和strlen的对比 1.1sizeof (1)sizeof是一种操作符 (2)sizeof计算的是类型或变量所占空间的大小,单位是字节 注意事项: (1)sizeof 返回的值类型是 size_t,这是一…

实测数据处理(Wk算法处理)——SAR成像算法系列(十二)

系列文章目录 《SAR学习笔记-SAR成像算法系列(一)》 《wk算法-SAR成像算法系列(五)》 文章目录 前言 一、算法流程 1.1、回波信号生成 2.2 Stolt插值 2.3 距离脉冲压缩 2.4 方位脉冲压缩 2.5 SAR成像 二、仿真实验 2.1、仿真参数…

FFmpeg rtmp推流直播

文章目录 rtmp协议RTMP协议组成RTMP的握手过程RTMP流的创建RTMP消息格式Chunking(Message 分块) rtmp服务器搭建Nginx服务器配置Nginx服务器 librtmp库编译推流 rtmp协议 RTMP(Real Time Messaging Protocol)是由Adobe公司基于Flash Player播放器对应的…

docker搭建redis集群(三主三从)

本篇文章不包含理论解释,直接开始集群(三主三从)搭建 环境 centos7 docker 26.1.4 redis latest (7.4.2) 服务器搭建以及环境配置 请查看本系列前几篇博客 默认已搭建好三个虚拟机并安装配置好docker 相关博客&#xf…

接口使用实例(2)

大家好,今天我们来解答一下昨天留下的一个问题,并且继续来看一些接口使用实例。 通过String类中重写的方法compareTo来实现我们的比较name的需求: 2,用Comparator接口来实现类的比较(比较器) 了解即可,以后会详细讲。 知识点:C…