EasyTier 网络模型
节点与 peer id
Section titled “节点与 peer id”- 每个 EasyTier 节点有一个 peer id;
- 本机 peer id 在启动时生成;
- 对端 peer id 在握手后获知;
Status.peer_id是本机 id,Event.peer_id在PeerUp时是对端 id。
日常排障主要看虚拟 IP 和虚拟网络里的主机名,peer id 用于日志与路由。
- 节点在虚拟网络里的地址,例如
10.144.144.10/24; - 由静态配置或 DHCP 自分配得到;
- 应用通过虚拟网卡访问;
- 与物理网卡地址无关。
[[peer]].uri指向一个可达的 EasyTier 节点;- ESP32 作为客户端主动连接入口;
- 一个入口对应一条连接;同一
host:port不会重复连接; - 入口列表可以很长,但同时连接数受 Kconfig 限制。
下一跳与中继
Section titled “下一跳与中继”- 直连节点:下一跳就是它自己;
- 多跳节点:下一跳是路径上的第一个中转节点;
- 目的节点不是直连时,数据会经过一个或多个中转节点;
- 超过 7 跳丢弃,用于防环。
所以 ESP32 可以转发其他节点的数据,但它仍然不是“入口服务器”:它不监听端口,不能被别人主动连入。
本组件扮演的角色
Section titled “本组件扮演的角色”| 角色 | 是否支持 |
|---|---|
| 客户端(主动连入口) | ✅ |
| 数据中继(转发别人的数据) | ✅ |
| 入口服务器(监听、接受连接) | ❌ |
| 子网代理 | ❌ |
| 广播/组播 | ❌ |
一次通信大概发生什么
Section titled “一次通信大概发生什么”- 应用通过虚拟网卡发出一个 IP 报文;
- 组件根据目的虚拟 IP 找到目标节点与下一跳,加密后发往入口;
- 中间节点按下一跳转发,最终到达目的节点;目的节点解密后投递给它的应用。
应用不需要感知这个过程,只需要像访问普通 IP 一样访问虚拟地址。
“TCP 连上就是组网成功”
Section titled ““TCP 连上就是组网成功””不是。TCP 只代表传输层通了;还要握手、同步路由、拿到虚拟地址,才是 Ready。
“虚拟 IP 是物理网卡的第二个地址”
Section titled ““虚拟 IP 是物理网卡的第二个地址””不是。它是独立虚拟网卡上的地址;物理网卡继续承载入口连接与普通上网。
“ESP32 可以给其他节点分配地址”
Section titled ““ESP32 可以给其他节点分配地址””不能。DHCP 只做本机自分配,不提供地址分配服务。