O que é um soquete?

48

Alguém poderia me explicar o que é um soquete? Eu vejo isso em muitas siglas no contexto do SSL etc.

Além disso, por que é chamado de soquete? É apenas porque foi o nome que eles inventaram? Ou foi o primeiro nome que eles inventaram?

chrisjlee
fonte
9
Em termos leigos: uma tomada é um telefone. É o que você segura na mão que permite conversar com outro telefone. A analogia se divide um pouco: a maioria das conversas telefônicas é ponto a ponto. As conexões de soquete são cliente para servidor. O cliente (como, mas não se limitando a, software de estação de trabalho como navegadores) se conecta a um servidor (como um servidor Web, servidor de arquivos, servidor de autenticação ou outro). Outra falha na analogia: quando você fecha uma conexão de soquete, o soquete é destruído e você deve criar um novo soquete antes de poder estabelecer uma nova conexão.
G-Man diz 'Restabelecer Monica' em
Não é tão ruim para uma analogia. Um servidor é apenas um call center e pode ter muitas centenas de chamadas ativas ao mesmo tempo.
MSalters 01/04/2015

Respostas:

42

Um soquete é apenas um ponto final lógico para comunicação. Eles existem na camada de transporte. Você pode enviar e receber coisas em um soquete, pode ligar e ouvir um soquete. Um soquete é específico para um protocolo, máquina e porta e é endereçado como tal no cabeçalho de um pacote.

Os guias de Beej para programação de rede e comunicação entre processos têm boas informações sobre como usar soquetes e até respondem a essa pergunta exata .

Shawn J. Goff
fonte
65

Nos termos mais simples, um soquete é um pseudo-arquivo que representa uma conexão de rede. Depois que um soquete é criado (usando as primitivas apropriadas e os parâmetros adequados para identificar o outro host), as gravações no soquete são transformadas em pacotes de rede que são enviados e os dados recebidos da rede podem ser lidos no soquete.

Por um lado, os soquetes são muito semelhantes aos pipes: eles se parecem com arquivos dos programas que os utilizam, mas não resultam em leitura ou gravação em um disco; eles permitem a comunicação com outro programa (local no caso de tubos e possivelmente remoto no caso de soquetes). Eles também oferecem, como você mencionou, comunicação bidirecional (como um par de tubos conectados corretamente).

Por fim, é comum que os programas em uma única máquina se comuniquem usando protocolos de rede padrão, como o TCP; seria um desperdício ir até o hardware de rede (se houver!), somas de verificação de computação, etc., apenas para voltar ao mesmo host: é aí que os soquetes dos domínios Unix entram. São como os soquetes regulares, exceto eles conectam processos no mesmo host em vez de processos remotos e não tentam usar nenhum recurso de rede. Dessa forma, eles são um meio de comunicação entre processos.

Como o trio mencionou, no curso da história da BSD, os tubos foram introduzidos mais cedo que os soquetes e foram reimplementados usando soquetes assim que existiram. A mesma referência, O Projeto e Implementação do Sistema Operacional FreeBSD , menciona que os tubos foram revertidos para uma implementação sem soquete por razões de desempenho: isso certamente enfatiza o fato de que os tubos compartilham semelhanças.

dhag
fonte
3
Talvez também mencione que os pipes são anteriores aos soquetes, mas depois que a interface do soquete foi adicionada ao Unix, fazia muito sentido reimplementar os tubos usando soquetes locais.
Tripleee
@tripleee: Esse é um ótimo ponto histórico. Gostaria de fornecer uma referência?
dhag
Pesquisa rápida aparece na página 40 em O design e implementação do sistema operacional FreeBSD ; o texto menciona essa alteração no 4.2BSD, mas também esclarece que isso não é mais como é feito, por razões de desempenho.
Tripleee
Excelente, vou adicionar isso à minha resposta.
dhag
A melhor techno resposta em todos
chaosguru
7

Um soquete uma abstração. Ele fornece uma interface para os aplicativos utilizarem um recurso do sistema (neste caso, a conexão de rede) de uma maneira que permita ao sistema operacional mediar e organizar o uso de um recurso limitado por qualquer número de aplicativos.

Se os dados enviados pelo soquete pudessem ser considerados envelopes de correio, o soquete seria sua caixa de correio. Você anexa uma caixa de correio (soquete) à sua casa (programa) e coloca as mensagens de saída (dados) nela. Em um horário programado, o carteiro (sistema operacional) aparece e pega as mensagens de saída e deixa as mensagens de entrada na mesma caixa de correio. Seu e-mail de saída é transmitido em seu nome ao destinatário através do caminhão do carteiro (conexão de rede) junto com o correio de todos os vizinhos. Isso permite que você se corresponda com pessoas distantes, sem a necessidade de despesa, tempo, dificuldade etc. para entregar a carta você mesmo.

Quanto ao motivo pelo qual eles são chamados de 'soquetes', a noção de que os inventores podem chamá-lo como quiserem provavelmente desempenha um papel importante lá. Embora, não seja um nome ruim na minha opinião :)

Andrew Lambert
fonte
7

Agora o que é isso?

Um soquete ou "soquete" pode ser várias coisas:

Primeiro de tudo, é um modelo de pensamento e uma interface de programação de aplicativos (API) . Isso significa que você tem um conjunto de regras que precisa seguir e um conjunto de funções que você pode usar para escrever programas que fazem algo, de acordo com um contrato especificado com precisão. Nesse caso em particular, algo significa trocar dados com outro programa.

A API de sockets abstrai amplamente os detalhes de "comunicação" em geral. Ele encapsula com quem você conversa e como, através de uma forma (quase) consistente e idêntica de cortador de biscoitos.
Você pode criar soquetes em diferentes "domínios" (como, por exemplo, um "soquete unix" ou "soquete da Internet") e de diferentes tipos de comunicação (por exemplo, um soquete de "datagrama" ou soquete de "fluxo") e conversar com diferentes destinatários , e tudo funciona exatamente da mesma maneira (bem, 99%, obviamente existem diferenças minuciosas que você deve considerar).

Você não precisa saber (e nem quer saber!) Se conversa com outro programa no mesmo computador ou em um computador diferente, ou se há rede IPv4 ou IPv6 entre esses computadores ou talvez algum outro protocolo que você nunca ouviu falar.

sockettambém é o nome da função de biblioteca (ou syscall) que cria "o soquete ", que é um tipo especial de arquivo (tudo no Unix é um arquivo).

Como ele se compara a ...

soquetes se enquadram na mesma categoria que tubos e tubos de nome

Um canal é um meio de comunicação unidirecional entre um leitor e um gravador (ambos programas) no mesmo computador. Ele simula um fluxo de dados (como, por exemplo, o TCP).
Ou seja, não existem "mensagens" ou "blocos de dados" individuais do ponto de vista do canal. Você pode copiar qualquer quantidade de dados em "uma extremidade" e outra pessoa pode ler qualquer quantidade de dados (não necessariamente a mesma e nem necessariamente de uma só vez) na "outra extremidade" na mesma ordem de bytes que você empurrou para dentro.

Um pipe nomeado é, bem, simplesmente um pipe que possui um nome no sistema de arquivos . Ou seja, é algo que se parece e se comporta como um arquivo, ele aparece na lista de diretórios e você pode abri-lo, gravá-lo etc. etc. Observe que você também pode criar arquivos especiais de soquete (que seria um soquete nomeado) .

Um soquete, por outro lado, é um meio de comunicação bidirecional ("duplex"), que significa que você pode escrever e ler no mesmo soquete e não precisa de dois soquetes separados para uma comunicação de duas vias.
Além disso, um soquete pode atuar como um fluxo (idêntico a um canal), ou pode enviar mensagens discretas e não confiáveis, ou pode enviar mensagens discretas e ordenadas (as duas primeiras funcionam em qualquer domínio, a última apenas no "domínio unix" ) Ele pode enviar mensagens (ou simular um fluxo) para alguém em um computador totalmente diferente. Um soquete pode até fazer uma forma de comunicação um para muitos (multicast) sob algumas condições.

Com isso em mente, é claro que os soquetes fazem algo muito mais complicado e geralmente têm mais sobrecarga do que os tubos (que são basicamente não mais do que simples memcpye de um buffer!), Mas se você criar soquetes locais (por exemplo, no mesmo computador), o sistema operacional geralmente aplica um caminho rápido altamente otimizado; portanto, não há muita diferença.

comunicação entre processos às vezes mencionada em relação às redes

Sim, soquetes são uma maneira possível de comunicação entre processos (memória compartilhada e pipes são exemplos de alternativas). Tudo ao mesmo tempo, eles estão sendo usados ​​para "networking", conforme explicado acima.

Damon
fonte
1

Para udp ou tcp sobre IP,

Um endereço de soquete é a combinação de um endereço IP e um número de porta.

Um endereço IP é o endereço de uma máquina na Internet, por exemplo unix.stackexchange.com has address 198.252.206.140

No entanto, cada máquina deve ser capaz de fornecer mais de um serviço; portanto, a maioria das máquinas fornecerá http (páginas da web) na porta 80 e ssh na porta 22 e etc.

Portanto, unix.stackexchange.com:80port 80of unix.stackexchange.com(a socket) é o ponto de acesso deste site.

No entanto, existem outros tipos de soquete, veja os comentários abaixo.

ctrl-alt-delor
fonte
5
TCP / IP é apenas um tipo de soquete. Existem outros que não têm nada a ver com tcp / ip.
Psusi
quantos tipos diferentes de soquetes existem?
Abdul Al Hazred
11
@AbdulAlHazred, conheço quatro tipos comuns usados ​​com redes IP, o mesmo com IP6, dois com Unix e dois com IPX. Eu não olhei para ax25, atm ou appletalk. Existem outros protocolos suportados no linux e existem protocolos que o linux não suporta. Na maioria dos casos, cada protocolo possui soquetes de fluxo (tcp) e datagrama (udp). Soquetes brutos também são comuns e o imcp também pode ter uma interface de soquete.
Hildred #
A questão é que essa resposta é incompleta, pois cobre apenas um tipo de soquete, e enganosa, pois representa soquetes em geral como se fossem sempre soquetes de rede e, especificamente, soquetes IP ( AF_INET).
Tripleee
0

Eu acredito que você perguntou sobre redes. Portanto, os serviços TCP usam soquetes como ponto de comunicação e são compostos de um endereço IP, protocolo e número de porta.

Dragos Alexe
fonte