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.rhkb.cn/news/11988.html

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

相关文章

【Linux】从硬件到软件了解进程

个人主页~ 从硬件到软件了解进程 一、冯诺依曼体系结构二、操作系统三、操作系统进程管理1、概念2、PCB和task_struct3、查看进程4、通过系统调用fork创建进程(1)简述(2)系统调用生成子进程的过程〇提出问题①fork函数②父子进程关…

Deep Crossing:深度交叉网络在推荐系统中的应用

实验和完整代码 完整代码实现和jupyter运行:https://github.com/Myolive-Lin/RecSys--deep-learning-recommendation-system/tree/main 引言 在机器学习和深度学习领域,特征工程一直是一个关键步骤,尤其是对于大规模的推荐系统和广告点击率预…

AI智慧社区--Excel表的导入导出

Excel表导入导出的环境配置 1.导入依赖 <dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-spring-boot-starter</artifactId><version>${easypoi.version}</version></dependency>2.配置Excel的导入导出以及…

【C++】B2122 单词翻转

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

【流媒体】搭建流媒体服务器

搭建Windows Nginx服务器 搭建 下载nginx工具包解压至本地&#xff0c;并在cmd窗口中切换至nginx所在的本地目录修改 conf/nginx.conf 文件&#xff0c;更改其端口号 server中的 listen的端口号从 80改为 8080&#xff0c;因为80经常被其他服务占用&#xff0c;导致无法打开 …

编程AI深度实战:给vim装上AI

系列文章&#xff1a; 编程AI深度实战&#xff1a;私有模型deep seek r1&#xff0c;必会ollama-CSDN博客 编程AI深度实战&#xff1a;自己的AI&#xff0c;必会LangChain-CSDN博客 编程AI深度实战&#xff1a;给vim装上AI-CSDN博客 编程AI深度实战&#xff1a;火的编程AI&…

MySQL锁详解

MySQL锁详解 数据库的锁机制锁的分类行级锁与表级锁行级锁之共享锁与排他锁乐观锁与悲观锁悲观锁乐观锁 Innodb存储引擎的锁机制行级锁与表级锁的使用区分三种行锁的算法死锁的问题多版本并发控制MVCC 数据库的锁机制 什么是锁&#xff1f;锁是一种保障数据的机制 为何要用锁…

100 ,【8】 buuctf web [蓝帽杯 2021]One Pointer PHP(别看)

进入靶场 没提示&#xff0c;去看源代码。 user.php <?php // 定义一个名为 User 的类&#xff0c;该类可用于表示用户相关信息或执行与用户有关的操作 class User{// 声明一个公共属性 $count&#xff0c;可在类的内部和外部直接访问// 这个属性可能用于记录与用户相关…

【leetcode练习·二叉树拓展】归并排序详解及应用

本文参考labuladong算法笔记[拓展&#xff1a;归并排序详解及应用 | labuladong 的算法笔记] “归并排序就是二叉树的后序遍历”——labuladong 就说归并排序吧&#xff0c;如果给你看代码&#xff0c;让你脑补一下归并排序的过程&#xff0c;你脑子里会出现什么场景&#xff…

解决PyG安装中torch-sparse安装失败问题:详细指南

1 问题描述 最近在学习GNN&#xff0c;需要使用PyTorch Geometric&#xff08;PyG&#xff09;库。在安装PyG的过程中&#xff0c;遇到了torch-sparse安装失败的问题&#xff0c;错误提示为&#xff1a; ERROR: Failed building wheel for torch-sparse本文将详细记录问题的解…

四、GPIO中断实现按键功能

4.1 GPIO简介 输入输出&#xff08;I/O&#xff09;是一个非常重要的概念。I/O泛指所有类型的输入输出端口&#xff0c;包括单向的端口如逻辑门电路的输入输出管脚和双向的GPIO端口。而GPIO&#xff08;General-Purpose Input/Output&#xff09;则是一个常见的术语&#xff0c…

分析哲学:从 语言解剖到 思想澄清的哲学探险

分析哲学&#xff1a;从 语言解剖 到 思想澄清 的哲学探险 第一节&#xff1a;分析哲学的基本概念与公式解释 【通俗讲解&#xff0c;打比方来讲解&#xff01;】 分析哲学&#xff0c;就像一位 “语言侦探”&#xff0c;专注于 “解剖语言”&#xff0c;揭示我们日常使用的语…

XCCL、NCCL、HCCL通信库

XCCL提供的基本能力 XCCL提供的基本能力 不同的XCCL 针对不同的网络拓扑&#xff0c;实现的是不同的优化算法的&#xff08;不同CCL库最大的区别就是这&#xff09; 不同CCL库还会根据自己的硬件、系统&#xff0c;在底层上面对一些相对应的改动&#xff1b; 但是对上的API接口…

【数据结构篇】时间复杂度

一.数据结构前言 1.1 数据结构的概念 数据结构(Data Structure)是计算机存储、组织数据的⽅式&#xff0c;指相互之间存在⼀种或多种特定关系的数 据元素的集合。没有⼀种单⼀的数据结构对所有⽤途都有⽤&#xff0c;所以我们要学各式各样的数据结构&#xff0c; 如&#xff1a…

700. 二叉搜索树中的搜索

二叉搜索树中的搜索 已解答 给定二叉搜索树&#xff08;BST&#xff09;的根节点 root 和一个整数值 val。 你需要在 BST 中找到节点值等于 val 的节点。 返回以该节点为根的子树。 如果节点不存在&#xff0c;则返回 null 。 示例 1: 输入&#xff1a;root [4,2,7,1,3], v…

Spring Cloud工程搭建

目录 工程搭建 搭建父子工程 创建父工程 Spring Cloud版本 创建子项目-订单服务 声明项⽬依赖 和 项⽬构建插件 创建子项目-商品服务 声明项⽬依赖 和 项⽬构建插件 工程搭建 因为拆分成了微服务&#xff0c;所以要拆分出多个项目&#xff0c;但是IDEA只能一个窗口有一…

Rust中使用ORM框架diesel报错问题

1 起初环境没有问题&#xff1a;在Rust开发的时候起初使用的是mingw64平台加stable-x86_64-pc-windows-gnu编译链&#xff0c;当使用到diesel时会报错&#xff0c;如下&#xff1a; x86_64-w64-mingw32/bin/ld.exe: cannot find -lmysql具体信息很长这是主要信息是rust找不到链…

【C++】P1765 手机

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;问题描述题目内容示例&#xff1a; 键盘布局 &#x1f4af;我的做法思路问题与优化我的代码实现分析与问题 &#x1f4af;老师的做法思路老师的代码实现分析优点 &#x1f…

本地快速部署DeepSeek-R1模型——2025新年贺岁

一晃年初六了&#xff0c;春节长假余额马上归零了。今天下午在我的电脑上成功部署了DeepSeek-R1模型&#xff0c;抽个时间和大家简单分享一下过程&#xff1a; 概述 DeepSeek模型 是一家由中国知名量化私募巨头幻方量化创立的人工智能公司&#xff0c;致力于开发高效、高性能…

3 卷积神经网络CNN

1 Image Classification (Neuron Version) – 1.1 Observation 1 1.2 Observation 2 如果不同的receptive field需要相同功能的neuron&#xff0c;可以使这些neuron共享参数 1.3 Benefit of Convolutional Layer 2 Image Classification (Filter Version) 不用担心filter大小…