Diferenças entre Sockets de Domínio Unix e Sockets de Rede?

3

Estou certo de que

  • Quando dois processos se comunicam por soquetes de rede, cada processo cria um soquete (cada soquete pertence a um processo) e os processos se comunicam por seus soquetes.

  • Quando dois processos se comunicam por soquetes de domínio Unix, apenas um soquete é criado (o que não pertence a nenhum processo) e ambos os processos se conectam ao mesmo soquete?

por Tim 18.10.2015 / 17:11

1 resposta

7

Você está confundindo duas coisas aqui.

Um soquete é um descritor de arquivo - um identificador - dado a um programa para que ele possa usar uma conexão de rede quase da mesma maneira que usa arquivos. A API de soquete é independente de protocolo; sockets podem ser criados para conexões IPv4 ou IPv6, mas (dado suporte ao kernel) também para coisas como DECnet, AppleTalk ou read Ethernet.

Como a API de soquete é bastante fácil de usar, mas como falar com um processo na mesma máquina usando um protocolo de rede real é ineficiente, em algum momento o soquete de domínio UNIX foi criado para permitir o uso da API de soquete sem essa ineficiência . Também adiciona alguns recursos extras; por exemplo, é possível passar descritores de arquivo para outro processo em um soquete de domínio UNIX.

Quando se usa soquetes de domínio UNIX, ambos os processos ainda contêm um soquete, um para cada lado da conexão. O uso do soquete não é diferente de, digamos, soquetes IPv4, além da configuração inicial da conexão.

Uma coisa que a API de soquete não pode prescindir é um endereço; não é possível criar um soquete sem passar um endereço para o qual conversar, e isso não é diferente para o soquete do domínio UNIX. Desde que é UNIX, onde tudo é um arquivo de qualquer maneira, foi decidido fazer com que esses endereços parecessem com nomes de arquivos. E como já estamos fazendo isso, faz sentido que esses endereços apareçam no sistema de arquivos, já que isso facilita identificá-los.

Infelizmente, o nome dado a essas coisas no sistema de arquivos era também 'soquete de domínio UNIX' (ou pelo menos era o que as pessoas começaram a chamá-las). Eles não são os soquetes reais no sentido da API do soquete; eles não poderiam ser, já que esses são apenas um número. Como tal, sua contraparte em um soquete IPv4 não é esse número, mas sim o endereço IP e o número da porta do par com o qual você está falando.

Ocasionalmente, acrescentarei que, como a API de soquete não lida diretamente com arquivos, essas representações de sistema de arquivos não são estritamente necessárias. De fato, o Linux tem um conceito de 'soquetes de domínio UNIX anônimos', que são exatamente isso: soquetes de domínio UNIX sem nenhum link no sistema de arquivos ...

    
por 18.10.2015 / 20:09