【问题标题】:Peer to Peer Networking - with shared public IP and DHCP点对点网络 - 共享公共 IP 和 DHCP
【发布时间】:2022-11-23 09:07:05
【问题描述】:

我正在尝试设置对等网络并试图了解它是如何工作的。

通常在客户端到服务器连接中,我会连接到服务器 IP 和端口。在后台,它会创建一个绑定到本地 ip 本地端口的客户端套接字,并将数据包发送到路由器。然后路由器会将本地端口和本地套接字 NAT 到客户端公共 ip 和一个不同的公共客户端套接字,目标为服务器 IP 和端口。

当服务器响应时,路由器将公共客户端ip和公共客户端端口DENAT回本地ip和本地端口,数据包到达计算机。

在点对点网络中,我可能有对等点的公共 IP,但它被许多机器共享并且路由器还不允许连接,所以没有一个开放的端口我可以将数据发送到。

然后有两个对等点联系服务器的选项。这会在路由器上打开一个端口。然后对等点将数据包发送到彼此的客户端端口。

但是,通常路由器只会接受来自发出请求的同一 IP 的数据包,因此两个对等点不能重用服务器的连接。

在这种情况下,两个同行如何相互交谈?

【问题讨论】:

    标签: sockets p2p


    【解决方案1】:

    你自己说的:“对等点将数据包发送到彼此的客户端端口”。因此,路由器将“接受来自发出请求的同一 IP 的数据包”。

    比如说,Alice 在路由器 A 后面,Bob 在路由器 B 后面。
    了解了他们的公共端点from a server后,Alice 将向 Bob 的公共 IP 发送 UDP 数据包,Bob 将向 Alice 发送 UDP 数据包。
    看到 Alice 与 Bob 的 IP 对话后,路由器 A 将接受来自 Bob 的 UDP 数据包。
    看到 Bob 与 Alice 交谈后,路由器 B 也将接受来自她的 UDP 数据包。

    也就是说,一些初始数据包将被拒绝,因为来自蓝色,但在双方发起通信后,路由器将没有理由阻止随后的数据包。

    UDP 打洞的技巧似乎是让路由器为不同的 IP 重用相同的 NAT 隧道——这样服务器发现的端口与重用于直接通信的端口相同。
    我们可以从普通的 UDP 套接字(通过跳过connect 并使用sendto)与不同的 IP 进行对话,因此隧道套接字能够做同样的事情是合乎逻辑的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多