Alguém poderia me explicar o que é soquete? Eu vejo isso em muitos acrônimos no contexto de SSL, etc.
Além disso, por que é chamado de soquete? É simplesmente porque foi um nome que eles inventaram? Ou foi o primeiro nome que eles inventaram?
Comentários
- Em termos ‘ do leigo: um soquete é um telefone. É ‘ o que você segura na mão que permite que você converse com outro telefone. A analogia se quebra 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 limitado 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.
- It ‘ não é tão ruim assim para uma analogia. Um servidor é apenas uma central de atendimento e pode ter centenas de chamadas ativas ao mesmo tempo.
Resposta
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, você pode ligar e ouvir um soquete. Um socket é específico para um protocolo, máquina e porta, e é endereçado como tal no cabeçalho de um pacote.
Guias de Beej para Rede Programação e Comunicação entre processos têm boas informações sobre como usar soquetes e até mesmo responda exatamente a esta pergunta .
Resposta
Em termos mais simples, um socket é um pseudo-arquivo que representa uma conexão de rede. Depois que um soquete é criado (usando os primitivos apropriados 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 do soquete.
Em um aspecto, os soquetes são muito semelhantes aos tubos: eles se parecem com arquivos para os programas que os utilizam, mas não resultam em leitura ou gravação em um disco; em vez disso, eles permitem a comunicação com outro programa (local no caso de tubos e po seguramente remoto no caso de soquetes). Eles também oferecem, como você mencionou, comunicação bidirecional (da mesma forma que um par de tubos conectados corretamente).
Finalmente, é comum que 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 entram os soquetes de domínios Unix. Esses são muito parecidos com soquetes regulares , exceto que 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 tripla mencionada , no curso da história do BSD, os pipes foram introduzidos antes dos sockets, e foram reimplementados usando sockets, uma vez que existiam. A mesma referência, O Design e Implementação do Sistema Operacional FreeBSD , menciona que os tubos foram então revertidos para uma implementação sem soquete por motivos de desempenho: isso certamente sublinha o fato de que os canais compartilham semelhanças.
Comentários
- Talvez também mencione isso pipes são anteriores aos sockets, mas uma vez que a interface de socket foi adicionada ao Unix, fez muito sentido o reimplementar tubos usando sockets locais.
- @tripleee: Esse ‘ é um grande ponto histórico. Quer fornecer uma referência?
- Uma pesquisa rápida no Google mostra página 40 em O projeto e implementação do sistema operacional FreeBSD ; o texto menciona essa mudança em 4.2BSD, mas também esclarece que não é mais assim que ‘ é feito, por motivos de desempenho.
- Excelente, eu ‘ adicionarei isso à minha resposta.
- A melhor resposta techno de todas
Resposta
Agora, o que é?
Um soquete, ou “soquete” pode ser várias coisas:
Em primeiro lugar, é um pensamento modelo e uma interface de programação de aplicativo (API) . Isso significa que você tem um conjunto de regras que precisa seguir e um conjunto de funções que pode usar para escrever programas que fazem algo, de acordo com um contrato especificado com precisão. Neste caso particular, algo significa troca de dados com outro programa.
A API de sockets abstrai amplamente os detalhes de “comunicação” em geral. Ele encapsula com quem você fala e como, tudo por meio de uma forma (quase) consistente e idêntica.
Você pode criar sockets em diferentes “domínios” (como, por exemplo,um “soquete unix” ou um “soquete de internet”) e de diferentes tipos de comunicação (por exemplo, um soquete de “datagrama” ou um soquete de “stream”) e falar com destinatários diferentes, e tudo funciona exatamente da mesma forma (bem, 99%, há obviamente diferenças mínimas que você “terá que levar em consideração).
Você não precisa saber (e nem mesmo quer saber!) se fala 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 do qual você nunca ouviu falar.
socket
é também o nome da função da biblioteca (ou syscall) que cria “o soquete “, que é um tipo especial de arquivo (tudo no Unix é um arquivo).
Como ele se compara a …
sockets se enquadram na mesma categoria que tubos e canos de nome
Um cano é um meio de o Uma forma de comunicação entre um leitor e um gravador (sendo ambos programas) no mesmo computador. Ele simula um fluxo de dados (como, por exemplo, TCP).
Ou seja, não existem “mensagens” ou “blocos de dados” individuais do ponto de vista do tubo. Você pode copiar qualquer quantidade de dados em “uma extremidade”, e outra pessoa pode ler qualquer quantidade de dados (não necessariamente os mesmos, e não necessariamente de uma vez) na “outra extremidade” na mesma ordem de bytes em que você inseriu .
Um canal nomeado é, bem, simplesmente um canal que possui um nome no sistema de arquivos . Ou seja, é algo que se parece e se comporta exatamente como um arquivo, 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 socket (que seriam um nome socket).
Um socket, por outro lado, é um meio de bidirecional (” comunicação duplex “), o que significa que você pode escrever e ler no mesmo soquete e não precisa de dois soquetes separados para uma comunicação bidirecional.
Além disso, um soquete pode atuar como um fluxo (idêntico a um tubo ), 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 em “domínio unix”). 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 tubos (que são basicamente não mais do que um simples memcpy
de e para um buffer!), mas se você criar sockets locais (ou seja, no mesmo computador), o sistema operacional geralmente aplica um caminho rápido altamente otimizado, então não há muita diferença.
comunicação entre processos às vezes mencionado em relação às redes
Sim, os sockets são uma forma possível de comunicação entre processos (memória compartilhada e tubos são exemplos de alternativas). Ao mesmo tempo, eles estão sendo usados para “networking”, conforme explicado acima.
Resposta
Um soquete uma abstração . Ele fornece uma interface para aplicativos utilizarem um recurso do sistema (neste caso, a conexão de rede) de uma forma que permite 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 correspondência, o soquete seria sua caixa de correio. Você anexa uma caixa de correio (soquete) à sua casa (programa) e coloca nela os seus e-mails de saída (dados). Em um horário programado, o carteiro (sistema operacional) chega e pega sua correspondência de saída e entrega todas as mensagens de entrada na mesma caixa de correio. Sua correspondência de saída é enviada em seu nome ao destinatário através do caminhão do carteiro (conexão de rede), juntamente com a correspondência de todos os seus vizinhos. Isso permite que você se corresponda com pessoas distantes sem a necessidade de despesas, tempo, dificuldade, etc. de entregar a carta você mesmo.
Quanto ao motivo de eles serem chamados de “soquetes” bem, a noção de que os inventores podem chamá-lo do que quiserem, provavelmente desempenha um grande papel nisso. Embora, “não seja um nome ruim, na minha opinião 🙂
Resposta
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, então 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
porta 80
de unix.stackexchange.com
(um soquete) é o ponto de acesso deste site.
No entanto, existem outros tipos de soquete, veja os comentários abaixo.
Comentários
- tcp / ip é apenas um tipo de socket. Existem outros que não têm nada a ver com tcp / ip.
- quantos tipos diferentes de soquetes existem?
- @AbdulAlHazred, conheço quatro tipos comuns usados com rede 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 tem 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.
- A questão é que esta resposta é incompleta porque cobre apenas um tipo de soquete, e enganosa porque representa soquetes em geral como se fossem sempre soquetes de rede e, especificamente, soquetes IP (
AF_INET
).
Resposta
Acredito que você perguntou sobre rede. Assim, 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.