acho algo estranho nesta saída do netstat. a saída é obtida usando netstat -a -n -o -p TCP
o comando no win 7.
Proto Local Address Foreign Address State PID
TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808
TCP 127.0.0.1:55487 127.0.0.1:55486 ESTABLISHED 5808
Observe estas duas linhas. o endereço local e estrangeiro é localhost. mas como é que as portas estão emparelhadas? de duas portas 55486
e 55487
qual é a porta do servidor e qual é a porta do cliente?
pelo que entendi, a local-address
coluna indica o lado do cliente de uma conexão TCP e a foreign-adress
coluna indica o lado do servidor. A partir desta saída, parece que a mesma porta está se comportando como clienteeservidor.
Não entendo como isso é possível com TCP?
Responder1
Linha:TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808
Está informando que o cliente está se conectando à porta 55487 para o servidor enquanto o cliente usa a porta 55486.
Linha: TCP 127.0.0.1:55487 127.0.0.1:55486 ESTABLISHED 5808
está informando que o servidor está se conectando novamente ao cliente na porta 55486 de 55487.
O TCP requer o "handshake de três vias" para configurar a conexão entre um cliente e um servidor.
O cliente se conecta ao servidor (parte 1 do handshake de 3 vias). O servidor responde reconhecendo a conexão (parte 2). O cliente responde ao reconhecimento com o seu próprio reconhecimento (parte 3).
TL;DR - O cliente geralmente usa uma porta aleatória para se conectar a um servidor com uma porta específica. O servidor responde a essa máquina usando a porta aleatória. O cliente e o servidor sãoNÃOna mesma porta.
Responder2
Não consigo dizer o quanto você entende disso agora, então permita-me ser um pouco pedante.
Claramente você entende o conceito de cliente e servidor, então me surpreende que você escreva: “a Local Address
coluna denota o lado do cliente de uma conexão TCP e a Foreign Address
coluna denota o lado do servidor”. Isto é errado; a Local Address
coluna denota olocallado de uma conexão TCP e a Foreign Address
coluna indica oestrangeiro(oucontrolo remoto) lado. Em outras palavras, a Local Address
coluna denota o soquete (TCP) que um processono seu computadorestá usando (ou seja, um soquete que seu computadorpossui), e a Foreign Address
coluna indica o soquete ao qual o soquete local está conectado. Como você parece entender, os processos no seu computador podem funcionar como servidores, então os soquetes locais podem ser soquetes de servidor - e então o soquete do cliente correspondente seria listado como “estrangeiro”.
As coisas começam a ficar confusas quando um processo cliente em seu computador se conecta a um processo servidor em seu computador. Agora, esta conexão representa dois soquetes locais - e netstat
reporta uma linha para cada; um mostrando o cliente como local e o servidor como estrangeiro (mesmo que seja realmente um soquete local) e outro o contrário.
Sua situação é um pouco mais confusa. Seu servidor jetty (processo 5808) está, obviamente, criando soquetes e aceitando conexões neles - é isso que os servidores fazem. Mas está criando muitos soquetes ao mesmo tempo. (Por necessidade, eles estão em números de porta diferentes; o sistema operacional não permite a coexistência de vários soquetes com o mesmo protocolo e número de porta.) E parece estar usando números de porta aleatórios (atribuídos ao sistema operacional). Por exemplo, como você apontou, ele está escutando na porta 55484. Não estou familiarizado com o jetty, então não sei se isso é normal.
Se você examinar sua netstat
saída de perto, verá que o processo local 184, usando um soquete na porta 8081, tem uma conexão com o processo 5808/porta 55482.
A parte que acho realmente estranha é que o processo 5808 conectoupara si mesmoem vários desses soquetes. Então você tem várias conexões TCP onde ambos os soquetes são mantidos, não apenas no mesmo host, masno mesmo processo. Não acho que possamos dizer com certeza qual extremidade é o cliente e qual é o servidor. Na verdade, eu acho que é mais provável que o número da porta inferior seja o servidor, mas isso é apenas um palpite.
Responder3
Não é uma situação incomum. 127.0.0.1
é o endereço IP válido que seu programa escuta. O programa pode ouvir neste endereço. O programa também pode se conectar a este endereço. Isso está em conformidade com a arquitetura cliente-servidor. Você tem cliente e você tem servidor. Eles podem estar em computadores diferentes, mas ao mesmo tempo ambos podem estar no mesmo computador.
Por exemplo, quando você usa o site do Google, seu computador é cliente e o servidor web do Google é servidor. Existe conexão entre o seu computador e o servidor do Google.
Você pode ter seu próprio servidor Web rodando em seu computador e escutando na interface 127.0.0.1
. Abra seu navegador e digite 127.0.0.1
- como resultado você verá a página da web do seu servidor web. Nesta situação netstat
mostrará a mesma coisa.
Para responder à sua pergunta:
A partir desta saída, parece que a mesma porta está se comportando tanto como cliente quanto como servidor.
Não. Uma porta é cliente, outra é servidor. Observe - énãodizer
TCP 127.0.0.1:55486 127.0.0.1:55486 ESTABLISHED 5808
Diz:
TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808
TCP 127.0.0.1:55487 127.0.0.1:55486 ESTABLISHED 5808
O que faz sentido.