V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChristopherWu
V2EX  ›  程序员

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

  •  
  •   ChristopherWu · 2017-10-17 17:59:44 +08:00 · 11401 次点击
    这是一个创建于 2595 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    第 1 条附言  ·  2017-10-23 18:33:01 +08:00
    我是这个问题的提出者,感谢大家的一些回答,以及 v 站的帮助,终于解决了我的疑惑。

    我的疑惑是, 我的机器去连 B 的机器, 先任天堂的服务器,任天堂记住我的出口公网 ip 与端口是什么,然后再将数据转发给 B 的公网( B 选择多人联机时就已经与任天堂服务器通信,获知 B 的公网 ip ),再经过 B 的 NAT 转成内网,终究我与 B 是可以正常通信的。

    然而,任天堂并没有做数据转发的功能。。他只是负责记录你与 B 的公网 IP 是多少,然后让你与 B 双方建立连接。
    当你与 B 尝试建立连接时,NAT 会发现,路由表并没有记录你的 IP,自然无法帮你帮你找到对应的 B 的内网地址,无法转发数据。

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

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

    》很多游戏需要用户与用户之间建立 P2P 连接。而 NAT 下的用户使用的是内网 IP,不能接受入站连接。
    》 NAT 后的公网 IP 不是你一个人享有的,而是和很多用户共享。向 NAT 设备的公网 IP 主动发起连接往往会被无情地拒绝。

    这段话解决我的疑问了。
    总结来说,就是 游戏机之间是 IP 直连,理论上来说, 经过 NAT 转换的公网 ip 对公网 ip 是可以的。但是,现在运营商的策略是,向 NAT 设备的公网 IP 主动发起连接往往会被拒绝。
    ChristopherWu
        23
    ChristopherWu  
    OP
       2017-10-17 19:14:03 +08:00
    如果理解有误,还请指教。
    如果是以上的问题,那么让运营商允许外网发起连接到我的内网 ip,是否无需公网,问题就可以解决了?
    yexm0
        24
    yexm0  
       2017-10-17 19:36:20 +08:00 via iPhone
    放心,这是绝对不可能的啦。你凭什么让运营商帮你做 dmz 嘛
    zjqzxc
        25
    zjqzxc  
       2017-10-17 20:02:23 +08:00
    @BXIA 我觉得,更大的可能是:对于这些一次付费,又没有内购的游戏,游戏开发商只能收一次钱,而全球部署服务器在整个公司的生命周期里都需要持续付出成本,应该是觉得不划算。如果能按月收费,或者可以插广告,我相信他们也会部署官方游戏服务器的。(毕竟没有什么问题是钱解决不了的;如果解决不了,就再多加点)

    而现在这种模式下,只需要部署一台服务器,用来交换下玩家数据就行了,服务器开销会小得多。
    ChristopherWu
        26
    ChristopherWu  
    OP
       2017-10-17 20:07:00 +08:00
    @zjqzxc ps:任天堂的联网是做的很差, 没有语音, 没有对话功能,只有连上了就玩玩玩。。
    bianchensz
        27
    bianchensz  
       2017-10-17 22:00:04 +08:00
    @yexm0 还是有人能拿到公网 IP 只是越来越难了
    RqPS6rhmP3Nyn3Tm
        28
    RqPS6rhmP3Nyn3Tm  
       2017-10-17 22:50:28 +08:00 via iPhone
    @zjqzxc 我倒是觉得这个不会是主要原因。其他买断制的网游,比如守望先锋,采用的也是传统服务端。而且考虑到任天堂游戏非常贵(还不打折),可能还是技术上的考虑。
    之前 FF14 出了大面积的连接问题,想想日厂的运营能力还是比较落后的。
    raysonx
        29
    raysonx  
       2017-10-17 22:56:21 +08:00
    @ChristopherWu `让运营商允许外网发起连接到我的内网 ip`就是要让运营商帮你做 DMZ 或者映射一部分端口给你,然而这通常是不可能的。合同里面没有约定的事情你是不能指望运营商做的,他们才是大爷。
    coolcoffee
        30
    coolcoffee  
       2017-10-18 10:20:05 +08:00
    刚好最近有玩 PS4 的仁王联机, 但那破游戏的联机机制也有点迷,某些玩家之间能连上,某些玩家联机抛错就永远抛错。


    我猜测那游戏就是 P2P 联机的,游戏的主服务器只负责撮合玩家互相连接,然后数据都在玩家之间交换,不经过游戏服务器。 而玩家互相连接,至少要有一个人是公网 IP 充当服务器才能保证长链接不中断,两个人都是内网的话,除非运营商做静态路由,否则不可能直连通信。
    skylancer
        31
    skylancer  
       2017-10-18 12:16:24 +08:00
    @ChristopherWu 妈的这中文看的我蛋疼不已,是什么鬼,然后一看英文噢噢噢是这个啊..
    ChristopherWu
        32
    ChristopherWu  
    OP
       2017-10-18 14:04:06 +08:00
    @skylancer 不懂你说啥。。
    FeifeiJin
        33
    FeifeiJin  
       2017-10-18 17:28:15 +08:00
    长城宽带直接暴死了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2956 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:08 · PVG 08:08 · LAX 16:08 · JFK 19:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.