# sdlan-sn设计 服务端为单体应用,多个服务端可以同时启动,后面的服务端启动时,可以指定`--federation x.x.x.x:7655,y.y.y.y:7656`命令行参数来指定其他的服务端,服务端将其他服务端的信息保存在`federation`这个network里面。 比如有如下的结构: ```mermaid 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.