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.