Como os jogos multijogador online que usam UDP fazem com que os pacotes sejam entregues entre redes pela Internet? Pelo que entendi, os clientes teriam que habilitar o encaminhamento de porta em seus roteadores para que os pacotes chegassem ao seu computador. É isso que os grandes jogos online (WoW, Diablo, etc) exigem que os jogadores façam?
Por exemplo, criei recentemente um servidor que lida com o tráfego UDP. Ele apenas ecoa tudo o que o remetente enviou. Eu implantei isso em um servidor na internet. Só consigo devolver os ecos ao remetente depois de ativar o encaminhamento de porta, mas isso não funcionará se houver dois remetentes na mesma rede local.
Responder1
Resposta curta: rastreamento de conexão NAT
Uma coisa a lembrar é que a grande maioria dos roteadores na Internet IPv4 são roteadores NAT.
A maioria das implementações de NAT faz rastreamento inteligente. Quando você envia UDP de um cliente interno para algum lugar, você terá uma porta de destino e uma porta de origem. Se o tráfego chegar com as portas invertidas, esse tráfego será roteado de volta para o seu cliente e permitido na maioria dos firewalls.
NAT/Firewalls com rastreamento detectam esses pacotes como relacionados e os encaminham de volta.
Exemplo baseado em comentários server
na porta 5000
UDP
- O cliente envia um pacote para
server:5000
a origemclient:5001
- O primeiro roteador NAT verá um pacote com IP de origem e porta
client:5001
e destinoserver:5000
. - O roteador envia isso a caminho e terá
NATip:NATport
- O servidor recebe isso e cria uma resposta
NATip:NATport
que tem a origem doserver:5000
- NAT recebe isso e tem source
server:5000
destinationNATip:NATport
, que corresponde ao pacote que foi enviado (mas tem origem e destino invertidos) - NAT envia isso para
client:5001
ainda com a fonteserver:5000
O ip+porta de origem e o ip+porta de destino criam uma combinação que pode ser rastreada. (há mais detalhes, mas isso é o básico)
Mais um pouco de leituraMas eu deveria desenterrar uma documentação melhor sobre isso e não apenas me referir a evidências anedóticas do que vi vivenciar.