¿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 ejemplo.

El juego StarCraft (no StarCraft 2) admite el juego en línea. Una persona anfitriona, 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 eso?

Considere el siguiente escenario:

  • Tengo 3 en lugar de 3. Tenga en cuenta que, para que las personas puedan unirse, mi enrutador debe configurarse para enviar hacia adelante 6112, TCP y UDP (consulte Soporte de Blizzard ).
  • Cinco personas se unen. Todos (yo mismo incluido) está detrás de un enrutador. Comienzo el juego.
  • A los tres minutos de juego, unos veinte fanáticos entran a mi base. Nadie me ayuda.
  • Se eliminó mi base, por lo que me voy (el juego no te da una opción).
  • El juego continúa sin el anfitrión (al equipo local le quedan dos jugadores).

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

Si entiendo correctamente: si dos programas quieren hablar 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 conexión solicitud en ese puerto. No pueden simplemente comenzar a enviar paquetes entre ellos (y ni siquiera sé cómo lo harían, si ambos están detrás de los enrutadores).

Alguien que organiza un juego es un servidor, mientras que aquellos 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 a comunicarse los clientes 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 de juegos pase a través de 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 necesitarían portor 6112?

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

    
pregunta Joey Adams 26.07.2011 - 05:25

2 respuestas

20

Eso suena como perforación de agujeros UDP

  

Sean A y B 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 dirección IP accesible globalmente conocida.

     
  1. A y B comienzan 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.   
  3. S transmite estos números de puerto a A y B
  4.   
  5. A y B se comunican con los dispositivos NAT de los demás directamente en los puertos traducidos; los dispositivos NAT utilizan los estados de traducción creados anteriormente y envían los paquetes a A y B
  6.   

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 a ti por primera vez.

    
respondido por el duck9 26.07.2011 - 06:03
2

Si dos programas quieren comunicarse entre sí, uno no necesita ser un servidor y el otro un cliente. Ese es un modelo de red, 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 aspectos internos de las redes multijugador de Starcraft, pero creo que lo más probable es que logre lo que describió mediante el uso de un modelo de igual a igual.

    
respondido por el Mason Wheeler 26.07.2011 - 05:34

Lea otras preguntas en las etiquetas