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

news2025/2/4 22:03:02

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

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.coloradmin.cn/o/2292000.html

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

相关文章

语言月赛 202412【正在联系教练退赛】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 正在联系教练退赛 题目背景 在本题中,我们称一个字符串 y y y 是一个字符串 x x x 的子串,当且仅当从 x x x 的开头和结尾删去若干个(可以为 0 0 0 个)字符后剩余的字…

【数据结构】_链表经典算法OJ:复杂链表的复制

目录 1. 题目链接及描述 2. 解题思路 3. 程序 1. 题目链接及描述 题目链接:138. 随机链表的复制 - 力扣(LeetCode) 题目描述: 给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,…

python的pre-commit库的使用

在软件开发过程中,保持代码的一致性和高质量是非常重要的。pre-commit 是一个强大的工具,它可以帮助我们在提交代码到版本控制系统(如 Git)之前自动运行一系列的代码检查和格式化操作。通过这种方式,我们可以确保每次提…

【C语言入门】解锁核心关键字的终极奥秘与实战应用(三)

目录 一、auto 1.1. 作用 1.2. 特性 1.3. 代码示例 二、register 2.1. 作用 2.2. 特性 2.3. 代码示例 三、static 3.1. 修饰局部变量 3.2. 修饰全局变量 3.3. 修饰函数 四、extern 4.1. 作用 4.2. 特性 4.3. 代码示例 五、volatile 5.1. 作用 5.2. 代码示例…

音标-- 02-- 重音 音节 变音

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 国际音标1.重音2.音节3.变音 国际音标 1.重音 2.音节 3.变音

[STM32 标准库]EXTI应用场景 功能框图 寄存器

一、EXTI 外部中断在嵌入式系统中有广泛的应用场景,如按钮开关控制,传感器触发,通信接口中断等。其原理都差不多,STM32会对外部中断引脚的边沿进行检测,若检测到相应的边沿会触发中断,在中断中做出相应的处…

C语言练习【互斥锁、信号量线程同步、条件变量实现生产者消费者模型】

练习1 请使用互斥锁 和 信号量分别实现5个线程之间的同步 互斥锁实现同步 #include <stdio.h> #include <string.h> #include <unistd.h> #include <stdlib.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>…

w190工作流程管理系统设计与实现

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

linux下ollama更换模型路径

Linux下更换Ollama模型下载路径指南   在使用Ollama进行AI模型管理时&#xff0c;有时需要根据实际需求更改模型文件的存储路径。本文将详细介绍如何在Linux系统中更改Ollama模型的下载路径。 一、关闭Ollama服务   在更改模型路径之前&#xff0c;需要先停止Ollama服务。…

编程题-电话号码的字母组合(中等)

题目&#xff1a; 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 解法一&#xff08;哈希表动态添加&#xff09;&#x…

浅谈《图解HTTP》

感悟 滑至尾页的那一刻&#xff0c;内心突兀的涌来一阵畅快的感觉。如果说从前对互联网只是懵懵懂懂&#xff0c;但此刻却觉得她是如此清晰而可爱的呈现在哪里。 介绍中说&#xff0c;《图解HTTP》适合作为第一本网络协议书。确实&#xff0c;它就像一座桥梁&#xff0c;连接…

架构知识整理与思考(其四)

书接上回 建议&#xff0c;没有看过上一章的可以看一下&#xff0c;上一章“架构知识整理与思考&#xff08;其二&#xff09;” 感觉这都成链表了。 三生万物 软件架构 终于&#xff0c;我们进入了具体的软件架构讨论中。 软件架构是什么&#xff1f;相关定义如下&#xf…

【C++】B2124 判断字符串是否为回文

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;题目描述输入格式&#xff1a;输出格式&#xff1a;样例&#xff1a; &#x1f4af;方法一&#xff1a;我的第一种做法思路代码实现解析 &#x1f4af;方法二&#xff1a;我…

基于Spring Security 6的OAuth2 系列之八 - 授权服务器--Spring Authrization Server的基本原理

之所以想写这一系列&#xff0c;是因为之前工作过程中使用Spring Security OAuth2搭建了网关和授权服务器&#xff0c;但当时基于spring-boot 2.3.x&#xff0c;其默认的Spring Security是5.3.x。之后新项目升级到了spring-boot 3.3.0&#xff0c;结果一看Spring Security也升级…

算法题(48):反转链表

审题&#xff1a; 需要我们将链表反转并返回头结点地址 思路&#xff1a; 一般在面试中&#xff0c;涉及链表的题会主要考察链表的指向改变&#xff0c;所以一般不会允许我们改变节点val值。 这里是单向链表&#xff0c;如果要把指向反过来则需要同时知道前中后三个节点&#x…

梯度、梯度下降、最小二乘法

在求解机器学习算法的模型参数&#xff0c;即无约束优化问题时&#xff0c;梯度下降是最常采用的方法之一&#xff0c;另一种常用的方法是最小二乘法。 1. 梯度和梯度下降 在微积分里面&#xff0c;对多元函数的参数求∂偏导数&#xff0c;把求得的各个参数的偏导数以向量的形式…

独立开发者小程序开发变现思路

随着移动互联网的发展&#xff0c;小程序已成为许多独立开发者展示才能和实现收入的重要平台。作为一种轻量级的应用形态&#xff0c;小程序具有开发成本低、用户体验好、传播效率高等优势&#xff0c;为独立开发者提供了多种变现方式。然而&#xff0c;要想实现真正的盈利&…

软件测试 - 概念篇

目录 1. 需求 1.1 用户需求 1.2 软件需求 2. 开发模型 2.1 软件的生命周期 2.2 常见开发模型 2.2.1 瀑布模型 2.2.2 螺旋模型 1. 需求 对于软件开发而言, 需求分为以下两种: 用户需求软件需求 1.1 用户需求 用户需求, 就是用户提出的需求, 没有经过合理的评估, 通常…

使用SpringBoot发送邮件|解决了部署时连接超时的bug|网易163|2025

使用SpringBoot发送邮件 文章目录 使用SpringBoot发送邮件1. 获取网易邮箱服务的授权码2. 初始化项目maven部分web部分 3. 发送邮件填写配置EmailSendService [已解决]部署时连接超时附&#xff1a;Docker脚本Dockerfile创建镜像启动容器 1. 获取网易邮箱服务的授权码 温馨提示…

基于springboot+vue的航空散货调度系统

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…