2009-04-23 7 views
7

Quando si utilizza il socket nel dominio UNIX, è consigliabile utilizzare il nome del percorso per la directory di directory montata sul disco locale. Il dominio UNIX consente solo comunicazioni interprocesso per processi che funzionano sulla stessa macchina.Dominio AF_UNIX: perché utilizzare solo nomi file locali?

Potete spiegare la linea sopra indicata? Si tratta di un socket nel DOMINIO UNIX.

Grazie!

risposta

12

Un socket di dominio Unix o un socket IPC (socket di comunicazione tra processi) è un endpoint di comunicazione dati simile a un socket Internet, ma non utilizza un protocollo di rete per la comunicazione. Viene utilizzato nei sistemi operativi POSIX per la comunicazione tra processi. Il termine POSIX standard corretto è POSIX Local IPC Sockets.

Le connessioni di dominio Unix vengono visualizzate come flussi di byte, proprio come le connessioni di rete, ma tutti i dati rimangono all'interno del computer locale. I socket di dominio UNIX usano il file system come spazio dei nomi di indirizzo, cioè sono referenziati da processi come inode nel file system. Ciò consente a due processi distinti di aprire lo stesso socket per comunicare. Tuttavia, la comunicazione effettiva (lo scambio di dati) non utilizza il file system, ma i buffer nella memoria del kernel.

Oltre all'invio di dati, i processi possono inviare descrittori di file attraverso una connessione socket di dominio Unix utilizzando le chiamate di sistema sendmsg() e recvmsg().

+0

grazie per la risposta, così unix dominio socket è per la comunicazione interprocesso tra due processi sullo stesso sistema, proprio come qualsiasi altro meccanismo ipc come sharedmemory.So utilizzando unix dominio non possiamo fare comunicazione tra due macchine. – mawia

+1

@mawia: è corretto. Ad esempio, è possibile parlare al server X window locale su un socket di dominio Unix impostando la variabile d'ambiente DISPLAY su ": 0.0" o su un socket TCP/IP impostandolo su "localhost: 0.0". –

+0

Cercare AF_INET per i socket IP per comunicare tra diversi host. – user39113

4

Gli endpoint dei socket di dominio UNIX sono rappresentati da file nel file system (anziché da host/porta).

Tuttavia, la comunicazione tra i processi viene eseguita all'interno del sistema locale e non comporta la memorizzazione di un file ricercabile da nessuna parte.

Il vantaggio dell'utilizzo del file system come spazio dei nomi per gli endpoint è la possibilità di applicare normali autorizzazioni file e ACL, se non è possibile aprire il punto finale che non è possibile connettersi. Le prese IP non hanno questo meccanismo.

+0

/* Gli ACL possono essere applicati - se non è possibile aprire il punto finale non è possibile connettersi. */ plz spiegare le linee precedenti del proprio. – mawia

+1

significa che (ad esempio) se il nome file UNIX è chmod 0700, solo il proprietario del file (o root) può aprire il socket. Quindi c'è un ulteriore livello di sicurezza applicato prima che il socket possa essere aperto. – Alnitak

+0

Grazie Alnitak !! – mawia

4

Significa che se si crea un socket AF_UNIX su un disco NFS che è condiviso tra due macchine A e B, non si può avere un processo su A scrittura di dati sul socket unix e un processo su B che legge i dati da quel socket .

La comunicazione avviene a livello di kernel e puoi trasferire i dati solo tra processi che si trovano nello stesso kernel.

+0

Vorrei che NFS avesse la possibilità di proxy quelli. Trovo le autorizzazioni di mount (default deny) più convenienti di netfilter (permesso di default). – Tobu