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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

核心集:DeepCore: A Comprehensive Library for CoresetSelection in Deep Learning

目录 一、TL;DR 二、为什么研究核心集? 三、问题定义和如何做 3.1 问题定义 3.2 业界方法 3.2.1 基于几何的方法 3.2.2 基于不确定性的方法 3.2.3 基于误差/损失的方法 3.2.5 GraNd 和 EL2N 分数 3.2.6 重要性采样 3.2.7 基于决策边界的办法 …

MyBatis-Plus笔记-快速入门

大家在日常开发中应该能发现,单表的CRUD功能代码重复度很高,也没有什么难度。而这部分代码量往往比较大,开发起来比较费时。 因此,目前企业中都会使用一些组件来简化或省略单表的CRUD开发工作。目前在国内使用较多的一个组件就是…

Redis - String相关命令

目录 setgetmsetmgetsetnx、setex、psetexincr、incrby、decr、decrby、incrbyfloatappendgetrangesetrangestrlen字符串类型编码方式总结 Redis - String Redis存储的字符串,是直接按二进制方式存储,不会做任何编码转换,存的是什么&#xff…

优选算法合集————双指针(专题二)

好久都没给大家带来算法专题啦,今天给大家带来滑动窗口专题的训练 题目一:长度最小的子数组 题目描述: 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl1, …

本地Ollama部署DeepSeek R1模型接入Word

目录 1.本地部署DeepSeek-R1模型 2.接入Word 3.效果演示 4.问题反馈 上一篇文章办公新利器:DeepSeekWord,让你的工作更高效-CSDN博客https://blog.csdn.net/qq_63708623/article/details/145418457?spm1001.2014.3001.5501https://blog.csdn.net/qq…

2. K8S集群架构及主机准备

本次集群部署主机分布K8S集群主机配置主机静态IP设置主机名解析ipvs管理工具安装及模块加载主机系统升级主机间免密登录配置主机基础配置完后最好做个快照备份 2台负载均衡器 Haproxy高可用keepalived3台k8s master节点5台工作节点(至少2及以上)本次集群部署主机分布 K8S集群主…

文字加持:让 OpenCV 轻松在图像中插上文字

前言 在很多图像处理任务中,我们不仅需要提取图像信息,还希望在图像上加上一些文字,或是标注,或是动态展示。正如在一幅画上添加一个标语,或者在一个视频上加上动态字幕,cv2.putText 就是这个“文字魔术师”,它能让我们的图像从“沉默寡言”变得生动有趣。 今天,我们…

wsl+phpstorm+xdebug|windows子系统配置phpstorm开发调试|断点调试

安装wsl 安装apache php 安装xdebug扩展,并配置 这里是通过宝塔9.4面板安装的xdebug3.0 [xdebug] xdebug.modedebug xdebug.start_with_requesttrue xdebug.discover_client_hosttrue xdebug.client_host127.0.0.1配置PHPSTORM 注意:新建服务器一定要…

5 前端系统开发:Vue2、Vue3框架(上):Vue入门式开发和Ajax技术

文章目录 前言一、Vue框架(简化DOM操作的一个前端框架):基础入门1 Vue基本概念2 快速入门:创建Vue实例,初始化渲染(1)创建一个入门Vue实例(2)插值表达式:{{表…

语言月赛 202412【顽强拼搏奖的四种发法】题解(AC)

》》》点我查看「视频」详解》》》 [语言月赛 202412] 顽强拼搏奖的四种发法 题目描述 在 XCPC 竞赛里,会有若干道题目,一支队伍可以对每道题目提交若干次。我们称一支队伍对一道题目的一次提交是有效的,当且仅当: 在本次提交…

nodejs:express + js-mdict 网页查询英汉词典,能播放声音

向 DeepSeek R1 提问: 我想写一个Web 前端网页,后台用 nodejs js-mdict, 实现在线查询英语单词 1. 项目结构 首先,创建一个项目目录,结构如下: mydict-app/ ├── public/ │ ├── index.html │ ├── st…

使用Pygame制作“太空侵略者”游戏

1. 前言 在 2D 游戏开发中,“太空侵略者”是一款入门难度适中、却能覆盖多种常见游戏机制的项目: 玩家控制飞船(Player)左右移动,发射子弹。敌人(Enemy)排列成一行或多行,从屏幕顶…

Linux find 命令 | grep 命令 | 查找 / 列出文件或目录路径 | 示例

注:本文为 “Linux find 命令 | grep 命令使用” 相关文章合辑。 未整理去重。 如何在 Linux 中查找文件 作者: Lewis Cowles 译者: LCTT geekpi | 2018-04-28 07:09 使用简单的命令在 Linux 下基于类型、内容等快速查找文件。 如果你是 W…

JVM 四虚拟机栈

虚拟机栈出现的背景 由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多…

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

Spring理论知识(Ⅴ)——Spring Web模块

Spring的组成 Spring由20个核心依赖组成&#xff0c;这20个核心依赖可以分为6个核心模块 Spring Web模块简介 众所周知&#xff0c;Java目前最大的一个用途就是作为Web应用的服务端&#xff08;Java Web&#xff09; Spring又是JavaEE中使用最广泛的开发框架&#xff0…

(10) 如何获取 linux 系统上的 TCP 、 UDP 套接字的收发缓存的默认大小,以及代码范例

&#xff08;1&#xff09; 先介绍下后面的代码里要用到的基础函数&#xff1a; 以及&#xff1a; &#xff08;2&#xff09; 接着给出现代版的 读写 socket 参数的系统函数 &#xff1a; 以及&#xff1a; &#xff08;3&#xff09; 给出 一言的 范例代码&#xff0c;获取…

车载软件架构 --- 软件定义汽车面向服务架构的应用迁移

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 简单&#xff0c;单纯&#xff0c;喜欢独处&#xff0c;独来独往&#xff0c;不易合同频过着接地气的生活…

【高级篇 / IPv6】(7.2) ❀ 04. 在60E上配置ADSL拨号宽带上网(IPv4) ❀ FortiGate 防火墙

【简介】除了单位用户以外&#xff0c;大部分个人用户目前使用的仍然是30E、50E、60E系列防火墙&#xff0c;固件无法达到目前最高版本7.6&#xff0c;这里以最常用的60E为例&#xff0c;演示固件版本7.2下实现ADSL拨号宽带的IPv6上网。由于内容比较多&#xff0c;文章分上、下…

鼠标拖尾特效

文章目录 鼠标拖尾特效一、引言二、实现原理1、监听鼠标移动事件2、生成拖尾元素3、控制元素生命周期 三、代码实现四、使用示例五、总结 鼠标拖尾特效 一、引言 鼠标拖尾特效是一种非常酷炫的前端交互效果&#xff0c;能够为网页增添独特的视觉体验。它通常通过JavaScript和C…