ZeroTier的连接模式
我理解中ZeroTier实现数据连接的模式大概是这样的:
1. A 想要将数据包发送到 B,但由于它没有直接路径,因此将其向上发送到 C
2. 如果 C 有直接链接到 B,它会转发数据包给 B,否则它会继续向上游发送数据包,直到达到根节点 Z
3. 根节点 Z 知道所有节点,所以如果 B 在线,最终数据包将到达 B
4. C 还向 A 发送一个握手的消息,包含有关它如何到达 B 的提示。同时,将握手消息发给 B,通知 B 它如何到达 A
5. A 和 B 获取握手消息并尝试相互发送测试消息,可能会对 NAT 或防火墙进行穿透,如果这样可以建立直接链路,则不再需要中继,如果无法建立直接路径,则通信可以继续中继(速度慢)。
这里面的根节点 Z 是由ZeroTier官方提供的,用户也可以自己搭建类根节点 Moon,来依托 Z 节点提高数据交换速度。