【发布时间】:2019-04-16 22:26:12
【问题描述】:
所以我正在编写一个 P2P 多人游戏。服务器与每个玩家建立连接(UDP),然后让玩家直接相互连接(使用 UDP Holepunching 技术)。
然后我在我父母家进行了测试,然后就停止了工作。
原因是我父母的路由器不兼容 IPv6。
问题
是否可以在具有不同 ip 协议的用户之间进行 UDP Holepunching?
又名
- 用户 A: 在具有 IPv4 地址的路由器后面(无法将 UDP 消息发送到 IPv6)。
- 用户 B: 有 IPv6 地址。可以向 IPv4 和 IPv6 地址发送 UDP 消息。
或者这种设置注定要失败?
【问题讨论】:
-
IPv4 和 IPv6 是完全独立的、不兼容的协议。主机可以运行双栈(IPv4 和 IPv6),但 IPv4 和 IPv6 不能直接通信。
-
@RonMaupin - 是的,我明白这一点。我的手机似乎同时具有 IPv4 地址和 IPv6 地址(因为服务器可以接受来自任一协议的连接)。但是我的Mac在这个路由器下只有一个IPv4地址,无法发送UDP数据报到IPv6地址。
-
"我的 Mac 在这个路由器下只有一个 IPv4 地址,无法将 UDP 数据报发送到 IPv6 地址。" 那是正确的。您将需要其他可以翻译的东西(杂物),但仅 IPv4 的设备无法直接与仅 IPv6 的设备通信,反之亦然。我们已经接近 2018 年底,设备应该是双栈的以使用任一协议。
-
@RonMaupin - 感谢您的反馈。互联网上缺乏有关 IPv4/IPv6 UDP Holepunching 的信息并不是一个好兆头。我还没有找到任何好的资源。
-
@RonMaupin - 我已经隔离了问题的根源。我的手机(游戏客户端)同时具有 IPv6 和 IPv4 地址(由手机提供商提供)。当我向 IPv4 地址发送 udp 数据包时,单元提供商充当路由器并为我提供端口。但是,与普通路由器不同,它会在我将 udp 数据包发送到不同的 IPv4 地址时随机更改端口。我通过运行 2 个服务器并连接到这两个服务器发现了这一点,IPv4 地址是相同的,但是端口会发生变化(即使我的本地 udp 端口对于两条消息都是相同的)。现在需要一起解决问题。