有哪些适用于Linux、Windows操作系统的软件库可以完成这样的任务?
是否有RFC中关于人们应如何执行此操作的相关信息?
我想知道如何为我的C++项目创建功能,就像这个软件中所展示的一样:https://secure.logmein.com/ru/products/hamachi/download.aspx
有哪些适用于Linux、Windows操作系统的软件库可以完成这样的任务?
是否有RFC中关于人们应如何执行此操作的相关信息?
我想知道如何为我的C++项目创建功能,就像这个软件中所展示的一样:https://secure.logmein.com/ru/products/hamachi/download.aspx
如果你想通过TURN中继服务器建立连接,则没有太大区别。唯一的区别在于TCP和UDP如何创建连接,其他方面都一样。
如果你想建立P2P连接,则有一些重要的区别。
如果你们在同一个网络中(在相同的NAT后面):在UDP中,你向你的对等候选者发送一个stun绑定请求,如果你收到回应,那么你就知道连接已经建立了。TCP同样需要在一侧创建一个主动套接字和另一侧创建一个被动套接字,然后从主动套接字发送SYN,在被动套接字上接收SYN,并向主动套接字发送SYN+ACK,最后主动套接字再发送一个ACK以建立连接。
如果你们在不同的网络中(在不同的NAT后面):你必须使用TCP打洞技术来建立连接。因为如果之前没有数据包从SYN地址发送过来,你的NAT就不会允许TCP SYN数据包通过。
TCP打洞的详细过程如下:
你需要使用TCP同时打开套接字,该套接字可以同时作为主动模式和被动模式。两端均需知道对方的私有和公共IP:端口。
对等方A不断向对等方B发送SYN,而对等方B不断向对等方A发送SYN。
NAT-a收到来自对等方A的出站SYN时,会在其状态机中创建一个映射。 当NAT-b收到来自对等方B的出站SYN时,也会在其状态机中创建一个映射。
两个SYN在网络路径上相交时:
来自对等方A的SYN到达NAT-b,来自对等方B的SYN到达NAT-a 根据这些事件在网络中发生的时间(SYN在哪里相交),至少有一个NAT会让传入的SYN通过,并将其映射到内部目标对等方
收到SYN后,对等方发送SYN+ACK,连接就建立了。