OPENPPP2 网络驱动模式

OPENPPP2 网络驱动模式

一、概述

OPENPPP2 实现了两种网络传输架构模式:半双工模式全双工模式(VMUX),这是该项目的核心技术特点之一。

二、半双工模式

2.1 核心设计原理

半双工模式采用一对一映射 机制:每个TCP连接对应一个独立的VNP隧道进行转发。这种模式通过 VirtualEthernetTcpipConnection 类实现。

每个连接实例维护:

  • socket_: 本地TCP套接字
  • transmission_: VNP隧道传输对象(支持三种协议)

2.2 支持的隧道协议

系统支持三种隧道传输协议:

  • ppp:// - 原生TCP直连(默认端口20000)
  • ws:// - WebSocket明文传输(默认端口20080)
  • wss:// - SSL加密WebSocket(默认端口20443)

2.3 半双工模式示意图

目标服务器
VNP服务端
VNP隧道层
VNP客户端 - 半双工模式
客户端应用层
双向转发

ForwardSocketToTransmission

ForwardTransmissionToSocket
TCP连接1
TCP连接2
TCP连接N
VirtualEthernetTcpipConnection1

socket_ + transmission_
VirtualEthernetTcpipConnection2

socket_ + transmission_
VirtualEthernetTcpipConnectionN

socket_ + transmission_
隧道1

ppp:// / ws:// / wss://
隧道2

ppp:// / ws:// / wss://
隧道N

ppp:// / ws:// / wss://
服务端连接1
服务端连接2
服务端连接N
目标服务器1
目标服务器2
目标服务器N

三、全双工模式(VMUX)

3.1 VMUX核心技术

VMUX(Virtual Multiplexing)是一种带宽聚合技术,通过建立多条物理链路层连接(linklayer),实现多个虚拟TCP连接的复用传输。

3.2 关键组件

3.2.1 vmux_net - 多路复用管理器

负责管理整个VMUX会话,包括:

  • 链路层管理 :维护多条物理连接(vmux_linklayer
  • 虚拟连接管理 :管理所有虚拟套接字(vmux_skt
  • 包序列化 :通过 seqack 机制确保数据包顺序
  • 心跳机制:保持链路活性
3.2.2 vmux_linklayer - 物理链路层

每条物理链路包含:

  • connection: VirtualEthernetTcpipConnection 对象
  • server: 服务端连接对象(服务端模式)
3.2.3 vmux_skt - 虚拟套接字

代表通过VMUX隧道建立的单个虚拟TCP连接,支持:

  • 连接建立和关闭
  • 数据收发
  • 拥塞控制
  • 加速模式 8
3.2.4 vmux_hdr - 数据包头部

每个VMUX数据包包含:

  • seq: 序列号(32位)
  • cmd: 命令类型(SYN, PUSH, FIN等)
  • connection_id: 连接标识符(32位)

3.3 VMUX全双工模式示意图

目标服务器
VNP服务端 - VMUX
VNP隧道层
数据包处理
VNP客户端 - VMUX全双工模式
客户端应用层
物理链路层 max_connections=4
虚拟套接字层
带宽聚合
包重排序

packet_less
TCP连接1
TCP连接2
TCP连接3
TCP连接N
vmux_net

多路复用管理器
vmux_skt1

connection_id=1
vmux_skt2

connection_id=2
vmux_skt3

connection_id=3
vmux_sktN

connection_id=N
vmux_linklayer1

物理连接1
vmux_linklayer2

物理连接2
vmux_linklayer3

物理连接3
vmux_linklayer4

物理连接4
vmux_hdr

seq + cmd + connection_id
tx_queue

发送队列
rx_queue

接收队列

包重排序
隧道1
隧道2
隧道3
隧道4
vmux_net

服务端多路复用
linklayer1
linklayer2
linklayer3
linklayer4
目标服务器1
目标服务器2
目标服务器3
目标服务器N

3.4 VMUX数据流处理机制

服务端vmux_net vmux_linklayer 发送队列 vmux_net vmux_skt 应用程序 服务端vmux_net vmux_linklayer 发送队列 vmux_net vmux_skt 应用程序 封装vmux_hdr seq++, cmd=push, conn_id 负载均衡选择链路 检查seq,放入rx_queue 按序取出数据包 packet_less排序 send_to_peer_yield(data) post(cmd_push, data, connection_id) 加入发送队列 underlyin_sent() 物理传输 packet_input_unorder() packet_input() 转发到目标服务器

3.5 帧重排序机制

VMUX使用 packet_less 比较器确保数据包按序处理:

通过 rx_packet_ssqueue 实现有序队列:

四、两种模式对比

4.1 性能特点对比

特性 半双工模式 全双工模式(VMUX)
连接映射 1:1(每连接一隧道) N:M(多连接复用多链路)
带宽利用 单隧道带宽 聚合带宽(4-16条链路)
CPU开销 ⭐ 最低 ⭐⭐⭐⭐ 较高
延迟 单链路延迟 优化后延迟接近直连
突发性能 受单链路限制 ⭐⭐⭐⭐⭐ 极佳
复杂度 简单 复杂(序列化、重排序)
适用场景 稳定网络、高带宽 不稳定网络、跨洲连接

4.2 网络模式选择

跨洲连接

本地/邻近


客户端
服务端
双向
选择网络模式
网络延迟

是否>100ms?
CPU资源

是否充足?
选择半双工模式

最大化带宽
选择VMUX全双工

--tun-mux 4-16
选择半双工模式

降低CPU负担
启用加速模式?
--tun-mux-acceleration client
--tun-mux-acceleration server
--tun-mux-acceleration both
部署完成

五、实现细节

5.1 客户端VMUX初始化

客户端通过 VEthernetExchanger 类的 DoMuxEvents() 方法初始化VMUX多路复用:

5.2 服务端VMUX响应

服务端通过 VirtualEthernetExchanger 类的 OnMux() 方法处理VMUX连接请求:

5.3 传输层抽象

所有隧道协议都实现 ITransmission 接口,提供统一的读写API:

Notes

技术点总结

  1. 半双工模式优势在于简单高效,每个TCP连接独立转发,CPU开销最小,适合香港到大陆等低延迟稳定网络场景。

  2. VMUX全双工模式通过多链路带宽聚合显著提升跨洲连接体验(如中国到美国),但会增加CPU负担用于数据包序列化和重排序处理。

  3. 包序列号机制(seq/ack)是VMUX核心,确保跨多条物理链路传输的数据包能正确重组,实现类似TCP的可靠传输。

  4. 加速模式分为标准、客户端加速、服务端加速、双向加速四种,可根据网络瓶颈点灵活配置。

  5. 系统支持三种隧道协议(ppp://, ws://, wss://),可根据网络环境选择,wss://支持CDN转发更隐蔽。

相关推荐
Yvonne爱编码4 分钟前
JAVA数据结构 DAY6-栈和队列
java·开发语言·数据结构·python
Re.不晚5 分钟前
JAVA进阶之路——无奖问答挑战1
java·开发语言
你这个代码我看不懂13 分钟前
@ConditionalOnProperty不直接使用松绑定规则
java·开发语言
chian-ocean14 分钟前
深入 CANN:使用 `tbe-op` 构建自定义高性能算子
网络
pas13621 分钟前
41-parse的实现原理&有限状态机
开发语言·前端·javascript
琹箐32 分钟前
最大堆和最小堆 实现思路
java·开发语言·算法
中议视控35 分钟前
可编程网络中央控制系统主机通过红外发射棒控制空调电视等红外设备
网络·物联网·5g
Monly211 小时前
Java:修改打包配置文件
java·开发语言
我命由我123451 小时前
Android 广播 - 静态注册与动态注册对广播接收器实例创建的影响
android·java·开发语言·java-ee·android studio·android-studio·android runtime
island13142 小时前
CANN ops-nn 算子库深度解析:核心算子(如激活函数、归一化)的数值精度控制与内存高效实现
开发语言·人工智能·神经网络