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

85

É desta resposta:

link

    
por apache 20.03.2010 / 09:13

3 respostas

150

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

Soquetes IP (especialmente 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 sendo executados no mesmo sistema, portanto, podem 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 que os soquetes IP.

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

    
por 20.03.2010 / 09:39
21

Você pode listar seus próprios sockets unix locais com o seguinte comando:

netstat -a -p --unix

Divirta-se!

    
por 20.03.2010 / 13:49
7

What's the difference between Unix socket and TCP/IP socket?

Um soquete TCP / IP é usado para comunicação entre 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. AIUI, pelo menos no Linux, os soquetes TCP / IP sempre resultam na geração e decodificação de pacotes TCP / IP, mesmo se o cliente e o servidor estiverem na mesma máquina.

Por outro lado, um soquete de domínio unix (às vezes encurtado para um soquete unix) opera em uma única máquina. Os sockets de escuta vivem na hierarquia do sistema de arquivos e o acesso a eles pode ser controlado por 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 seu servidor de banco de dados e incluir uma cópia dela no código da sua webapp, basta informar ao servidor de banco de dados que o usuário que está executando o webapp tem acesso à conta de usuário correspondente no banco de dados.

TCP sockets are handled by Unix too?

Claro

TCP sockets is part of the TCP protocol specification

As especificações do 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 que a do termo "API sockets".

A "API sockets", 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 sockets TCP e UDP tende a ser o mesmo em diferentes plataformas, mas coisas e coisas mais avançadas que interagem com outras partes do sistema operacional variam, por exemplo, em sistemas unix-like, um socket é identificado por um identificador de arquivo e pode ser lido / escrito pelas APIs de arquivo, este não é o caso no Windows.

Algumas extensões para a API sockets foram documentadas em rfcs, mas essas RFCs são apenas "informativas".

or any protocol could use IP Sockets ?

Quando uma aplicação cria explicitamente um socket usando a função "socket" (soquetes também são criados pela função accept) ela passa três parâmetros, "domain", "type" e "protocol". Entre eles, esses três parâmetros podem ser usados para selecionar vários tipos diferentes de soquete.

    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.
  • O tipo
  • seleciona a semântica de comunicação, sendo as principais datagrama e fluxo, mas também há outros tipos mais especializados.
  • O protocolo
  • seleciona o protocolo a ser usado, se for definido como 0, um protocolo padrão para a combinação de domínio e o tipo será usado.
por 13.09.2018 / 17:32