OPENPPP2 Code Analysis One

OPENPPP2 Code Analysis One

一、整体概览

OPENPPP2 是一个企业级虚拟以太网VNP解决方案,采用下一代安全网络接入技术,提供高性能虚拟以太网隧道服务。

1.1 系统总体结构

OPENPPP2整体架构
客户端 Client
VNP 隧道层
服务端 Server
传输加密层
网络协议栈层
底层网络层
本地代理服务
HTTP Proxy
SOCKS Proxy
管理后端
虚拟交换机
虚拟子网

1.2 核心技术特点

OPENPPP2

核心技术
并发架构
同步超线程IO技术
全协程+多线程架构
SSMT优化模式
支持IO_URING
网络功能
双网络协议栈
LWIP协议栈
CTCP协议栈
全双工/半双工隧道
VNP虚拟子网
端口映射 P-NAT2
虚拟BGP多线分流
加密传输
支持可打印明文传输
多种加密算法
AES-128-CFB
AES-256-CFB
AES-128-GCM
AES-256-GCM
SIMD+AES_NI优化
流量混淆技术
高级特性
MUX多路复用
DNS缓存
CDN转发支持
VNP Turbo
TCP Fast Open
UDP多线路宽频聚合
代理支持
正向代理
HTTP代理
SOCKS代理
Paper Airplane分层

二、软件设计

2.1 客户端/服务器模式

服务器模式 Server Mode
客户端模式 Client Mode
加密隧道
VEthernetNetworkSwitcher
VEthernetExchanger
TUN/TAP 设备
本地代理
HTTP Proxy
SOCKS Proxy
路由管理
VBGP 智能分流
DNS 规则
VirtualEthernetSwitcher
VirtualEthernetExchanger
虚拟子网管理
端口映射服务
管理后端
WebHook API
防火墙规则

2.2 核心类层次结构

PppApplication
-AppConfiguration configuration_
-VirtualEthernetSwitcher server_
-VEthernetNetworkSwitcher client_
-NetworkInterface network_interface_
+Main() : int
+OnTick() : bool
+LoadConfiguration()
+PreparedLoopbackEnvironment()
AppConfiguration
+concurrent: int
+key: KeyConfig
+tcp: TcpConfig
+udp: UdpConfig
+websocket: WebsocketConfig
+client: ClientConfig
+server: ServerConfig
+Load() : bool
VirtualEthernetSwitcher
+GetLocalEndPoint()
+GetAllExchangerNumber()
+GetManagedServer()
VEthernetNetworkSwitcher
+GetExchanger()
+GetHttpProxy()
+GetSocksProxy()
+GetAggligator()
+IsMuxEnabled() : bool
VEthernetExchanger
+GetNetworkState()
+GetMuxNetworkState()
+StaticEchoAllocated() : bool

三、模块结构分析

3.1 目录结构与模块划分

openppp2/
ppp/
common/
平台相关/
app/
核心模块/
client/
server/
protocol/
mux/
proxys/
dns/
网络组件
网络组件
管理后端
cryptography/
transmissions/
net/
tap/
threading/
aesni/
aggligator/
lwip/
chnroutes2/
windows/
linux/
darwin/
android/

3.2 核心模块依赖关系

应用层 app/
传输层 transmissions/
网络层 net/
加密层 cryptography/
TAP设备层 tap/
Boost.Asio
OpenSSL
AES-NI优化
线程管理 threading/
执行器模式
缓冲区管理
LWIP协议栈
系统驱动
配置管理 configurations/
JSON解析

四、数据流与处理流程

4.1 客户端数据流转流程

VNP服务器 隧道层 加密层 协议栈层 TUN/TAP设备 用户应用 VNP服务器 隧道层 加密层 协议栈层 TUN/TAP设备 用户应用 alt [LWIP 协议栈] [CTCP 协议栈] AES-128/256-CFB/GCM alt [MUX 多路复用] 发送数据包 虚拟网卡接收 LWIP处理 内核协议栈 协议层数据 加密处理 加密数据 MUX封装 发送到服务器 响应数据 解密 明文数据 传递给应用 接收数据

4.2 连接建立流程

connecting
established
reconnecting
mux > 0
mux = 0
超时/错误
初始化配置
创建TAP设备
打开TAP驱动
创建交换机
建立隧道连接
连接中
已建立
重连中
数据传输
MUX检查
启用MUX
普通传输
多通道传输
单通道传输
断开连接

4.3 加密传输处理流程



AES-128-CFB
AES-256-CFB
AES-128-GCM
AES-256-GCM
AES-256-CFB
AES-128-CFB






原始数据
允许明文?
明文传输
协议层加密
协议加密算法
AES-128-CFB 加密
AES-256-CFB 加密
AES-128-GCM 加密
AES-256-GCM 加密
传输层加密
传输加密算法
AES-256-CFB 加密
AES-128-CFB 加密
其他选项
流量混淆?
应用混淆算法
增量编码?
Delta编码
数据随机化?
数据打乱
发送数据
传输完成

五、技术栈与依赖

5.1 技术栈层次图

操作系统层
第三方库层
系统接口层
网络协议层
核心服务层
业务逻辑层
应用层
客户端应用
服务器应用
管理后端
VNP 客户端逻辑
VNP 服务器逻辑
代理服务器
路由管理
传输管理
加密服务
MUX 多路复用
DNS 服务
防火墙管理
TCP/IP 协议栈
LWIP 协议栈
WebSocket 协议
HTTP/HTTPS
TUN/TAP 驱动
Socket API
系统路由表
防火墙接口
Boost.Asio
OpenSSL
jemalloc
JSON库
LWIP
Windows
Linux
macOS
Android

5.2 编译依赖关系

编译器要求
可选依赖
完整依赖
最小依赖
Boost >= 1.70
jemalloc >= 5.30
OpenSSL >= 1.1.x
Boost
jemalloc
OpenSSL
cURL
liburing
AES-NI SIMD
C++17 支持
GCC/Clang/MSVC
OPENPPP2

相关推荐
Fu20672114 小时前
OSPF笔记 OSPF --- 开放式最短路径优先
网络·笔记
无限进步_14 小时前
C++11概览与统一初始化
开发语言·c++
志栋智能14 小时前
从单点检查到全景监控:巡检超自动化的维度拓展
运维·服务器·网络·人工智能·自动化
A000—ic测试座(陈佳鑫)14 小时前
芯片高温加速寿命测试:除了初始测试还有哪些关键条件?
网络·人工智能·python
吃着火锅x唱着歌14 小时前
深度探索C++对象模型 学习笔记 第五章 构造、解构、拷贝语意学(1)
c++·笔记·学习
楼兰公子14 小时前
RK3588 + Linux 7.0.3 内核网络子系统高阶进阶全解
linux·网络
承渊政道15 小时前
【贪心算法】(经典实战应用解析(五):单调递增的数字、坏了的计算器、合并区间、⽆重叠区间、⽤最少数量的箭引爆⽓球)
数据结构·c++·leetcode·贪心算法·排序算法·动态规划·哈希算法
Brilliantwxx15 小时前
【C++】深度剖析 · 继承 (虚基表+虚函数表)
开发语言·c++
皮卡蛋炒饭.15 小时前
NAT、代理服务、内网穿透与五种IO模型
网络·智能路由器
一只旭宝15 小时前
【C加加入门精讲15】:IO流缓冲区、字符串流、缓冲流及STL vector容器零基础实战教程一、博客前言
开发语言·c++