Como os clientes de jogos sabem que um servidor está sendo executado em sua LAN?

18

Em muitos jogos multiplayer, há a opção para jogar na LAN. Minha pergunta, porém, é como um cliente sabe onde um servidor está na LAN?

As únicas maneiras em que consigo pensar

  1. Envie transmissões pelo endereço de transmissão. Isso tem a desvantagem de ser filtrado algumas vezes por roteadores ou switches em diferentes ambientes de rede.
  2. Tente se conectar a um servidor em todos os IPs da sua sub-rede. Isso tem a desvantagem de ser lento (especialmente se a rede usa 10.XXX.XXX.XXX para seus IPs) e um ataque de mini ddos, mas não será filtrado.

Como os jogos fazem isso especialmente em outros ambientes de rede?

TheLQ
fonte

Respostas:

32

Para jogos com LAN play, o padrão é que os clientes enviem pacotes de broadcast para descobrir servidores. (O cliente envia uma transmissão, o servidor envia uma resposta direta ao cliente)

Em geral, o cliente envia algo entre três e cinco mensagens de difusão, cada uma com um segundo de diferença, e então decide que não deve haver servidor se não receber resposta nesse período. O envio de vários pacotes torna a descoberta de serviços um pouco mais tolerante à perda de pacotes (embora isso seja bastante incomum nas LANs), e o tempo entre elas impede que eles interrompam demais o tráfego de rede.

Ninguém (que eu saiba) faz sua opção nº 2, porque isso prejudicará o desempenho da LAN (ou levará um bom tempo, se você escalonar as tentativas de conexão).

Mas, para lidar com casos em que a transmissão é filtrada pela LAN local (o que é bastante incomum, mas não inédito), a maioria dos jogos permite que os jogadores insiram diretamente um endereço IP ao qual se conectar. Isso permite que jogadores nesses tipos de situações se conectem a um servidor conhecido, mesmo que eles não possam transmitir para encontrá-lo automaticamente.

Para jogos pela Internet, os clientes enviarão uma solicitação direta a um meta servidor estático , que responde com os endereços das instâncias atuais conhecidas do servidor. Os servidores, da mesma forma, entram em contato com esse meta servidor para informá-los de sua própria localização, para que os clientes possam ser direcionados a eles. Devido às complexidades do NAT, essa abordagem geralmente não funciona para servidores hospedados dentro de uma LAN. É por isso que esse tipo de abordagem geralmente não é usado para jogos da LAN.

Nota lateral adicional: é prática comum para jogos na Internet entrar em contato com um servidor de ponto primeiro. O servidor de pontos informa ao jogo em que endereço ele pode encontrar o meta servidor, que informa onde os servidores podem ser encontrados. Servidores pontuais são frequentemente (embora certamente nem sempre) implementados como um servidor Web simples e são a única parte deste sistema com um endereço que é codificado no jogo. Isso permite que os desenvolvedores de jogos movam seu meta servidor de uma máquina para outra, conforme necessário, simplesmente atualizando o endereço retornado pelo servidor de ponto. Também pode ser usado para implementar uma forma simples de balanceamento de carga ou troca de região, solicitando que o servidor de ponto envie usuários para diferentes meta servidores com base na carga do servidor ou na proximidade geográfica.

Trevor Powell
fonte
2
+1 para você, senhor, isso também respondeu a algumas perguntas que eu tinha.
Raine
2
+1, Broadcast é o caminho a seguir, na verdade é o caminho certo para fazer o nº 2, hehe .. É para isso que serve a transmissão, entrando em contato com vários IPs para ver se algo está escutando.
James
Sim, o único problema com a transmissão é certas (grandes empresas, em particular) LANs que não propagam a transmissão entre todos os segmentos da LAN. No futuro, o multicast presumivelmente será a nova maneira de fazer isso e deverá funcionar automaticamente em todos os segmentos da LAN. Mas, no momento, o suporte adequado ao roteador para multicast ainda é muito fraco para ser utilizado como substituto da transmissão. Dê mais alguns anos e as coisas podem finalmente melhorar.
Trevor Powell
Nas poucas vezes em que deparei com redes corporativas que não suportam transmissão, encontrei todos os tipos de outros problemas de roteamento que geralmente são causados ​​por equipamento defeituoso (às vezes corrigido pela atualização do firmware do roteador). Se a transmissão não estiver funcionando em um segmento de LAN local, é improvável que seja intencional.
Randolf Richardson