¿Cómo continúa un juego en línea después de que el anfitrión se va?

12

Nota: Esta es una pregunta sobre redes, no juegos. Estoy usando StarCraft simplemente como un ejemplo.

El juego StarCraft (no StarCraft 2) admite el juego en línea. Una persona aloja y otras personas se unen. Si el anfitrión se va durante el juego, el juego puede continuar indefinidamente sin el anfitrión. ¿Cómo funciona?

Considere el siguiente escenario:

  • Tengo un 3 contra 3. Tenga en cuenta que, para que las personas puedan unirse, mi enrutador debe estar configurado para reenviar puertos 6112, TCP y UDP (consulte Soporte de Blizzard ).
  • Cinco personas se unen. Todos (incluido yo mismo) están detrás de un enrutador. Yo comienzo el juego.
  • Tres minutos después del juego, unos veinte fanáticos se vierten en mi base. Nadie me ayuda.
  • Mi base es eliminada, así que me voy (el juego no te da opción).
  • El juego continúa sin el anfitrión (el equipo local tiene dos jugadores restantes).

¿Cómo permanecen conectados los cinco clientes restantes (que no necesitaron reenviar 6112)?

Si entiendo correctamente: si dos programas quieren comunicarse entre sí, uno de ellos debe ser un "servidor" y escuchar las conexiones en un puerto, mientras que el otro debe ser un "cliente" e iniciar una solicitud de conexión en ese momento. Puerto. No pueden simplemente comenzar a enviarse paquetes entre sí (y ni siquiera sé cómo lo harían, si ambos están detrás de los enrutadores).

Alguien que aloja un juego es un servidor, mientras que los que se unen son clientes. Es fácil ver cómo los clientes pueden comenzar a comunicarse con el servidor. Lo que no entiendo es: ¿cómo comienzan los clientes a comunicarse entre sí sin pasar por el servidor? ¿El Protocolo de Internet permite que un servidor inicie conexiones entre clientes?

Es completamente posible que, en el caso de StarCraft, el tráfico del juego pase por los servidores de Battle.net. StarCraft mantiene una conexión con Battle.net durante los juegos (para mensajes de amigos, etc.). Sin embargo, dudo que el tráfico del juego lo atraviese, porque si lo hiciera, ¿por qué los hosts tendrían que reenviar el puerto 6112?

Mi pregunta es: ¿puede un servidor, con varios clientes conectados a él, iniciar conexiones entre ellos?

Joey Adams
fuente
2
Me gusta la referencia de Starcraft aquí ...
Jon
I host a 3 versus 3. Note that, for people to be able to join, my router has to be configured to port forward 6112, TCP and UDP (see Blizzard Support).Aparentemente esto es necesario para iniciar un juego para que los usuarios puedan encontrarte, pero no es necesario que permanezcas conectado.
JeffO
@Jeff O: los servidores de Battle.net mantienen una lista de juegos disponibles. Sin embargo, si el host no reenvía el puerto, simplemente se bloqueará cuando otros intenten unirse (creo).
Joey Adams

Respuestas:

20

Eso suena como perforar UDP

Deje que A y B sean los dos hosts, cada uno en su propia red privada; N1 y N2 son los dos dispositivos NAT; S es un servidor público con una conocida dirección IP globalmente accesible.

  1. A y B comienzan cada uno una conversación UDP con S; los dispositivos NAT N1 y N2 crean estados de traducción UDP y asignan números de puertos externos temporales
  2. S retransmite estos números de puerto a A y B
  3. A y B contactan los dispositivos NAT de los demás directamente en los puertos traducidos; los dispositivos NAT usan los estados de traducción creados previamente y envían los paquetes a A y B

En este ejemplo, eres S. Tus oponentes son A y B. Cuando te expulsan del juego, tus oponentes pueden continuar jugando porque habían negociado una conexión entre ellos cuando se conectaron por primera vez contigo.

pato9
fuente
Wow +1, no tenía idea de que NAT podría usarse así
TheLQ
El problema con NAT es que debe comenzar desde detrás del firewall. Por lo tanto, necesita al menos la computadora inicial para estar disponible públicamente o no hay nada a lo que conectarse.
2

Si dos programas quieren comunicarse entre sí, uno no necesita ser un servidor y el otro un cliente. Ese es un modelo de redes, pero no el único. Otro modelo muy común es el modelo peer-to-peer , donde todos son clientes y servidores y cualquiera puede hablar con cualquiera. No sé demasiado específicamente sobre los componentes internos de redes multijugador de Starcraft, pero supongo que lo más probable es que logre lo que usted describió al usar un modelo de igual a igual.

Mason Wheeler
fuente
Los modelos P2P aún requieren generalmente que los puertos sean reenviados por al menos una persona en cada par de pares para realizar la conexión inicial. Intente descargar un torrent con y sin puertos reenviados y vea la diferencia en la cantidad de conexiones.
Snorbuckle