Come far funzionare in modo affidabile un gioco multiplayer dietro NAT?


20

Anche i giochi che sono client / server al 100% a volte hanno problemi quando il client è protetto da NAT. I giochi Peee-peer sono ancora più grandi. Alcuni giochi devono utilizzare più trasporti (come UDP e TCP) o connessioni multiple (come una diversa porta UDP per la voce).

Quali sono alcuni modi per assicurarsi che un gioco funzioni in modo affidabile quando si esegue dietro un router NAT?

  • Peer-Peer: non esiste un server centralizzato. Il giocatore A inizia una partita e il giocatore B vuole unirsi
  • Client-Server: un server centralizzato su un indirizzo ben noto (nome host) accetta tutte le connessioni in entrata. Ogni client comunica solo con quel server.
  • Combo: dove il server è solo matchmaking, ma gli aggiornamenti di gioco sono peer-peer. Peer diversi possono vedere ogni giocatore con un IP / porta diversi potenzialmente (ad esempio alcuni client sono dietro lo stesso NAT e alcuni si trovano su un router diverso)

Risposte:


9

La tecnica più comunemente usata viene definita punch-through NAT. Ecco un'introduzione decente: http://www.mindcontrol.org/~hplus/nat-punch.html

Esiste un progetto OSS almeno per UDP: http://udt.sourceforge.net/index.html

RakNet supporta anche il punch-through, credo. È commerciale, ma ha una licenza "Indie" gratuita. Vedi qui: http://www.jenkinssoftware.com/

Cercare su Google "Punch NAT" ti darà molto più materiale di lettura


1
So che questa è una domanda e una risposta molto vecchia, ma se qualcuno la legge, RakNet viene acquisita da OculusVR e ora open-source con licenza BSD a 2 clausole. github.com/OculusVR/RakNet
— Quad

9
  • Non fare in modo che un client informi il server o il peer del proprio indirizzo. In altre parole, non incorporare l'IP del client A in un pacchetto di gioco e fare in modo che il client B o il server rispondano a quell'indirizzo. Rispondi sempre all'indirizzo / alla porta da cui proviene il messaggio.

  • Riduci a icona le diverse porte UDP o TCP utilizzate per il gioco. Ciò semplifica l'impostazione delle regole NAT.

  • Consenti all'utente di sovrascrivere la porta predefinita utilizzata nel gioco. In questo modo è possibile ospitare più server dietro lo stesso NAT.

  • Documenta le porte e tutte le regole che seguono nella documentazione del tuo gioco (grazie per quello Zorba). In Descent 3 sono arrivato al punto di creare un'applicazione di test stand-alone che ti avrebbe aiutato a risolvere il router o la configurazione NAT inviando pacchetti a un server di test.

7
Oltre a questa risposta altrimenti buona, includi una nota delle porte del gioco nella documentazione del gioco . È incredibile quanti giochi non lo facciano: le persone sradicano manualmente le porte con "netstat" e sbagliano la metà.
— Zorba THut,

Con UDP, non sai davvero da dove provenga il messaggio. Tutto può essere scritto nell'indirizzo di ritorno.
— MickLH,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.