Como o SO gera uma porta de soquete aleatória?

0

Eu estou querendo saber como o sistema operacional garante que os clientes não obtenham a mesma porta "aleatória" (ligando o soquete configurando a porta a 0) como qualquer outro cliente na rede, já que eu quero me comunicar usando o protocolo UDP entre meu servidor e muitas máquinas que usam o mesmo IP local seria muito difícil se os clientes obtivessem os pacotes uns dos outros.

    
por grimgrom 14.11.2012 / 22:53

2 respostas

3

O sistema operacional tem uma lista das portas atualmente em uso, geralmente apenas seleciona a próxima disponível. Dito isso, ele tenta evitar números baixos.

As portas não precisam ser exclusivas na rede, apenas por conexão. Uma conexão consiste em

  • o IP de origem
  • a porta de origem
  • o IP de destino
  • a porta de destino

Se algum deles for diferente, é uma conexão diferente. Isso significa que um servidor pode ter muitas conexões chegando à mesma porta de IPs diferentes ou de portas diferentes do mesmo IP.

    
por 14.11.2012 / 23:13
0

how the OS makes sure that the clients don't get the same "random"(binding the socket by setting the port to 0) port as any other client in the network

Isso não acontece. Ele garante que os aplicativos locais obtenham uma porta exclusiva no host atual . Nada a ver com clientes ou com a rede.

it would be really difficult if the clients get each others packets.

Eles não o fazem, a menos que estejam no mesmo host e estejam deliberadamente compartilhando a mesma porta, mas você teria que programá-los para fazê-lo deliberadamente (isto é, defina SO_REUSEPORT em ambos os soquetes).

    
por 15.11.2012 / 05:34