Qual é a diferença entre o soquete Unix e o soquete TCP / IP?

Respostas:

191

Um soquete UNIX é um mecanismo de comunicação entre processos que permite a troca bidirecional de dados entre processos em execução na mesma máquina.

Soquetes IP (principalmente soquetes TCP / IP) são um mecanismo que permite a comunicação entre processos pela rede. Em alguns casos, você pode usar soquetes TCP / IP para conversar com processos em execução no mesmo computador (usando a interface de loopback).

Os soquetes de domínio UNIX sabem que estão executando no mesmo sistema, para evitar algumas verificações e operações (como roteamento); o que os torna mais rápidos e mais leves que os soquetes IP. Portanto, se você planeja se comunicar com processos no mesmo host, essa é uma opção melhor do que os soquetes IP.

Edit: Conforme comentário de Nils Toedtmann : soquetes de domínio UNIX estão sujeitos a permissões do sistema de arquivos, enquanto soquetes TCP podem ser controlados apenas no nível do filtro de pacotes.

pQd
fonte
12
Talvez adicione que os soquetes de domínio UNIX estejam sujeitos a permissões do sistema de arquivos, enquanto os soquetes TCP não. Como resultado, é muito mais fácil regular quais usuários têm acesso a um soquete de domínio UNIX do que a um soquete TCP.
Nils Toedtmann
@pQd, Cara, você pode chamá-lo de Unix IPC em vez de Unix Sockets?
Pacerier
4
Os soquetes @Pacerier Unix são simplesmente uma maneira de obter o IPC unix (memória de processo compartilhada entre outros), portanto, não seria correto chamar soquetes unix de IPC unix.
Fyquah95 28/05
Soquetes TCP também são tratados pelo Unix? Os soquetes TCP fazem parte da especificação do protocolo TCP ou qualquer protocolo pode usar os soquetes IP?
Federico
@Federico Publiquei uma resposta que tenta responder à sua pergunta. Se você precisar de mais detalhes, poste uma nova pergunta.
Peter Green,
28

Você pode listar os soquetes unix locais da sua própria máquina com o seguinte comando:

netstat -a -p --unix

Diverta-se!

O zelador do Unix
fonte
9
Soquetes Unix não existem no Windows. netstatno entanto, funciona no Windows.
21412 Mark Tomlin
4
@apache, coisa semelhante no Windows chamada "pipes nomeados".
expert
5
Os pipes nomeados também estão presentes no Linux.
Sahil Singh
9
@expert, pipes nomeados no Windows é igual a pipes nomeados no Unix. Soquetes IPC em Unix não têm equivalência no Windows
Pacerier
2
O Windows 10 tem suporte para soquetes Unix. Existem algumas limitações, mas estão disponíveis: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

Qual é a diferença entre o soquete Unix e o soquete TCP / IP?

Um soquete TCP / IP é usado para comunicação através de redes TCP / IP. Um soquete TCP conectado é identificado pela combinação de IP local, porta local, IP remoto e porta remota. Um soquete TCP de escuta é identificado pela porta local e possivelmente pelo IP local. A AIUI pelo menos nos soquetes TCP / IP do Linux sempre resulta na geração e decodificação de pacotes TCP / IP, mesmo se o cliente e o servidor estiverem na mesma máquina.

Um soquete de domínio unix (às vezes reduzido para soquete unix), por outro lado, opera em uma única máquina. Os soquetes de escuta vivem na hierarquia do sistema de arquivos e o acesso a eles pode ser controlado pelas permissões do sistema de arquivos.

Além disso, um processo que aceita uma conexão em um soquete Unix pode determinar o ID do usuário do processo que se conecta. Isso pode evitar a necessidade de uma etapa de autenticação. Em vez de gerar uma senha para o servidor de banco de dados e incluir uma cópia dela no código do aplicativo da web, basta informar ao servidor do banco de dados que o usuário que está executando o aplicativo da web tem acesso à conta de usuário correspondente no banco de dados.


Soquetes TCP também são tratados pelo Unix?

Claro

Os soquetes TCP fazem parte da especificação do protocolo TCP

As especificações de protocolo da Internet tendem a se preocupar apenas com o que acontece na conexão, a especificação TCP contém uma definição de Socket, mas essa definição não é a mesma de como o termo é usado pela "API de sockets".

A "API de soquetes", como a conhecemos, foi introduzida pelo BSD, mas depois foi copiada em todo o lugar e é incluída como parte do padrão posix. O material básico para soquetes TCP e UDP tende a ser o mesmo em diferentes plataformas, mas o material mais avançado que interage com outras partes do sistema operacional varia, por exemplo, em sistemas tipo unix, um soquete é identificado por um identificador de arquivo e pode ser lido / gravado pelas APIs do arquivo, esse não é o caso no Windows.

Algumas extensões da API de soquetes foram documentadas em rfcs, mas esses RFCs são apenas "informativos".

ou algum protocolo poderia usar soquetes IP?

Quando um aplicativo cria explicitamente um soquete usando a função "soquete" (soquetes também são criados pela função de aceitação), ele passa três parâmetros, "domínio", "tipo" e "protocolo". Entre eles, esses três parâmetros podem ser usados ​​para selecionar muitos tipos diferentes de soquetes.

  • O domínio seleciona a família de protocolos / endereços em uso, por exemplo, AF_INET para ipv4, AF_INET6 para ipv6, AF_Unix para caminhos do sistema de arquivos unix etc.
  • type seleciona a semântica da comunicação, as principais sendo datagrama e fluxo, mas também existem outros tipos mais especializados.
  • protocol seleciona o protocolo a ser usado, se estiver definido como 0, será utilizado um protocolo padrão para a combinação de domínio e tipo.
Peter Green
fonte
"Os soquetes de escuta vivem na hierarquia do sistema de arquivos e o acesso a eles pode ser controlado pelas permissões do sistema de arquivos." Isso significa que dois servidores que têm acesso ao mesmo sistema de arquivos podem se comunicar por um soquete?
user5359531
Infelizmente, AIUI não. superuser.com/questions/352263/…
Peter Green