A mesma porta atua como cliente e servidor?

A mesma porta atua como cliente e servidor?

acho algo estranho nesta saída do netstat. a saída é obtida usando netstat -a -n -o -p TCPo 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 55486e 55487qual é a porta do servidor e qual é a porta do cliente?

pelo que entendi, a local-addresscoluna indica o lado do cliente de uma conexão TCP e a foreign-adresscoluna 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?

netstat com portas emparelhadas

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 Addresscoluna denota o lado do cliente de uma conexão TCP e a Foreign Addresscoluna denota o lado do servidor”. Isto é errado; a Local Addresscoluna denota olocallado de uma conexão TCP e a Foreign Addresscoluna indica oestrangeiro(oucontrolo remoto) lado. Em outras palavras, a Local Addresscoluna denota o soquete (TCP) que um processono seu computadorestá usando (ou seja, um soquete que seu computadorpossui), e a Foreign Addresscoluna 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 netstatreporta 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 netstatsaí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 netstatmostrará 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.

informação relacionada