天天看點

從聯機遊戲學習NAT類型

作者:匪匪無敵

聯機遊戲模式

聯機遊戲模式一般有server-based模式和P2P模式,它們之間有一些差別,主要包括以下幾點:

  1. 資料傳輸方式:在server-based模式中,遊戲資料是通過遊戲伺服器傳輸的,玩家之間的資料交換都是通過遊戲伺服器來實作的。而在P2P模式中,玩家之間的資料交換是直接的,不需要經過遊戲伺服器。
  2. 穩定性和延遲:由于在server-based模式中,所有的資料傳輸都需要經過遊戲伺服器,是以穩定性和延遲可能會受到伺服器的影響。而在P2P模式中,玩家之間的資料交換直接,穩定性和延遲可能更好,但是需要確定網絡環境和裝置配置等方面的相容性和穩定性。
  3. 安全性和防作弊:在server-based模式中,遊戲伺服器可以對遊戲進行更加嚴格的管理和監控,以保障遊戲的安全性和防作弊。而在P2P模式中,玩家之間的資料交換是直接的,可能更容易被攻擊或作弊。

server-based模式和P2P模式并非互相排斥的,實際上很多聯機遊戲都是采用了這兩種模式的混合模式,例如遊戲中使用伺服器進行比對和部分資料傳輸,同時使用P2P模式進行玩家之間的實時資料傳輸。

從聯機遊戲學習NAT類型

Server-base 簡易圖

從聯機遊戲學習NAT類型

P2P連接配接遊戲簡易圖

簡言之:server-based模式是一(Server)對多(Player)的關系,通常為TCP連結,P2P模式時點(Player)對點(Player)的關系,通常為UDP連結。

聯機遊戲協定

很多遊戲都是采用了TCP和UDP混合的方式來實作聯網,例如使用TCP傳輸遊戲資料和指令,使用UDP傳輸實時的遊戲操作等。一般來說:

  1. TCP的使用場景:
  • 遊戲大廳、比對等需要頻繁通信的場景。TCP具有可靠性強、傳輸資料不丢失和不重複等特點,适合用于頻繁通信的場景,例如遊戲大廳、比對、聊天室等。
  • 需要確定資料傳輸正确性的場景。TCP具有可靠性強、流量控制和擁塞控制等特點,适合用于需要確定資料傳輸正确性的場景,例如上傳和下載下傳遊戲資料、儲存遊戲進度等。
  • 資料量較小的場景。TCP的頭部相對較大,傳輸效率較低,适合用于資料量較小的場景,例如發送指令、請求資料等。
  1. UDP的使用場景:
  • 實時性要求高的場景。UDP具有傳輸速度快、實時性高的特點,适合用于實時性要求高的場景,例如線上遊戲中的移動、射擊等操作。
  • 大量資料傳輸的場景。UDP不具有TCP的流量控制和擁塞控制等特點,但具有傳輸效率高的優勢,适合用于大量資料傳輸的場景,例如遊戲中的實時音視訊傳輸、戰鬥畫面渲染等。
  • 一些非關鍵性資料傳輸的場景。UDP不具有可靠性強、資料不丢失和不重複等特點,适合用于一些非關鍵性資料傳輸的場景,例如遊戲中的統計資料、廣告等。

通常來說,TCP一般是Server-based,隻要官服夠強,你就不會有不好的體驗。影響聯機體驗的是UDP模式下P2P連接配接。是以有時候你會覺得,比對非常快,但遊戲卡的一P,或者遊戲流暢度還不錯,但是存檔就上傳不上去。

由于IP的稀有性,不可能每個人都有獨立IP,一般來說,我們ipv4接入點上網都是經過NAT轉換的,減少了IP的使用,同時增加了安全性(相對)。上面P2P連接配接示意圖就變成了下面:

從聯機遊戲學習NAT類型

NAT 轉換後,不同的Player無法直接連接配接

玩家對玩家無法互相發現,導緻連接配接緩慢甚至失敗。

NAT類型對聯機品質的影響

NAT類型是影響聯機品質的一個重要因素。不同類型的NAT對聯機品質産生的影響也不同。

  • NAT1(全錐形NAT):聯機品質較好,可以實作快速的P2P連接配接和資料傳輸。上圖
  • NAT2(可穿透NAT):聯機品質較好,可以實作P2P連接配接和資料傳輸,但連接配接速度和穩定性可能受到一定的影響。
  • NAT3(完全對稱型NAT):聯機品質較差,無法實作P2P連接配接和資料傳輸。在NAT3網絡環境下,需要使用中繼伺服器等額外的技術手段來建立連接配接。

在遊戲中進行P2P聯機對戰時,通常會使用NAT類型為NAT2的網絡環境,因為NAT2類型的限制比較少,通常可以讓遊戲玩家之間進行P2P通信,而無需使用中繼伺服器或其他技術。

NAT3類型的限制較多,對于P2P通信有一定的限制,需要使用中繼伺服器或其他技術來進行穿透,是以在遊戲聯機對戰中使用NAT3類型的網絡環境可能會導緻連接配接速度變慢或連接配接不穩定的問題。

還有個NAT4類型,基本與P2P遊戲和小JJ無緣了。那麼這幾個NAT類型有什麼差別呢?

從聯機遊戲學習NAT類型

Oh my god

NAT,NAT2,NAT3,NAT4 的差別

  • NAT(Open):這種NAT類型也被稱為全錐形NAT(Full Cone NAT),這種NAT類型将内部網絡的IP位址映射到一個或多個公共IP位址上,并允許内部網絡中的裝置通路網際網路。這種NAT類型比較簡單,沒有太多的限制,是以通常也被稱為"開放型NAT"。
  • NAT2(Moderate):這種NAT類型也叫限制錐形NAT(Restricted Cone NAT)和NAT類似,這種NAT類型會将所有的入站資料包都映射到同一個内部位址和端口上,并将發送方的位址和端口号記錄下來。但是,隻有在先前已經向該位址和端口發送過資料包時,才能将資料包轉發到該位址和端口上。這種NAT類型通常可以讓使用者進行基本的P2P通信。。
  • NAT3(Strict):這種NAT類型也被稱為完全對稱型NAT(Symmetric NAT),它會限制入站資料流,進而使得兩個在不同NAT後面的裝置無法直接通信。為了解決這個問題,需要使用中繼伺服器或其他技術來進行穿透。
  • NAT4:這種NAT類型也被稱為端口限制錐形NAT(Port Restricted Cone NAT),它會限制入站資料包必須來自于之前已經向該位址和端口發送過資料包的IP位址和端口号。這種NAT類型對P2P通信有一定限制。

通常來說,家用寬帶是NAT3模式。使用動态獨立IP一般是NAT1(Open),可以打電話給營運商申請。

NAT2可以通過打洞實作有限的P2P,遊戲聯機體驗會收到影響,但是NAT3,在進行P2P遊戲的時候,基本連不上,一般來說,需要上加速器才能獲的良好效果。

有了動态獨立IP,還是NAT2或者NAT3?

在申請完獨立IP之後,NAT類型還是2或者3。原因是路由器,一般來說,使用的路由器撥号,你的路由器是NAT1,但是路由器後邊就變成了NAT2。這時候,就需要做端口映射,把路由器上的端口直接映射到PS或者Xbox上,實作NAT1。

主要方案有三種:

  1. UPnP和NAT-PMP,都是用于網絡裝置之間的端口映射的協定,用于幫助應用程式在NAT裝置之間穿透,實作P2P連接配接和資料傳輸,他們的差別是:
  • 标準不同:UPnP是一種開放标準,由UPnP論壇制定,而NAT-PMP是蘋果公司開發的一種專有協定。
  • 平台支援不同:UPnP協定被廣泛支援,包括Windows、Linux、macOS等不同平台,而NAT-PMP隻被蘋果公司的作業系統所支援。
  • 傳輸方式不同:UPnP使用SOAP(簡單對象通路協定)和HTTP(超文本傳輸協定)進行通信,而NAT-PMP使用UDP協定進行通信。
  • 端口映射方式不同:UPnP使用動态端口映射方式,即當應用程式需要使用某個端口時,會通過UPnP協定向NAT裝置請求一個端口映射,使用完成後會自動釋放端口映射。而NAT-PMP使用靜态端口映射方式,即應用程式需要使用某個端口時,需要事先在NAT裝置上進行手動配置。

需要注意的是,這兩種方法需要遊戲軟體本身的支援,大部分聯機遊戲都内置了,這就意味着即使是NAT2也能成功聯網。

開啟方法以華碩路由器為例:

從聯機遊戲學習NAT類型

NAT類型選擇全錐形,開啟UPnP

  1. 手動映射基本用不到,但是在PlayStation串流的時候,如果你路由器不支援UPnP可以使用。因為不同的遊戲需要的端口是不一樣的。
  2. 路由器進階功能,這裡還是以華碩路由器為例,他内置了很多遊戲所需要的端口映射,等于是把手動映射做一個資料庫,當檢測到不同host時候,映射到不同的端口,這樣即使是遊戲不支援UPnP也可以NAT2類型。
從聯機遊戲學習NAT類型

華碩NAT映射

如果您喜歡這篇文章,麻煩點個贊。挖個坑,下次可以聊聊怎麼使用Tailscale或者headscale突破NAT2或者NAT3的限制,實作遠端開發Android。