A mesma porta está atuando como cliente e servidor?

2

eu acho algo estranho nesta saída netstat. a saída é obtida usando o comando netstat -a -n -o -p TCP 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

Por favor, note estas duas linhas. endereço local e externo é localhost. mas como as portas são emparelhadas? de duas portas 55486 e 55487 qual é a porta do servidor e qual é a porta do cliente?

pelo que entendi, a coluna local-address denota o lado do cliente de uma conexão TCP e a coluna foreign-adress indica o lado do servidor. Dessa saída, parece que a mesma porta está se comportando como o servidor e do cliente.

Eu não entendo como isso é possível com o TCP?

    
por inquisitive 04.12.2013 / 19:22

3 respostas

3

Linha: TCP 127.0.0.1:55486 127.0.0.1:55487 ESTABLISHED 5808

Está afirmando que o cliente está se conectando à porta no 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á afirmando que o servidor está se conectando de volta ao cliente na porta 55486 de 55487.

O TCP exige 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 confirmando a conexão (parte 2). O cliente responde ao reconhecimento com sua própria confirmação (parte 3).

TL; DR - O cliente geralmente usa 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 não estão na mesma porta.

    
por 04.12.2013 / 19:31
2

Eu não sei dizer o quanto você entende agora então permita-me ser um pouco pedante.

Você entende claramente o conceito de cliente e servidor, então me surpreende que você escreve, “a coluna Local Address indica o lado do cliente de uma conexão TCP e a coluna Foreign Address indica o lado do servidor. ” Isto é errado; a coluna Local Address indica o lado local de uma conexão TCP e a coluna Foreign Address indica o lado estrangeiro (ou remoto ). Em outras palavras, a coluna Local Address indica o soquete (TCP) que um processo no seu computador está usando (ou seja, um soquete que o seu computador possui ), e a coluna Foreign Address indica o soquete ao qual o soquete local está conectado. Como você parece entender, os processos em seu computador podem funcionar como servidores, so soquetes locais podem ser soquetes de servidor - e, em seguida, o soquete do cliente correspondente seria listado como "estrangeiro".

As coisas começam a ficar confusas quando um processo do cliente no seu computador conecta-se a um processo do servidor no seu computador. Agora, essa conexão representa dois soquetes locais - e netstat informa uma linha para cada; um mostrando o cliente como local e o servidor como estrangeiro (mesmo que seja um socket local), e um ao contrário.

Sua situação é um pouco mais confusa. O seu servidor jetty (processo 5808) é, obviamente, criando soquetes e aceitando conexões neles - isso é o que os servidores fazem. Mas está criando muitos soquetes de uma só vez. (Por necessidade, eles estão em números de porta diferentes; o sistema operacional não permite que vários soquetes com o mesmo protocolo e número de porta coexistam. E parece estar usando números de porta aleatórios (atribuídos pelo sistema operacional). Por exemplo, como você apontou, ele está escutando na porta 55484. Eu não estou familiarizado com o molhe, então não sei se isso é normal.

Se você examinar sua saída netstat de perto, verá esse processo local 184, usando um soquete na porta 8081, tem uma conexão para processar 5808 / porta 55482.

A parte que eu acho realmente estranha é o processo 5808 conectou a si mesmo em 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, mas no mesmo processo . Eu não acho que podemos dizer com certeza qual é o cliente e qual é o servidor. Eu realmente acho que o menor número de porta é mais provável que seja o servidor, mas isso é apenas um palpite.

    
por 06.12.2013 / 02:41
0

Não é uma situação incomum. 127.0.0.1 é o endereço IP válido que seu programa atende. Programa pode ouvir neste endereço. O programa também pode se conectar a esse 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 em um computador.

Por exemplo, quando você usa o site do Google, seu computador é cliente e o servidor da Web do Google é o servidor. Há conexão entre seu computador e o servidor do Google.

Você pode ter seu próprio servidor da Web em execução no seu computador e ouvir 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 da Web. Nesta situação netstat mostrará a mesma coisa.

Para responder à sua pergunta:

From this output it seems that the same port is behaving as both client and server.

Não. Uma porta é cliente, outra é servidor. Observe - não diz

 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.

    
por 04.12.2013 / 19:42