Meu servidor web e navegador da web parecem estar usando a porta 80 ao mesmo tempo

1

Se eu, no OS X,

  1. Inicie o Firefox.
  2. Inicie o Google Chrome.
  3. Inicie um servidor Ruby on Rails na porta 80 (usando RVM)

    rvmsudo rails -p 80
    
  4. Use o lsof para ver o que está sendo executado na porta 80

    sudo lsof -i:80
    

Depois, vejo "ruby", "firefox" e "Google" na saída.

Eu ouço o tempo todo que apenas um processo pode escutar em uma porta. Como todos esses podem usar a porta 80 ao mesmo tempo? Como é que o Firefox e o Chrome estão usando a porta diferente da maneira como o Rails está usando a porta?

    
por David Winiecki 27.04.2016 / 08:12

3 respostas

1

Depois de aprender e experimentar sudo lsof -i e sudo lsof -iTCP e ler "Os navegadores da web usam portas de saída diferentes para guias diferentes?" , acho que estou lendo a saída de lsof incorretamente.

Veja um exemplo:

$ sudo lsof -iTCP:80
COMMAND  PID  USER      FD  TYPE     DEVICE  SIZE/OFF  NODE NAME
...
firefox xxxx  user  xxxxxx  IPv4  xxxxxxxxx    xxxxxx   TCP 192.168.0.100:12345->stackoverflow.com:http (ESTABLISHED)

Olhando este exemplo e outra saída de sudo lsof -i , acho que está bem claro que esta linha do Firefox aparece na saída porque o Firefox está conectando a porta 80 em um servidor remoto, da porta local 12345. O Firefox não está se conectando a um servidor remoto da porta local 80.

Eu não sei se é possível para um cliente como o Firefox se conectar a partir da porta 80 enquanto um servidor local está escutando na porta 80, mas o que está acontecendo aqui pelo menos não parece desafiar essa ideia, porque não é o que o Firefox está fazendo.

sudo lsof -i:80 -s TCP:^LISTEN mostra as conexões para a porta 80 em computadores remotos, a menos que um cliente local use a porta local 80 para se conectar a algo. É estranho que não pareça ser uma opção apenas listar quais portas locais estão em uso.

    
por 27.04.2016 / 08:24
0

Geralmente, todos os navegadores (do lado do cliente) se conectam à porta 80 no servidor da Web (lado do servidor). Então, no lado do servidor, apenas a porta 80 está no estado de escuta. Os navegadores usam qualquer conexão TCP para a porta 80 no servidor da Web.

    
por 27.04.2016 / 08:29
-1

Resposta curta: a port cannot be shared

Como você tem apenas um IP e pode receber muitos dados chegando ao mesmo tempo, as portas estão sendo usadas para enviar os dados para o processo destinado a recebê-lo. Isso nos leva à primeira linha: ports cannot be shared .

Os processos do lado do servidor têm uma porta específica e eles nunca mudam a menos que você faça isso, mas, por outro lado, o cliente apenas abre uma porta alta aleatória e se conecta ao servidor. Essa porta pode ser usada novamente, mas o mesmo processo novamente ou não, mas você nunca sabe e isso não importa.

    
por 27.04.2016 / 09:00

Tags