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.
networking
sockets
networks
cobie
fonte
fonte
Respostas:
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ões10.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:80
devem ser roteadas para o meu processo S por esse soquete específico.saída netstat depois que o soquete é vinculado:
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,
accept
retornará um novo soquete, específico para esse cliente.saída netstat assim que uma conexão for aceita:
10.0.0.4:80
representa 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:
accept
chamadas simultâneas retorna, em um único processo, o soquete de cada conexão de entrada é exclusivo para uma instância do servidorsocketpair
, sendo filho desse processo e herdando um, ou sendo explicitamente passado um dos soquetes desse processofonte
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.
fonte
A socket is the door of an apartment.
Mas não poderia haver vários soquetes abertos em uma porta?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.
fonte
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.
fonte
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
fonte
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.
fonte