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?

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.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.