Diferença entre um soquete e uma porta


121

Alguém poderia explicar claramente a diferença entre uma porta e um soquete. Eu sei que uma porta serve como uma porta na rede para um processo de aplicativo e que o processo de aplicativo usa uma conexão de soquete para o número da porta fornecido para lidar com a comunicação de rede, mas quando você tem vários processos ouvindo em um único número de porta, estou descobrindo É difícil entender a diferença entre o soquete e a porta e como eles se encaixam.


9
Port é um endereço físico, enquanto socket é um objeto.
SuperMay

14
Se um pacote atinge um bolso em um soquete em uma porta ...
user16764

Respostas:


116

S é um programa de servidor: digamos que seja um servidor HTTP, portanto ele usará o número da porta conhecido para HTTP , que é 80. Eu o executo em um host com endereço IP 10.0.0.4, para que ele escute as conexões 10.0.0.4:80(porque é aí que todos esperam encontrá-lo).

Dentro de S , vou criar um soquete e vinculá- lo a esse endereço: agora, o sistema operacional sabe que as conexões que entrarem 10.0.0.4:80devem ser roteadas para o meu processo S por esse soquete específico.

  • saída netstat depois que o soquete é vinculado:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    

    NB o endereço local é todos os zeros porque S não se importa como seus clientes o alcançam

Depois que S tiver esse soquete vinculado, ele aceitará conexões - toda vez que um novo cliente se conectar, acceptretornará um novo soquete, específico para esse cliente.

  • saída netstat assim que uma conexão for aceita:

    $ netstat --tcp -lan
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address               Foreign Address            State
    tcp        0      0 0.0.0.0:80                  0.0.0.0:*                  LISTEN
    tcp        0      0 10.0.0.4:80                 10.0.0.5:55715             ESTABLISHED
    
    • 10.0.0.4:80representa o final da conexão de S e está associado ao soquete retornado poraccept
    • 10.0.0.5:55715é o fim da conexão do cliente e está associado ao soquete que o cliente passou para conectar . A porta do cliente não é usada para nada, exceto pacotes de roteamento nesta conexão TCP para o processo correto: é atribuída aleatoriamente pelo kernel do cliente a partir do intervalo de portas efêmeras.

Agora, S pode continuar aceitando mais conexões de clientes ... cada um terá seu próprio soquete, cada soquete será associado a uma conexão TCP única e cada conexão terá um endereço remoto exclusivo. S rastreará o estado do cliente (se houver) associando-o ao soquete.

Então, aproximadamente:

  • o endereço IP é para roteamento entre hosts na rede
  • a porta é para rotear para o soquete correto no host
    • Eu quase disse o processo correto , mas é realmente possível ter vários processos (geralmente filhos) todos aceitando no mesmo soquete ...
    • no entanto, sempre que uma das acceptchamadas simultâneas retorna, em um único processo, o soquete de cada conexão de entrada é exclusivo para uma instância do servidor
  • o soquete é o objeto que um processo usa para conversar com o sistema operacional sobre uma conexão específica, como um descritor de arquivo
    • Como mencionado nos comentários, existem muitos outros usos para soquetes que não usam portas: por exemplo, socketpair cria um par de soquetes conectados entre si que não têm nenhum esquema de endereçamento - a única maneira de usar esse canal é sendo o processo que chamou socketpair, sendo filho desse processo e herdando um, ou sendo explicitamente passado um dos soquetes desse processo

1
@ Useless Vale a pena mencionar que os soquetes não precisam ser baseados em IP, como a resposta indica. Não é exatamente relevante para o OP, mas uma explicação das famílias de soquetes ajudaria a completar esta resposta.
hafichuk

Bom ponto - eu já estava me preocupando com o aumento do escopo quando comecei a escrever sobre servidores com vários processos. Sinta-se à vontade para editá-lo e, se não o fizer, chegarei a um ponto ...
Inútil

11
isso não é inútil
l --''''''--------- '' '' '' '' '' ''

Eu tento entender soquete em eletrônica, um servidor vincular um soquete a um número de porta é como colocar um soquete em uma parede, à espera de alguns dispositivos eletrônicos serem plugados para carregar a bateria. Mas quando aceito, um novo soquete é retornado? Por quê? Um novo soquete é colocado na parede? Por favor, ajude-me a entender por alguma analogia.
Aaron Shen

3
O problema aqui é que sua analogia está errada. Esqueça o que um soquete significa no mundo físico - não é uma metáfora para outra coisa, apenas um termo técnico para um conceito técnico específico de software. Nem sequer está fortemente relacionado às portas ou soquetes da rede física - você só precisa entendê-lo, neste domínio, como um conceito em seus próprios termos.
Inutil)

49

Pense na sua máquina como um prédio de apartamentos:

  • Uma porta é um número de apartamento.

  • Uma tomada é a porta de um apartamento.

  • Um endereço IP é o endereço da rua do edifício.


3
Gosto dessa analogia, embora agora esteja pensando em estar dentro daquele apartamento olhando para um corredor sem fim com muitas portas. Eu não posso sair. Eu não posso sair! :)
Daniel Hollinrake

1
@ Caleb A socket is the door of an apartment.Mas não poderia haver vários soquetes abertos em uma porta?
Suhail Gupta 31/05

3
@suhail Às vezes, um apartamento tem mais de uma porta. Todos eles têm o mesmo número de apartamento, mas são portas diferentes.
Caleb

45

Uma porta faz parte do endereço nos protocolos TCP e UDP. É usado para ajudar o sistema operacional a identificar qual aplicativo deve obter os dados recebidos. Um sistema operacional precisa suportar portas para suportar TCP e UDP porque as portas são uma parte intrínseca do TCP e UDP.

Um soquete faz parte da interface que o sistema operacional apresenta aos aplicativos para permitir que eles enviem e recebam dados da rede. A maioria das implementações de soquetes suporta muitos protocolos além do TCP e UDP, alguns dos quais não têm conceito de portas. Um sistema operacional não precisa suportar soquetes para suportar TCP ou UDP; poderia fornecer uma interface diferente para os aplicativos usarem. Um soquete é simplesmente uma maneira de enviar e receber dados em uma porta específica.


Um soquete é essencialmente uma tupla composta por: IP de origem: IP de destino da porta: porta.
Tony The Lion

você quer dizer que a porta existe apenas nos protocolos TCP e UDP ?? E o http e outros protocolos?
Hosein Aqajani 16/10

O HTTP é um protocolo da camada de aplicativo que é executado sobre os protocolos da camada de transporte, como TCP ou UDP. Ele não possui seu próprio conceito de portas, herda-as do protocolo da camada de transporte subjacente.
Dirk Holsopple

8

Um computador possui um endereço IP que o identifica como uma entidade separada na rede. Adicionamos um número adicional a ele para permitir a diferenciação entre as conexões com esse computador. Este é o número da porta. No lado do sistema operacional da conexão, você precisa de buffers, estado da conexão etc. Este objeto lógico é o soquete.


0

Um soquete é um caminho de comunicação para uma porta. Quando você deseja que seu programa se comunique pela rede, você oferece uma maneira de endereçar a porta e isso é feito criando um soquete e anexando-o à porta. Basicamente, socket = IP + ports Os soquetes fornecem acesso à porta + ip


-1

Um endereço IP identifica o dispositivo, ou seja, o endereço do dispositivo específico, quando você acessa a máquina usando IP now, a porta define com qual processo a máquina deve se comunicar.

Portanto, para que a comunicação real ocorra, você precisa da porta + IP, chamada soquete.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.