gpt4 book ai didi

tcp - 为 NAT 后面的客户端创建 Tcp 连接

转载 作者:可可西里 更新时间:2023-11-01 02:44:53 25 4
gpt4 key购买 nike

针对 Linux、Windows 操作系统的此类任务存在哪些软件库?

RFC 中是否存在人们应该如何做的一些信息?

我很感兴趣如何为我的 C++ 项目创建功能,如在该软件中所示:https://secure.logmein.com/ru/products/hamachi/download.aspx

最佳答案

如果您想通过 TURN 中继服务器建立连接,则没有太大区别。唯一的区别是 TCP 和 UDP 创建连接的方式不同。

如果要进行 P2P 连接,有一些很大的不同

如果您在同一个网络中(在同一个 NAT 后面): 在 UDP 中,您向您的对等候选人发送一个 stun 绑定(bind)请求,然后如果您收到回复,那么您就知道您已连接。在 TCP 中,您必须在一侧创建一个主动套接字,在另一侧创建一个被动套接字。然后从主动套接字发送syn并从被动套接字接收它,然后将syn ack发送到主动套接字。然后事件套接字发送一个ack并建立连接。

如果您在不同的网络中(在不同的 NAT 后面): 您必须使用 TCP 打洞技术来建立连接。因为如果之前没有数据包发送到 syn 来自的地址,您的 NAT 将不允许 TCP syn 数据包通过。

TCP打洞详解:

您必须使用 TCP 同时打开套接字。该套接字以主动和被动模式运行。两端都需要知道对方的私有(private)和公共(public) IP:端口。TCP 同时打开将发生如下情况:

  1. 对等点 A 不断向对等点 B 发送 SYNPeer B 不断向 Peer 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 .

还要了解 TCP 同时打开连接,请阅读 here .要了解 NAT 过滤行为,请参阅此 answer .

关于tcp - 为 NAT 后面的客户端创建 Tcp 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31954219/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com