Jak sprawić, by gra wieloosobowa działała niezawodnie za NAT?

20

Nawet gry, które są w 100% klientem / serwerem, czasami mają problemy, gdy klient stoi za NAT. Gry Peee-peer to jeszcze większe problemy. Niektóre gry wymagają korzystania z wielu transportów (takich jak UDP i TCP) lub wielu połączeń (takich jak inny port UDP dla głosu).

Jakie są sposoby, aby upewnić się, że gra działa niezawodnie, gdy działa za routerem NAT?

  • Peer-Peer: Nie istnieje scentralizowany serwer. Gracz A rozpoczyna grę, a gracz B chce dołączyć
  • Klient-Serwer: scentralizowany serwer pod dobrze znanym adresem (nazwa hosta) akceptuje wszystkie połączenia przychodzące. Każdy klient komunikuje się tylko z tym serwerem.
  • Kombinacja: tam, gdzie serwer tylko dobiera graczy, ale aktualizacje gier są równorzędne. Różni partnerzy mogą zobaczyć każdego gracza z innym adresem IP / portem potencjalnie (np. Niektórzy klienci stoją za tym samym NAT, a niektórzy na innym routerze)
kevin42
źródło

Odpowiedzi:

9

Najczęściej stosowaną technikę określa się jako przebijanie NAT. Oto przyzwoite wprowadzenie: http://www.mindcontrol.org/~hplus/nat-punch.html

Istnieje projekt OSS przynajmniej dla UDP: http://udt.sourceforge.net/index.html

Uważam, że RakNet obsługuje również przebijanie. Jest komercyjny, ale ma bezpłatną licencję „Indie”. Zobacz tutaj: http://www.jenkinssoftware.com/

Po wyszukaniu „ciosu NAT” dostaniesz o wiele więcej materiałów do czytania

Rachel Blum
źródło
1
Wiem, że to naprawdę stare pytanie i odpowiedź, ale jeśli ktoś to przeczyta, RakNet zostaje przejęty przez OculusVR i jest teraz open-source z 2-klauzulową licencją BSD. github.com/OculusVR/RakNet
Quad
9
  • Nie pozwól, aby klient poinformował serwer lub peer o swoim adresie. Innymi słowy, nie należy osadzać adresu IP klienta A w pakiecie gry, a klient B lub serwer odpowiada na ten adres. Zawsze odpowiadaj na adres / port, z którego pochodzi wiadomość.

  • Zminimalizuj różne porty UDP lub TCP używane w grze. Ułatwia to konfigurowanie reguł NAT.

  • Pozwól użytkownikowi zastąpić domyślny port używany w grze. W ten sposób kilka serwerów może być hostowanych za tym samym NAT.

  • Udokumentuj porty i wszelkie zasady, których przestrzegają w dokumentacji gry (dzięki za ten Zorba). W Descent 3 posunąłem się do stworzenia samodzielnej aplikacji testowej, która pomogłaby ci rozwiązać problemy z konfiguracją routera lub NAT, wysyłając pakiety na serwer testowy.
kevin42
źródło
7
Oprócz tej poza tym dobrej odpowiedzi, w dokumentacji gry należy uwzględnić porty gry . Zadziwiające, jak wiele gier tego nie robi - ludzie ręcznie usuwają porty za pomocą polecenia „netstat” i mylą połowę z nich.
ZorbaTHut,
Dzięki UDP tak naprawdę nie wiesz, skąd pochodzi wiadomość. W adresie zwrotnym można zapisać wszystko.
MickLH,
0

Wraz z innymi odpowiedziami użyj istniejącego koła: http://miniupnp.free.fr/ Ta biblioteka walczy z prawie wszystkimi problemami w formie funkcjonalnej, dając ci kontrolę nad tym, kiedy i jak uderzać i ciągnąć :)

odkrycie podkreślone
źródło