1.4 KiB
1.4 KiB
sdlan-sn设计
服务端为单体应用,多个服务端可以同时启动,后面的服务端启动时,可以指定--federation x.x.x.x:7655,y.y.y.y:7656命令行参数来指定其他的服务端,服务端将其他服务端的信息保存在federation这个network里面。
比如有如下的结构:
graph TD
A[服务端1]
B[服务端2]
C[节点1]
D[节点2]
A .- B
A --- C
B --- D
服务端1和服务端2通过udp连接,现在分别有个节点连接到对应的服务端,
sdlan设计
sdlan首先使用参数初始化自身,然后加入一个多播组,然后循环接收消息。
在收到Packet消息时候,一方面检查来源等,将合法的内容写入到tun设备,同时,需要查看对端,在合适的实际向对端进行注册:
- 首先从
known_peers查找节点(通过ip,如果找不到,通过sock):- 如果找到,就看当前注册的时间,如果时间过了,就从
known_peers里面重新查找该节点,如果是从节点直接p2p过来的,就从known_peers删除,重新发送注册(加入到pending_peers,然后发送register)` - 如果没找到,就直接注册(加入到
pending_peers, 然后发送register)。
- 如果找到,就看当前注册的时间,如果时间过了,就从
在重新注册过程中,如果消息来自sn转发,就通过配置的register_ttl,判断需不需要端口猜测,发送register给对端和sn.