首页全栈自研
全栈自研:从网卡驱动到云平台
多数出口设备是拼装出来的:芯片厂的驱动、开源的转发与协议组件、再套一层管理界面。哪一层出了问题,都要等上游。Polybit 把这几层全部自己写了一遍,下面按从下到上的顺序说明每一层做了什么。
网卡驱动
收发包路径
驱动决定一个包从网口进来、到交给转发之前要花多少 CPU。我们针对 AX40 的网关芯片重写了收发包路径,并把几项关键行为做成可以在网页上逐项调整的开关。
- 中断合并:可选关 / 20µs / 50µs / 100µs。攒一小批包再处理一次中断,多出的延迟不超过所选的微秒数。
- 忙轮询:收包核不等中断,持续收包并顺手回收发包完成,可以只开 LAN、只开 WAN 或两侧都开。
- 硬件 GRO:网卡把同一条 TCP 流的几个包先拼成一个大包,转发按大包只算一次开销。
- 绑核与分担:收包核与转发核可以分开指定,上行、下行各走各的核。
这几项都会改变设备的基本收发行为,所以属于高风险设置:点「应用」后 90 秒内要点「保留此设置」才会留下,否则自动退回上一版;试用中设备失联或重启,也会自己回到原来的设置。
转发引擎
快速转发路径
连接建立后,后续的包走快速转发路径,不再每个包都走完整的查表流程。NAT、策略路由、限速与流量统计在同一条流水线里完成,不是几个独立组件来回传递。
- 快速转发:已建立的连接直接走快路径,经 Fredyun SD-WAN 内核隧道的连接也可以走。
- 差异下发:配置变更只下发改动的部分,不整表重载;限速与统计的计数持续累加,不会被周期性清零。
- 可观测:诊断页可以看到每条中断线的包数、每个收包队列的忙闲、快速转发命中的连接数,一键复制全部信息。
协议库
Rust · 禁用不安全代码
设备端的协议与服务都是自己实现的,没有拿现成的守护进程拼起来。设备端用 Rust 编写,整个工程在编译器层面禁用不安全代码(unsafe_code = "forbid"),一整类内存错误在编译时就被排除。
- 接入:PPPoE 拨号、DHCP 客户端与服务端、静态地址、WireGuard。
- DNS:透明 DNS 代理、按域名分流,可拦截 DoT / DoH。
- 链路探测:时延与丢包探测,驱动链路组的选路和主备切换。
- Fredyun SD-WAN:专有组网协议栈,数据面可以放进内核。详解
管理面与云
配置版本库 · 授权 · 云端
远程改配置,怕的是改错之后连不上设备。Polybit 的配置是一个版本库:每次改动先给你看差异,提交后要限时确认,没确认就自动回滚到上一版。
- 配置版本库:每次变更都有记录,可以对比、可以一键还原。
- 固件:签名镜像,写入前校验,失败自动退回;系统分区做完整性校验,另有 U-Boot 救援刷机。
- 授权:与硬件绑定,防克隆。
- 云平台:cloud.polybit.cn 自助注册、绑定设备、经加密通道打开设备网页。了解
每一版怎么验
发布前
自己写的代码要自己负责。每个版本发布前,都要跑完一整套端到端场景(100 多个,1.0.0 为 110 个全部通过),并在真机上完整演练一遍网页升级,确认升级、回退都正常。
高风险的调优项进试用期,固件写入失败自动退回,远程改配置有限时确认——这些机制本身也在每一版的验证范围里。