O que é um soquete?

40

Alguém poderia me explicar o que é uma tomada? Eu vejo isso em muitas siglas no contexto de SSL, etc.

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

    
por chrisjlee 09.07.2011 / 02:42

7 respostas

38

Um soquete é apenas um endpoint 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 soquete é específico para um protocolo, máquina e porta, e é endereçado como tal no cabeçalho de um pacote.

Guias de Beej para Programação de Rede e Comunicação entre processos ambos têm boas informações sobre como usar soquetes e até mesmo responda a essa pergunta exata .

    
por 09.07.2011 / 03:08
56

Nos termos mais simples, um soquete é um pseudo-arquivo que representa uma conexão de rede. Depois que um soquete é criado (usando os primitivos apropriados e os parâmetros apropriados 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 sockets são muito semelhantes aos pipes: eles se parecem com os arquivos dos programas que os usam, 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 canos e possivelmente remoto no caso de soquetes). Eles também oferecem, como você mencionou, comunicação bidirecional (muito parecido com 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 percorrer todo o caminho até o hardware da rede (se houver!), computar somas de verificação, etc., apenas para voltar ao mesmo host: é aí que entram os domínios Unix. eles conectam processos no mesmo host em vez de processos remotos e não tentam usar nenhum recurso de rede. Desta forma, eles são um meio de comunicação entre processos.

Como o tripleee mencionou, no decorrer da história do BSD, os pipes foram introduzidos antes dos soquetes, e foram reimplementados usando sockets uma vez que eles existissem. A mesma referência, O Design e Implementação do Sistema Operacional FreeBSD , menciona que os pipes foram então revertidos para uma implementação não-socket por razões de desempenho: isto certamente enfatiza o fato de que tubos compartilham similaridades.

    
por 31.03.2015 / 23:12
5

Um soquete uma abstração. Ele fornece uma interface para que os aplicativos utilizem um recurso do sistema (nesse 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 puderem ser considerados envelopes de email, o soquete será sua caixa de correio. Você anexa uma caixa de correio (soquete) à sua casa (programa) e coloca seu correio de saída (dados) nela. Em um horário agendado, o carteiro (sistema operacional) aparece e pega sua correspondência de saída e deixa qualquer correio recebido na mesma caixa de correio. O seu correio de saída é transportado em seu nome para o destinatário através do caminhão do carteiro (conexão de rede) junto com o correio de todos os seus vizinhos. Isso permite que você corresponda a pessoas distantes sem a necessidade de despesas, tempo, dificuldade, etc., de entregar a carta você mesmo.

Por que eles são chamados de 'bases' bem, a noção de que os inventores chamam de o que eles querem provavelmente desempenha um grande papel lá. Porém, não é um nome ruim na minha opinião:)

    
por 09.07.2011 / 12:00
4

Agora, o que é isso?

Um soquete ou "soquete" pode ter 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 você 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. Neste caso particular, algo significa trocar dados com outro programa.

A API de soquetes abstrai amplamente os detalhes de "comunicação" em geral. Ele encapsula com quem você fala e como, tudo 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 um "soquete de internet") e de diferentes tipos de comunicação (por exemplo, um soquete "datagrama" ou um soquete "stream") e conversar com diferentes destinatários e tudo funciona exatamente da mesma forma (bem, 99%, obviamente existem diferenças mínimas que você terá que explicar).

Você não precisa saber (e nem mesmo quer saber!) se você fala com outro programa no mesmo computador ou em outro computador, 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 socket ", que é um tipo especial de arquivo (tudo no Unix é um arquivo).

Como se compara a ...

sockets fall into the same category as pipes and name pipes

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

Um canal named é, simplesmente, um pipe que possui um nome no sistema de arquivos . Isto é, é algo que se parece e se comporta como um arquivo, aparece na lista de diretórios e você pode abri-lo, escrever nele, etc. etc. Note que você também pode criar arquivos especiais de socket (que seria um socket nomeado) .

Um socket, por outro lado, é um meio de comunicação bidireccional ("duplex"), o que significa que pode escrever e ler a partir do mesmo socket 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 pipe), ou pode enviar mensagens discretas e não confiáveis, ou enviar mensagens ordenadas discretas (os dois primeiros funcionam em qualquer domínio, o último somente em "domínio unix"). ). Pode enviar mensagens (ou simular um fluxo) para alguém em um computador totalmente diferente. Um socket pode até fazer uma forma de comunicação um-para-muitos (multicast) sob algumas condições.

Com isso em mente, é claro que os sockets fazem algo muito mais complicado e geralmente tem mais overhead do que pipes (que são basicamente não mais do que um simples memcpy para e de um buffer! ), mas se você criar soquetes locais (ou seja, no mesmo computador), o sistema operacional geralmente aplica um caminho rápido altamente otimizado, portanto, não há muita diferença.

inter-process communication sometimes mentioned with regard to networks

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

    
por 01.04.2015 / 15:24
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 ex. 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 de unix.stackexchange.com (um soquete) é o ponto de acesso deste site.

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

    
por 01.04.2015 / 01:11
0

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

    
por 17.03.2016 / 09:43
-1

Essa é uma ótima pergunta. Pense nisso por um segundo ... o que é um soquete?

Uma tomada pode ser comparada a uma tomada de parede / receptáculo

Um socket pode ter um estado LISTEN ou um estado ESTABLISHED

Um socket é uma janela entre o seu servidor / sistema operacional que serve você e o inter net

Um soquete permite que o usuário se conecte ao mundo externo, "através do espaço cibernético"

Um soquete é exatamente como soa como uma saída em sua casa e na rede. Ele permite que um usuário ou dono da casa o insira para ter acesso a mais.

    
por 07.05.2018 / 19:59