Como um jogo online continua depois que o host sai?

12

Nota: Esta é uma pergunta sobre rede, não sobre jogos. Estou usando o StarCraft apenas como exemplo.

O jogo StarCraft (não StarCraft 2) suporta jogo online. Uma pessoa hospeda e outras pessoas entram. Se o host sair durante o jogo, o jogo poderá continuar indefinidamente sem o host. Como isso funciona?

Considere o seguinte cenário:

  • Eu hospedo um 3 versus 3. Observe que, para que as pessoas possam participar, meu roteador precisa ser configurado para a porta 6112, TCP e UDP (consulte Suporte da Blizzard ).
  • Cinco pessoas se juntam. Todos (inclusive eu) estão atrás de um roteador. Eu começo o jogo.
  • Três minutos depois do jogo, cerca de vinte fanáticos caem na minha base. Ninguém me ajuda.
  • Minha base é eliminada, então eu deixo (o jogo não lhe dá uma escolha).
  • O jogo continua sem o anfitrião (a equipe da casa tem dois jogadores restantes).

Como os cinco clientes restantes (que não precisavam do 6112 encaminhado) permanecem conectados?

Se bem entendi: se dois programas querem conversar, um deles precisa ser um "servidor" e escutar as conexões em uma porta, enquanto o outro precisa ser um "cliente" e iniciar uma solicitação de conexão nesse porta. Eles não podem simplesmente começar a enviar pacotes um para o outro (e eu nem sei como eles fariam, se ambos estiverem atrás de roteadores).

Alguém que hospeda um jogo é um servidor, enquanto aqueles que se juntam a ele são clientes. É fácil ver como os clientes podem começar a se comunicar com o servidor. O que não entendo é: como os clientes começam a se comunicar sem passar pelo servidor? O Protocolo da Internet permite que um servidor inicie conexões entre clientes?

É perfeitamente possível que, no caso de StarCraft, o tráfego de jogos passe pelos servidores Battle.net. O StarCraft mantém uma conexão com o Battle.net durante os jogos (para mensagens de amigos etc.). No entanto, duvido que o tráfego do jogo passe por isso, porque se foi, por que os hosts precisariam portar 6112?

Minha pergunta é: um servidor, com vários clientes conectados a ele, pode iniciar conexões entre eles?

Joey Adams
fonte
2
Eu estou gostando da referência de Starcraft aqui ...
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, isso é necessário para iniciar um jogo para que os usuários possam encontrá-lo, mas não é necessário permanecer conectado.
26411 JeffO
@ Jeff O: Os servidores Battle.net mantêm uma lista dos jogos disponíveis. No entanto, se o host não encaminhar porta, ele simplesmente trava quando outros tentam entrar (eu acho).
Joey Adams

Respostas:

20

Isso soa como perfuração UDP

Sejam A e B os dois hosts, cada um em sua própria rede privada; N1 e N2 são os dois dispositivos NAT; S é um servidor público com um conhecido endereço IP alcançável globalmente.

  1. A e B iniciam uma conversa UDP com S; os dispositivos NAT N1 e N2 criam estados de conversão UDP e atribuem números de porta externos temporários
  2. S retransmite esses números de porta de volta para A e B
  3. A e B contactam os dispositivos NAT uns dos outros diretamente nas portas traduzidas; os dispositivos NAT usam os estados de conversão criados anteriormente e enviam os pacotes para A e B

Neste exemplo, você é S. Seus oponentes são A e B. Quando você é expulso do jogo, seus oponentes podem continuar jogando porque negociaram uma conexão entre si quando se conectaram a você pela primeira vez.

duck9
fonte
Uau +1, eu não tinha idéia NAT poderia ser usado como essa
TheLQ
O problema com os NAT é que você precisa começar por trás do firewall. Portanto, você precisa que pelo menos o computador inicial esteja disponível ao público ou não haja nada para se conectar.
2

Se dois programas querem se comunicar, um não precisa ser um servidor e o outro um cliente. Esse é um modelo de rede, mas não o único. Outro modelo muito comum é o modelo ponto a ponto , onde todos são clientes e servidores e qualquer um pode conversar com alguém. Não sei muito especificamente sobre as redes internas de rede multijogador de Starcraft, mas acho que ele provavelmente realiza o que você descreveu usando um modelo ponto a ponto.

Mason Wheeler
fonte
Os modelos P2P ainda geralmente exigem que as portas sejam encaminhadas por pelo menos uma pessoa em cada par de pares para fazer a conexão inicial. Tente baixar um torrent com e sem portas encaminhadas e veja a diferença no número de conexões.
Snorbuckle