很多遊戲機(Switch/3ds/PS4)是否沒有公網ip無法聯機,原因是什麼?
為什麼需要公網 IP 呢? 理論上來說,就算是內網 ip,經過 nat 轉換,不也是公網 ip 嗎?
這些遊戲機的聯網模式一般都是P2P拓撲架構,遊戲進程不由伺服器負責,而是各玩家之間自主協商一個主機。伺服器只負責登錄、搜人配對、玩家數據等等這種功能
你能上網,就代表有一個公網IP,但你能上網並不代表網能上你,你沒有固定獨享的公網IP和埠號,遠端發起的通信無法直接到達你這裡,玩不了。
第二個問題就是NAT防火牆問題,很多NAT網關/防火牆的策略是有埠和地址匹配的,你如果用第三方伺服器進行NAT打洞,但最終通信的雙方IP埠和打洞伺服器當然不一樣,於是白打。
如果你的網路設備分配到了公網IP,那麼一切都好說,埠映射可以用網關上的uPnP或者NAT-PMP自己申請,或者靜態手動配置,實在不行把你這垃圾路由扔了買個高級點的。如果你沒有公網IP,但你上游網關並沒有那麼嚴格的防火牆,那麼靠打洞伺服器,打洞後確認你NAT狀態是開放,那也可以玩。最瞎的就是有嚴格防火牆,打洞後也不允許兩個洞直連,那除非有專門的伺服器運行聯網遊戲進程,或者這局遊戲里至少有一個開放狀態的玩家作主機,其他的情況都沒法玩
以前玩magicka需要直連創建遊戲的玩家的時候,都也只能通過埠映射來解決。我猜在這種需求下面,遊戲機也是一樣。
能進行NAT轉換的前提是,你擁有公網IP。如果這個聯機是需要連接一個官方伺服器的話,沒有公網IP意味著你根本無法與伺服器連接。
第一,你沒理解nat的實質。現有nat大多為napt。網路遊戲程序通信帶埠號是不可避免的
第二,在我看來,不是主機廠商不能做,資本逐利讓他們不願花代價去做,哪怕所有用戶都一天到晚喊著聯網不順很煩。
我是這個問題的提出者,感謝大家的一些回答,以及 v 站的幫助,終於解決了我的疑惑。
我的疑惑是, 我的機器去連 B 的機器, 先任天堂的伺服器,任天堂記住我的出口公網 ip 與埠是什麼,然後再將數據轉發給 B的公網(B 選擇多人聯機時就已經與任天堂伺服器通信,獲知 B 的公網 ip),再經過 B 的 NAT 轉成內網,終究我與 B 是可以正常通信的。
然而,任天堂並沒有做數據轉發的功能。。他只是負責記錄你與 B 的公網 IP 是多少,然後讓你與 B 雙方建立連接。
當你與 B 嘗試建立連接時, NAT 會發現,路由表並沒有記錄你的 IP,自然無法幫你幫你找到對應的 B 的內網地址,無法轉發數據。
以上, 歡迎交流。
兩個沒有公網 IP 且均在對稱 NAT(NAT 類型 2)下的設備是無法聯機的。除此之外都可以。
首先,任何設備能訪問互聯網,那必定是有公網IP的,無論這個IP是動態還是靜態它都是存在的,也正是ISP提供給你的。在訪問互聯網的過程中,路由器(或防火牆)會通過NAT把設備的本地地址(比如192.168.1.100)轉譯成公網IP。
其次,設備在訪問互聯網的時候大多數情況都是由設備發起網路連接請求,所以ISP是不會去封堵合法的網路訪問的,除非訪問例如谷歌之類的。一旦建立連接,數據包inbound和outbound就不會受阻了。
最後,只有一種情況,那就是由外部設備直接通過公網IP穿透防火牆訪問內網設備,這是不一定可行的。即便你在防火牆上做了埠轉發規則,如果公網IP的埠被ISP封堵,那就無法建立任何連接了。
推薦用ZeroTier建立個虛擬區域網來進行聯機操作。
推薦閱讀:
※如何看待ps4吧發的中國2017年5月遊戲榜單?
※如何評價最終幻想15的國行版同步發售?
※E3 2015最終幻想7的 」真正」 重製版,各位老玩家什麼感受?
TAG:任天堂Nintendo | 任天堂3DS | 計算機網路 | PlayStation4 | 任天堂Switch |