Qual è la differenza tra socket Unix e socket TCP / IP?


Risposte:


191

Un socket UNIX è un meccanismo di comunicazione tra processi che consente lo scambio di dati bidirezionale tra processi in esecuzione sulla stessa macchina.

I socket IP (in particolare i socket TCP / IP) sono un meccanismo che consente la comunicazione tra i processi sulla rete. In alcuni casi, è possibile utilizzare i socket TCP / IP per comunicare con i processi in esecuzione sullo stesso computer (utilizzando l'interfaccia di loopback).

I socket di dominio UNIX sanno che stanno eseguendo sullo stesso sistema, quindi possono evitare alcuni controlli e operazioni (come il routing); che li rende più veloci e leggeri delle prese IP. Quindi, se prevedi di comunicare con i processi sullo stesso host, questa è un'opzione migliore rispetto ai socket IP.

Modifica: secondo il commento di Nils Toedtmann : i socket di dominio UNIX sono soggetti alle autorizzazioni del file system, mentre i socket TCP possono essere controllati solo a livello di filtro pacchetti.


12
Forse aggiungere che i socket di dominio UNIX sono soggetti alle autorizzazioni del file system, mentre i socket TCP non lo sono. Di conseguenza, è molto più semplice regolare quali utenti hanno accesso a un socket di dominio UNIX piuttosto che a un socket TCP.
Nils Toedtmann,

@pQd, amico, puoi chiamarlo Unix IPC invece di Unix Sockets?
Pacerier,

4
@Pacerier Unix Socket è semplicemente un modo per ottenere unix IPC (memoria Interprocess condivisa tra gli altri), quindi non sarebbe corretto chiamare unix socket unix IPC.
fyquah95,

I socket TCP sono gestiti anche da Unix? I socket TCP fanno parte delle specifiche del protocollo TCP o qualsiasi protocollo potrebbe utilizzare socket IP?
Federico

@Federico Ho pubblicato una risposta che cerca di rispondere alla tua domanda, se hai bisogno di più approfondimento, per favore pubblica una nuova domanda.
Peter Green,

28

È possibile elencare i socket unix locali della propria macchina con il comando seguente:

netstat -a -p --unix

Divertiti!


9
I socket Unix non esistono su Windows. netstatfunziona comunque su Windows.
Mark Tomlin,

4
@apache, cosa simile in Windows chiamata "Named pipe".
esperto

5
Le pipe nominate sono presenti anche su Linux.
Sahil Singh,

9
@expert, named pipe in Windows è uguale alle named pipe in Unix. I socket IPC in Unix non hanno equivalenze in Windows
Pacerier,

2
Windows 10 ha il supporto per i socket Unix. Ci sono alcune limitazioni, ma è disponibile: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson,

12

Qual è la differenza tra socket Unix e socket TCP / IP?

Un socket TCP / IP viene utilizzato per la comunicazione attraverso le reti TCP / IP. Un socket TCP collegato è identificato dalla combinazione di IP locale, porta locale, IP remoto e porta remota. Un socket TCP in ascolto è identificato dalla porta locale e possibilmente dall'IP locale. AIUI almeno sui socket TCP / IP di Linux comporta sempre la generazione e la decodifica dei pacchetti TCP / IP, anche se il client e il server si trovano sulla stessa macchina.

Un socket di dominio unix (a volte abbreviato in unix socket) d'altra parte funziona su un singolo computer. I socket di ascolto vivono nella gerarchia del filesystem e l'accesso ad essi può essere controllato dalle autorizzazioni del filesystem.

Inoltre, un processo che accetta una connessione su un socket Unix può determinare l'ID utente del processo che si connette. Ciò può evitare la necessità di un passaggio di autenticazione. Invece di generare una password per il tuo server di database e includerne una copia nel codice del tuo webapp puoi semplicemente dire al server di database che l'utente che esegue il webapp ha accesso al corrispondente account utente nel database.


I socket TCP sono gestiti anche da Unix?

Ovviamente

I socket TCP fanno parte delle specifiche del protocollo TCP

Le specifiche del protocollo Internet tendono solo a riguardare ciò che accade sul cavo, la specifica TCP contiene una definizione di Socket ma tale definizione non è la stessa di come il termine viene utilizzato da "API socket".

L '"API socket", come sappiamo, è stata introdotta da BSD ma è stata successivamente copiata dappertutto ed è inclusa come parte dello standard posix. Le cose di base per i socket TCP e UDP tendono ad essere più o meno le stesse su piattaforme diverse ma le cose più avanzate che interagiscono con altre parti del sistema operativo variano, ad esempio su sistemi unix-like un socket è identificato da un handle di file e può essere letto / scritto dalle API dei file, questo non è il caso su Windows.

Alcune estensioni all'API socket sono state documentate in rfcs ma tali RFC sono solo "informativi".

o qualsiasi protocollo potrebbe utilizzare socket IP?

Quando un'applicazione crea esplicitamente un socket utilizzando la funzione "socket" (i socket vengono creati anche dalla funzione accept) passa tre parametri, "domain", "type" e "protocol". Tra questi tre parametri possono essere utilizzati per selezionare molti diversi tipi di socket.

  • domain seleziona la famiglia di protocolli / indirizzi in uso, ad esempio AF_INET per ipv4, AF_INET6 per ipv6, AF_Unix per percorsi di filesystem unix ecc.
  • type seleziona la semantica della comunicazione, i principali sono datagram e stream ma ci sono anche altri tipi più specializzati.
  • protocollo seleziona il protocollo da utilizzare, se è impostato su 0 verrà utilizzato un protocollo predefinito per la combinazione di dominio e tipo.

"I socket di ascolto vivono nella gerarchia del filesystem e l'accesso ad essi può essere controllato dalle autorizzazioni del filesystem." Questo significa che due server che hanno accesso allo stesso filesystem potrebbero essere in grado di comunicare su un socket?
user5359531

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.