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?
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?
Respostas:
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 .
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.
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 :)
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.
socket
també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).
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 memcpy
e 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.
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:80
port 80
of unix.stackexchange.com
(a socket) é o ponto de acesso deste site.
No entanto, existem outros tipos de soquete, veja os comentários abaixo.
AF_INET
).
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.