一颗约 1 美元的 8 位 AVR,24 MHz 核心,8 KB RAM,64 KB Flash。它居然能让浏览器访问到一个页面。
这个说法很容易变成“8 位 MCU 当服务器”的标题奇观。但我更在意的是另一件事:它到底绕开了哪些限制,又把哪些工作悄悄交给了 Linux 和代理服务器。
答案并不神秘。作者 Maurycy 用 AVR64DD32 通过串口跑 SLIP,在 MCU 端写了很小的一段 IP/TCP 处理逻辑,再用 VPS、WireGuard 和反向代理,把 /mcu 路径转到这块板子上。
它能被访问。
但它不是一台现代 Web 服务器。
这颗 AVR 没有直接接以太网
AVR64DD32 的账面参数很清楚:24 MHz 8 位 AVR 核心、8 KB SRAM、64 KB Flash、256 字节 EEPROM,价格约 1 美元。
它比早年 Arduino 常见的 ATmega328 更新,也便宜。但这不代表它适合直接处理以太网。
作者放弃 10BASE-T 的原因很现实。最慢的以太网也有 10 Mbps,10BASE-T 又使用曼彻斯特编码,线上信号变化压力更高。对这类 AVR 的 IO 和外设来说,硬凑物理层并不划算。
可选路线大概是这样:
| 路线 | 做法 | 现实代价 | 我的判断 |
|---|---|---|---|
| 直接 10BASE-T | MCU 自己处理以太网信号 | 速率和时序压力太大 | 不适合这颗 AVR |
| 外接以太网芯片 | 加 PHY/MAC 或专用模块 | 硬件复杂度和物料增加 | 常规嵌入式路线 |
| 串口 SLIP | USB 串口接 Linux,再跑 IP | 带宽低,像拨号时代 | 最符合这个实验 |
SLIP 很老,RFC 1055 里的东西。它做的事也很朴素:把 IP 包塞进串口字节流,用特殊字节分隔,再对冲突字节转义。
妙处在于,Linux 到今天还支持 slattach。普通 USB 转串口适配器,可以被挂成一个网络接口。
这才是主线。
MCU 没有硬上以太网。它只是通过串口,变成了 Linux 能看见的一个很小的网络节点。
对嵌入式开发者来说,这里有个很实际的动作建议:如果项目早期只是验证协议路径,不必一上来就采购以太网芯片或换 Wi-Fi MCU。先用 SLIP 加 Linux 路由盒把链路跑通,能更快看清瓶颈在哪里。等需求变成稳定、带宽、并发,再回到专用网络芯片或 ESP8266、ESP32 这类成熟方案。
TCP/IP 能跑,但只跑了很窄一段
MCU 端的软件也没有假装完整。
IP 层只处理必要部分。大意是收包、换源地址和目的地址、重置 TTL,再把包送回去。分片等复杂机制没有完整覆盖。
这不是偷懒,而是取舍。现代网络里,IPv4 分片本来就尽量避免;IPv6 也不让路由器承担中途分片。实验链路受控时,少做一部分,反而能把代码压进 8 KB RAM 和 64 KB Flash 的边界里。
真正麻烦的是 TCP。
TCP 不是“收一行、回一行”那么简单。它有连接状态、序列号、确认、重传、关闭流程,还有一堆边界情况。作者自写了最小实现,也承认仍有 bug。
HTTP 更要降温看。
这个项目没有实现通用 HTTP 服务器。它只是返回硬编码响应。能展示一个页面,不等于能处理路由、动态内容、并发请求或长时间在线压力。
这对网络协议和复古计算爱好者更有价值。别把它当“低成本建站方案”,而应该把它当协议显微镜:从 SLIP 抓包开始,看 IP 包怎么进出,再看一个最小 TCP 状态机如何被浏览器请求逼出问题。
学习路径也很明确:先抓串口包,再看 IP 头,再看 TCP 序列号和 ACK。比直接读一本厚协议书更有手感。
公网访问靠代理,不是 MCU 拿了公网地址
最容易误读的是“上线”。
这个 MCU 没有拿到公网 IPv4 地址。访问者也不是从公网直接连到它那套简化 TCP/IP 栈。
作者的链路更像这样:一台有公网地址的 VPS 放在前面;家里的 Linux 路由盒通过 WireGuard 接入虚拟网络;正常网站路径照旧,只有 /mcu 下的请求被代理到 MCU 所在的本地地址段。
这套设计很聪明,也很克制。
聪明在于,公网暴露、TLS、路由、代理这些麻烦事,都由成熟系统承担。MCU 只处理自己能承受的一小段。
克制在于,它没有把实验说成生产服务。串口速率大约 115200 bps,TCP 实现还不完整,HTTP 只是固定响应。代理还能挡掉一部分直接 SYN 冲击,但流量一大,MCU 仍可能被打挂。
所以接下来最该看的不是“它能不能做更多页面”。那会把问题带偏。
更有判断价值的是三件事:TCP 边界会不会继续补;串口链路能不能提高速率;如果换成专用以太网芯片,代码复杂度和稳定性会怎样变化。
这三个变量一变,项目性质就变了。
如果目标是教学和复古计算,SLIP 很漂亮,知止有定。如果目标是稳定服务,答案大概率还是老规矩:小 MCU 做控制,成熟网络芯片或 Linux 主机做联网。
