支持对等连接
lanthora opened this issue · comments
支持对等连接,这里记录需要拆分的子功能模块.
基本流程:
- 客户端启动,完成登录
创建 UDP socket,向服务端请求自己在外网的地址和端口把这个地址端口和公钥一起广播到网络.向某个客户端发送 IPv4 数据时,从 STUN 服务获取本服务外网地址和端口,通过服务端转发用于建立对等连接的控制信息- 对端收到建连控制信息后,通过服务端向这个客户端回复自己的地址和端口
- 此时双方都持有对方的对端信息,互相发送消息探测连接
- 连接成功后,固定频率发送心跳,此后发向这个地址的数据通过对等连接发送
连接需要非对称加密,客户端需要在网络中广播自己的公钥,需要添加广播机制.
客户端只处理服务端认证过的地址和端口,服务端认为所有持有正确口令的客户端都可信,所有数据通过简单的对称加密传输,对称加密的密钥由目的地址和口令生成,收到报文的一方就可以用同一个密钥解密所有客户端发来的数据.
客户端本身需要知道自己在公网的地址和端口. 服务端要提供出这样的能力,实现 UDP 服务.
STUN 协议可以做到这一点,并且有公开的服务端可以用,只需要实现客户端部分,就能拿到地址和端口号