很多游戏机 (Switch/3ds/PS4) 是否没有公网 ip 无法联机,原因是什么?

2017-10-17 17:59:44 +08:00
 ChristopherWu

为什么需要公网 IP 呢? 理论上来说,就算是内网 ip,经过 nat 转换,不也是公网 ip 吗? 你有什么解决方法呢?

11431 次点击
所在节点    程序员
33 条回复
takanasi
2017-10-17 18:01:00 +08:00
头一次听说
googlebot
2017-10-17 18:06:10 +08:00
bt 下载一样,nat 别人无法给你传数据,
ChristopherWu
2017-10-17 18:07:35 +08:00
@googlebot 知道的只是别人的内网 ip,而不是经过 nat 出来的公网 ip ?
nekoyaki
2017-10-17 18:10:40 +08:00
switch 目前我知道的游戏里,马车和 splatoon 都是 udp p2p 方式联机的,没公网 ip 也可以连,但是需要至少是端口受限锥形 NAT。
参考资料: http://strawhatfy.github.io/2015/08/03/nat-napt/
一般二级运营商是对称 NAT 类型( Symmetric NAT ),因此无法联机。一级运营商一般不会这么搞,这也就容易给人一种“没公网 IP 联不了机”的错觉。
nekoyaki
2017-10-17 18:15:27 +08:00
对了,switch 能直接在网络选项里看到 NAT type,如果有公网 IP 或者完全锥形 NAT 对应的是 A,端口受限或者 IP 锥形 NAT 对应的可能是 B 或者 C。再往下我没成功联机过,比如长宽的对称 NAT 我是 F 或者 E,不知道是按什么标准判断的。
3DS 不像 switch,没有相关的菜单和说明,但我估计和 switch 应该是相同的。
ChristopherWu
2017-10-17 18:21:00 +08:00
@nekoyaki 已经铜币,感谢详细回答,学习了。
https://www.zhihu.com/question/38729355
我在上面链接里看了下几种 NAT 类型,我是光纤对应对称型 NAT, 可以理解。
》对于对等型 NAT,同一内网主机同一端口号,每一次与不同的外网主机通讯,就重新分配另一个端口号
就算是这样, 也不会导致联机问题啊?每次跟别人联机虽然端口不一样,但是走公网 ip,一样可以转发回来。我还是不理解~
stanjia
2017-10-17 18:22:05 +08:00
因为 PS 3ds 联机游戏是用户和用户之前对连 ,所以至少要有一个做为服务器的 PS 或 3ds 主机有公网 IP 且端口被映射出来

不像 WOW, WOW 是用户和网易连接。 网易有公网 IP 和端口映射, 所以所有人都可不必有公网 IP
ChristopherWu
2017-10-17 18:24:57 +08:00
@stanjia 如果是游戏商联机是直接粗暴的内网对内网,而不是公网对公网,那可以理解。 所以他们就是这样做?为什么不公网对公网?
nekoyaki
2017-10-17 18:26:12 +08:00
@ChristopherWu
光纤不一定是对称型 NAT,其实这个主要是看运营商,会不会把你“发往不同 IP 的包,经过不同的公网 IP 路由出去”。如果会,就是对称 NAT,在 switch 和 3ds 的场景下就很可能无法联机。
如果你本来就能联机,你自己在一级运营商的光猫后头架一个路由器,应该也是可以联机的(未证实,但多一层 NAT 也许网络会不稳定)
jasontse
2017-10-17 18:29:04 +08:00
我也是不懂这些平台为什么没有服务器
ChristopherWu
2017-10-17 18:31:02 +08:00
@nekoyaki 已经在光猫后加了路由器,机器连 wifi,不行。
》发往不同 IP 的包,经过不同的公网 IP 路由出去
就算这样,我跟对方连时,对方是固定的公网 ip,我也会有固定的公网 ip 路由给他呀?
raysonx
2017-10-17 18:33:25 +08:00
因为很多游戏需要用户与用户之间建立 P2P 连接。而 NAT 下的用户使用的是内网 IP,不能接受入站连接。
NAT 后的公网 IP 不是你一个人享有的,而是和很多用户共享。向 NAT 设备的公网 IP 主动发起连接往往会被无情地拒绝。
虽然业界研究出一些 NAT 打洞技术来绕过这个限制,而在某些 NAT 类型(比如对称 NAT )下或者多层 NAT 下,打洞成功率非常低。
如果不需要用户间建立 P2P 连接,而是提供一台有公网 IP 的中心服务器进行数据中转,则不需要考虑 NAT 的问题。然而,这需要成本。
nekoyaki
2017-10-17 18:35:19 +08:00
@ChristopherWu
我的意思是,如果你本来能联机,即使加一层路由器 NAT,应该也能连,所以和运营商给不给公网 IP 不是完全强相关。如果你现在已经是对称 NAT,那肯定不行。
运营商路由 udp 的规则也许和 tcp 不一样吧,对称 NAT 的必须得紧接着发出去的 IP 和端口去回,可能二级运营商设置了什么实效性或者别的什么规则影响了。
raysonx
2017-10-17 18:38:07 +08:00
举个不太恰当的例子,内网的机器就像公司里的内线电话。
员工使用自己的分机都可以向外拨号,但接听方通过来电显示看到的号码都是公司总机的号码。回拨的话会打到公司的总机,而不是员工的分机。
RqPS6rhmP3Nyn3Tm
2017-10-17 18:41:04 +08:00
@nekoyaki 你的回复很有价值,之前我没有往这方面思考过。
有一个问题,是什么使得任天堂采用 p2p 作为联机使用?一般的网游都是客户端和服务端通过 udp 连接,p2p 的意义是什么?
b821025551b
2017-10-17 18:42:28 +08:00
@nekoyaki #13 PS4 上的地狱老司机,有段时间死活连不上,后来破了一下光猫开启 uPnP,神奇的连上了。
nekoyaki
2017-10-17 18:44:23 +08:00
@BXIA
我个人觉得,最大的因素可能是日厂没有太多在高并发下还能抗住延迟的经验。。。
stanjia
2017-10-17 18:50:23 +08:00
@ChristopherWu
e... 简单的讲, 就是互链一定要有一个在公网。 2 个都在内网的话, 是不行的。

你在内网能访问 V2EX 是因为 V2EX 有公网 IP 和端口。

你玩 WOW 和你的朋友, 是因为 WOW 有公网 IP 你们都联到 WOW 的公网服务器上进行游玩, 相应的你要 交钱。 因为公网服务器是要钱维护的。


你玩 PS4 和 你的朋友联机, 是没有一个像 WOW 那样的服务器, 你和你朋友联机时,PS4 会协商谁做主机, 一般就是有公网 IP 和端口的做主机, 然后所有人链接到这个人的 PS4 一起游玩。
RqPS6rhmP3Nyn3Tm
2017-10-17 18:57:12 +08:00
@nekoyaki ……有理有据,令人信服
nekoyaki
2017-10-17 18:58:08 +08:00
@stanjia
PS4 没有用 UDP 打洞吗?我觉得不至于这么蠢吧。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/398406

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX