Explicação simples dos soquetes Unix

20

Posso pesquisar e já olhei para a entrada da Wikipedia e em alguns outros lugares, mas mesmo tendo alguma experiência em programação, realmente não entendo o conceito. Você pode me tratar como uma criança de 10 anos e me dar uma explicação clara sobre a comunicação por soquete?

Elzo Valugi
fonte
Escreva alguns aplicativos de teste pequenos usando-os. Você nem precisa de duas máquinas, apenas dois pequenos aplicativos para iniciar. Bingo.
Patrick Hughes
O Guia de Programação de Rede de Beej parece ser um texto de introdução muito popular para soquetes Unix, embora eu não possa dizer que gosto.
Nemanja Trifunovic
Eu já votei positivamente na resposta @DanielPittman, se eu tivesse que escrever, teria escrito a mesma resposta; No entanto, se você quiser mais ajuda, eu estenderia. Edite sua pergunta, coloque alguns antecedentes sobre o que você sabe e o que não sabe e também, deixe-me saber se você está procurando ajuda sobre como usar, como eles funcionam por dentro, ou teórico (design de protocolo) ou se está tentando avaliar para algum propósito?
Dipan Mehta
Aqui está um livro: Programação em Rede Unix . Qualquer pessoa na terra que respondesse a essa pergunta teria aprendido com essa mãe. Leia este livro, sua própria pergunta se tornará melhor.
Dipan Mehta
Você quer dizer soquetes BSD? Soquetes Unix funcionam apenas localmente.
Imel96

Respostas:

15

Deixe-me dar um exemplo: diga que deseja se comunicar / conversar com seu amigo, que mora no seu endereço. Para que isso aconteça, você deve estabelecer um "canal de comunicação". Digamos que você queira fazer essa comunicação usando telefones. Você sabe que existe uma rede de linhas telefônicas na cidade que se estende a todas as casas.

Agora, há uma tomada de telefone em sua casa e uma na casa de seus amigos. Para que a comunicação ocorra, você e seu amigo precisam se conectar à rede conectando o telefone ao soquete, nas duas extremidades da comunicação. Soquetes na programação são os mesmos, conceitualmente, que os soquetes do telefone.

Na programação, você tem dois processos (executando programas) que desejam se comunicar. Para isso, eles precisam estabelecer um vínculo de comunicação entre si. Novamente, há uma rede disponível, eles só precisam se conectar a essa rede usando algum tipo de soquete. Soquetes Unix são um desses soquetes que fornece essa conectividade / conectividade à rede. Portanto, em cada um dos dois programas, você terá algum código que faz o trabalho de conectar-se à rede por soquetes.

O resto são detalhes.

Nazar Merza
fonte
2
Eu rebaixaria isso se tivesse reputação suficiente. Seu texto não explica como o soquete funciona. Apenas o mesmo texto geral da Wikipedia. Como o soquete escuta ? Como a tomada do telefone pode escutar a conexão?
Verde
21

Os soquetes Unix são um soquete bidirecional - assim como um soquete baseado em IP, com o qual você provavelmente está familiarizado, e semelhante a um pipe, com o qual você provavelmente está familiarizado.

Eles têm um pequeno conjunto de propriedades interessantes:

  • Eles estão apenas no domínio "host local" - você não pode acessá-los pela rede, apenas na máquina local.
  • Você pode criá-los no modo "fluxo", onde eles apenas passam dados como um pipe como um fluxo de bytes.
  • Você pode criá-los no modo "datagrama", onde eles mantêm os limites entre as operações de envio. Isso permite que você mantenha o enquadramento sem criar seu próprio protocolo de enquadramento sobre um fluxo de bytes.
  • Eles usam o sistema de arquivos, ou no Linux, um "espaço de nome abstrato", como seu "endereço"
  • Você pode representar a outra extremidade, identificar com segurança o software de conexão ou passar identificadores de arquivo pelo soquete, dependendo do seu sistema operacional.

Essencialmente, eles são equivalentes a qualquer outro soquete - eles têm propriedades um pouco mais interessantes que os tubos, mas não são radicalmente diferentes. Eles geralmente têm maior latência de IPC do que um pipe e buffers geralmente maiores - embora você possa ajustar isso e isso depende da plataforma.

A propriedade final interessante a ser lembrada é que eles usam o sistema de arquivos como seu espaço para nome - assim como um canal nomeado, em vez de um canal anônimo, no qual o software sem relacionamento anterior pode se comunicar. (Soquetes de espaço para nome abstratos são os mesmos, mas o caminho "arquivo" não precisa existir.)

Não há nada mais profundo do que isso - eles não têm nenhuma propriedade oculta super secreta que os torne radicalmente diferentes de um pipe típico ou de uma conexão TCP com o host local.

Daniel Pittman
fonte
3
Obrigado, mas ainda acho complicado e cheio de argot.
Elzo Valugi
2
Por favor, não se ofenda com esta tentativa de resposta em uma linha, para ver se isso ajuda melhor: "Você sabe como os soquetes TCP / IP e UDP / IP funcionam? Estes são os mesmos, apenas sem a parte IP".
Daniel Pittman
Não estou ofendido, só quero entender. Obrigado. Vou estudá-los mais detalhadamente.
Elzo Valugi
4
Definir um termo usando esse termo (por exemplo: "soquetes Unix são soquetes bidirecionais") não explica nada para alguém que não sabe o que é soquete para começar.
Bryan Oakley