为 NAT 后面的客户端创建 Tcp 连接
Create Tcp connection for clients behind NAT
对于 Linux、Windows OS 这样的任务存在哪些软件库?
RFC 中是否存在人们应该如何做的一些信息?
我很感兴趣如何为我的 C++ 项目创建功能,如该软件中所示:https://secure.logmein.com/ru/products/hamachi/download.aspx
没有太大区别如果你想通过TURN中继服务器建立连接。唯一的区别是 TCP 和 UDP 创建连接的方式不同。
如果要建立P2P连接,有一些很大的不同
如果您在同一个网络中(在同一个 NAT 后面): 在 UDP 中,您向您的对等候选人发送一个 stun 绑定请求,然后如果您收到回复,那么您就知道了你已连接。在 TCP 中,您必须在一侧创建一个主动套接字,在另一侧创建一个被动套接字。然后从主动套接字发送syn并从被动套接字接收它,然后将syn ack发送到主动套接字。然后活动套接字发送一个ack并建立连接。
如果您在不同的网络中(在不同的 NAT 后面): 您必须使用 TCP 打洞技术来建立连接。因为如果之前没有数据包发送到 syn 来自的地址,您的 NAT 将不允许 TCP syn 数据包通过。
TCP打孔详解:
您必须使用 TCP 同时打开套接字。该套接字以主动和被动模式运行。两端都需要了解对方的隐私和 public IP:Port。
TCP 同时打开将发生如下情况:
Peer A 不断向 Peer B 发送 SYN
Peer B 不断向 Peer 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,连接建立。
来自 WIKI.
还要了解有关 TCP 同时打开连接的信息,请阅读 here. To learn about NAT filtering behavior see this 。
对于 Linux、Windows OS 这样的任务存在哪些软件库?
RFC 中是否存在人们应该如何做的一些信息?
我很感兴趣如何为我的 C++ 项目创建功能,如该软件中所示:https://secure.logmein.com/ru/products/hamachi/download.aspx
没有太大区别如果你想通过TURN中继服务器建立连接。唯一的区别是 TCP 和 UDP 创建连接的方式不同。
如果要建立P2P连接,有一些很大的不同
如果您在同一个网络中(在同一个 NAT 后面): 在 UDP 中,您向您的对等候选人发送一个 stun 绑定请求,然后如果您收到回复,那么您就知道了你已连接。在 TCP 中,您必须在一侧创建一个主动套接字,在另一侧创建一个被动套接字。然后从主动套接字发送syn并从被动套接字接收它,然后将syn ack发送到主动套接字。然后活动套接字发送一个ack并建立连接。
如果您在不同的网络中(在不同的 NAT 后面): 您必须使用 TCP 打洞技术来建立连接。因为如果之前没有数据包发送到 syn 来自的地址,您的 NAT 将不允许 TCP syn 数据包通过。
TCP打孔详解:
您必须使用 TCP 同时打开套接字。该套接字以主动和被动模式运行。两端都需要了解对方的隐私和 public IP:Port。 TCP 同时打开将发生如下情况:
Peer A 不断向 Peer B 发送 SYN Peer B 不断向 Peer 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,连接建立。
来自 WIKI.
还要了解有关 TCP 同时打开连接的信息,请阅读 here. To learn about NAT filtering behavior see this