互联网上如何建立 p2p 连接

互联网上如何建立 p2p 连接

据说对等网络不是基于服务器的路由和数据处理网络,而只是使用服务器获取最新的节点地址(可能是它们的互联网 IP 地址),以便直接连接到其他节点,而无需中间服务器。所以我的问题是,计算机(节点)A 如何通过互联网与节点 B 建立连接。ISP 提供给我们的 IP 无效且无法访问。那么这个 p2p 如何在互联网上与这些无效的节点 IP 地址一起工作呢?

答案1

假设问题是关于家庭/住宅连接的:


事实上,大多数有线 ISP 都会向其客户提供一个可公开访问的 IPv4 地址。该地址分配给客户的家庭路由器,该路由器可以接收数据包并将其转发到客户指定的任何内部设备。(它已经必须这样做才能正确传递属于常规出站连接的入站回复 - 它会记住哪个连接的数据包需要发送到哪个内部主机。)

对于 P2P,a) 客户添加静态规则(“端口转发”,又名 DNAT),始终将指定 TCP/UDP 端口的数据包发送到其计算机(节点 A)。然后,其他节点可以简单地使用路由器的公共地址,它会将数据包内部转发到节点 A。

(程序甚至可以使用 NAT-PMP 和/或 UPnP IGD 自动添加“端口转发”规则。)

或者 b)程序可以使用各种“NAT穿越”/“打洞”机制,例如 STUN(使用“辅助”服务器进行初始握手)。这些机制通常涉及欺骗路由器的自动连接跟踪,使其看起来好像每个节点都在同一对端口上同时向外连接到另一个节点。


对于使用 CGNAT 和根本不向客户提供公共 IPv4 地址,选项 a) 通常不可行,选项 b) 有时有效,有时无效。据我所知,两个 CGNAT 节点通常无法直接通信。

(请注意,即使是 CGNAT 节点仍然可以与任何具有公共地址的节点建立传出连接,因此它们并非完全隔离。我的意思是,如果它们不能这样做,那么它们也无法访问网络/邮件/游戏服务器?)

但是,至少有一些 ISP 除了提供 CGNAT IPv4 服务外,还提供 IPv6 支持。通常,IPv6 会为每一个设备,因此当两个节点都支持 IPv6 时,它们可以直接使用彼此的公共 IPv6 地址。

(他们可能仍然需要打洞或手动路由器配置,但这是因为防火墙通常是碍事的,而不再是因为路由/寻址。

相关内容