Um servidor da web usa dados de transporte de porta diferentes?

1

Digamos que eu tenha um processo de servidor da Web escutando a porta 80. Quando um cliente visita este site, o servidor selecionará uma nova porta para estabelecer conexão para transferência de dados ou apenas usará a porta 80? Use a configuração padrão do apache, lighttpd ou nginx.

    
por Frozen Flame 05.11.2013 / 05:57

1 resposta

1

Qualquer conexão TCP é identificada pela tupla de 4 números:

source_ip, source_port, target_ip, target_port

É necessário apenas que a combinação dos 4 números seja única. Para o servidor da web em nosso exemplo, target_ip seria o endereço IP público desse servidor e target_port seria 80 (ou 443 para HTTPS).

Para responder à sua pergunta: o servidor NÃO escolhe uma nova porta ao responder a uma conexão - ela está sempre ouvindo na porta 80 , mas o cliente seleciona a porta no lado do cliente!

Por exemplo, suponha que tenhamos um servidor Web com endereço IP público 10.0.0.1 e clientes 192.168.1.1 , 192.168.1.2 e 192.168.1.3 . Se a conexão do cliente para o servidor ainda estiver ativa, netstat -4n imprimiria algo assim:

Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address   Foreign Address    State
tcp        0      0 10.0.0.1:80     192.168.1.1:65510  ESTABLISHED
tcp        0      0 10.0.0.1:80     192.168.1.2:49166  ESTABLISHED
tcp        0      0 10.0.0.1:80     192.168.1.3:49166  ESTABLISHED

Como você pode ver, é bem possível que 2 clientes diferentes tenham o mesmo número de porta ( 49166 ) do lado deles - não há nada de errado com isso.

Em outras palavras, o servidor da Web continua falando sobre a conexão TCP original à qual o cliente se conectou (porta 80 ) até que a conversa seja concluída e a conexão seja fechada. Todos os pacotes de resposta do servidor da web são enviados de volta usando tupla (source_ip, source_port) como endereço de destino e (target_ip, target_port) como endereço de origem.

    
por 05.11.2013 / 07:16