Linux,Windows OS的此类任务确实存在哪些软件库?
RFC中是否存在一些人们应该如何做的信息?
我有兴趣如何为我的C ++项目创建功能,如此软件中所示:https://secure.logmein.com/ru/products/hamachi/download.aspx
答案 0 :(得分:5)
如果要通过TURN中继服务器建立连接,则没有太大区别。唯一的区别是TCP和UDP如何创建连接而没有别的。
如果你想建立P2P连接,会有一些很大的差异。
如果您在同一个网络中(在同一NAT后面):在UDP中,您向对等候选人发送一个眩晕绑定请求,然后如果您收到回复,则表示您已连接。在TCP中,您必须在一侧创建一个活动套接字,在另一侧创建一个被动套接字。然后从活动套接字发送syn并从被动套接字接收它,然后将syn ack发送到活动套接字。然后活动套接字发送一个确认,并建立连接。
如果您在不同的网络中(在不同的NAT后面):您必须使用TCP打孔技术来建立连接。因为如果先前没有数据包被发送到syn来自的地址,您的NAT将不允许TCP syn数据包通过。
TCP打孔细节:
您必须使用TCP同时打开的套接字。此套接字以主动和被动模式运行。两端都需要彼此了解私有和公共IP:端口。 TCP同时打开将发生如下:
1)对等A继续向对等B发送SYN 对等B不断向同行A发送SYN
2)当NAT-a从对等方A收到传出SYN时,它会在其状态机中创建映射。 当NAT-b从对等方B接收到传出SYN时,它会在其状态机中创建映射。
3)两个SYN在网络路径的某处交叉,然后:
来自对等方A的SYN到达NAT-b,来自对等方B的SYN到达NAT-a 根据这些事件的时间安排(在网络中SYN交叉的地方), 至少有一个NAT会让传入的SYN通过,并将其映射到内部目标对等端
4)收到SYN后,对端发回SYN + ACK并建立连接。
来自WIKI。