(开源)OpenSpeed协议
约 1605 字大约 5 分钟
2026-09-10
互联网级 · 开源 · 超高速 · 高安全 · 高可靠传输协议 OSPT/1 与参考实现
OpenSpeed
互联网级 · 开源 · 超高速 · 高安全 · 高可靠传输协议 OSPT/1 与参考实现
作者:科技酱(https://docs.asoe.cn)/)
一句话:丢掉 TCP 的桎梏,把“可靠传输 + 前向纠错 + 端到端校验 + 认证加密”做成一套可移植、可嵌入、极致性能的自有协议。
OpenSpeed 是一套面向互联网与各类应用的传输协议(IPv4/IPv6、系统、云主机、网关均可用):从底层 UDP 构建可靠字节流,内置 XOR 前向纠错(FEC)、CRC-32 + 可选 AES-256-GCM 帧级认证加密、累积/选择性确认(ACK + SACK)、自适应 RTO 与快速/超时重传、端到端 SHA-256 完整性闭环。附 Node.js 参考实现:CLI + SDK,可嵌入系统服务、App/小程序后端、网关数据管道。
为什么不用 TCP / 裸 QUIC / 裸 UDP?
| 方案 | 问题 | OpenSpeed 的对策 |
|---|---|---|
| TCP 传输 | 内核队列行为不可控;丢包即队头阻塞;长肥网络吞吐上不去 | 自研传输语义,每 k 帧 1 个 XOR 奇偶帧就地恢复单帧丢失,多数丢包不进重传 |
| 裸 UDP 直传 | 会丢包、乱序、重复;坏了没人知道 | 顺序化 + ACK/SACK + RTO 重传 + CRC-32 逐帧检错 |
| 简单 UDP 工具 | “传完了”≠“传对了”;明文裸奔 | 流式单遍 SHA-256 端到端校验,失败自动删除回滚;可选 GCM 加密 |
| 教科书协议 | 参数不可调、不可嵌入业务 | 帧为自描述字节结构,不依赖 UDP 字段,可搬到 TCP 隧道 / 网关 / WebRTC 适配层 |
设计目标一句话:在高带宽、有丢包的链路上把有效吞吐尽量拉满,同时绝不把坏文件/坏数据交给上层。
核心能力
- 超高速:流水线大窗口 + 在途限流 + 帧级 FEC + 接收端 256 KiB 批量顺序落盘(吞吐提升约 60%;64 MiB 双进程实测 ≈15.0 MB/s、重传=0,沙箱环境参考值)
- 无敌安全(可选):设
--key即全链路 AES-256-GCM 认证加密——防窃听、防篡改、防伪造会话;密钥不匹配整帧静默拒绝 - 互联互通:IPv4 / IPv6 双栈自动识别;目标地址支持
--to [IPv6]:port - 超级稳定:CRC 首检 + FEC 就地恢复 + 自适应 RTO(60ms–4s)+ 快速/超时重传 + 空闲检测;链路断了不丢文件
- 绝不交付坏数据:发送端读取一遍同时完成传输与 SHA-256,接收端字节数 + 摘要双核对,不一致自动删除并回送 ERROR
- 干净工程:零第三方依赖、CommonJS、Node ≥ 18、全覆盖自动化测试(单元 / 端到端 / 丢包模拟 / 加密 / IPv6 / CLI)
快速开始
先安装(或克隆后在仓库内直接 node bin/ospeed.js …):
npm install -g .# 接收端(可跑在云主机,IPv4/IPv6 均可;key 一致即加密 + 认证)
ospeed serve --dir /data/in --port 34567 --key '换一个强随机密钥'
# 发送端(互联网直连:目标为公网可达地址)
ospeed send ./backup.tar.gz --to 云主机公网IP:34567 --key '相同的密钥'
# IPv6 直连
ospeed send ./a.iso --to '[2001:db8::1]:34567'
# 本机自测(吞吐 + 完整性 + 全量测试)
ospeed bench --size 64
npm test局域网/内网想极致压榨:两端可达且受信时可不带
--key;防火墙请放行 UDP 端口(Windows/Linux/IPv6 示例见 docs/使用文档.md)。
命令行
| 命令 | 说明 |
|---|---|
| `ospeed serve [--dir P] [--port N] [--key S] [--host ADDR | --v6]` |
ospeed send <文件> [--to host:port] [--key S] | 发送单个文件(IPv4/IPv6) |
ospeed bench [--size MiB] | 本机回环吞吐 / 完整性自测 |
ospeed version / ospeed help | 版本 / 帮助 |
作为 SDK 使用
const { FileSender, FileReceiver } = require('openspeed');
// 接收端 —— 完成一个文件即 resolve
const recv = new FileReceiver({ host: '::', port: 34567, dir: './in', key: 's3cret' });
const res = await recv.serve();
console.log(res.ok, res.dest, res.stats.retrans, res.stats.recovered, res.stats.authFail);
// 发送端
const snd = new FileSender({ host: '1.2.3.4', port: 34567, file: './a.iso', key: 's3cret' });
const out = await snd.run(); // { ok, avgBps, peerText: 'OK:…' }文件之外,Reliable 引擎暴露“可靠保序字节流”原语,可承载日志、镜像、遥测等任意流式数据。详细示例与参数见 docs/使用文档.md。
架构速览
UI(CLI) → 会话层(File 流 + SHA-256) → 可靠引擎(窗口/ACK/RTO/FEC/排序)
↓
安全层(AES-256-GCM, 可选)
↓
UDP 载体 UDP4/UDP6(可替换: TCP 隧道/网关/WebRTC 适配层)帧为自描述字节结构且不隐含 UDP 字段 ⇒ 同一套可靠与完整性语义未来可直接移植到浏览器(WebRTC 适配)、App、小程序(网关中转 + TCP 承载)等接入形态(见路线图)。
文档
| 文档 | 内容 |
|---|---|
| docs/协议规范.md | OSPT/1 线格式、握手、ACK/SACK、FEC、加密、状态机、诚实取舍清单 |
| docs/使用文档.md | 安装、CLI、互联网直连(IPv4/IPv6)、密钥与安全、SDK、故障排查、当前边界 |
| docs/开发文档.md | 架构、引擎/会话/安全层、统计字段、测试矩阵、性能记录、路线图 |
| SECURITY.md | 安全模型、威胁边界、漏洞报告 |
| CONTRIBUTING.md | 贡献指南 |
| CHANGELOG.md | 版本历史 |
测试
npm test 运行 7 组用例:FEC 恢复单测 · 帧编解码单测 · 加密单测(反篡改/错密钥/错方向) · 真实文件回环(FEC 开/关) · 加密端到端 · 确定性丢包模拟 · CLI 端到端(明文 / AES-256-GCM / IPv6)。零第三方依赖,无真实网络要求,全部通过。
路线图(节选)
显式拥塞控制(RTT/ECN)与 3-dupACK 快恢复 · 断点续传与并发多会话 · Path MTU 探测 · per-session 密钥协商与前向保密 · TCP 承载 + 网关中转(Web/小程序/App 接入)· WebRTC 适配层 · WASM/移动端实现 · 跨语言一致性测试。详见开发文档 §10。
发布
powershell -ExecutionPolicy Bypass -File tools/make-release.ps1
# 产出 dist/OpenSpeed-<version>.zip 并打印 SHA256License
MIT © 科技酱(https://docs.asoe.cn)/)
