Semplice spiegazione degli zoccoli Unix

18

Posso cercare e ho già guardato la voce di Wikipedia e in altri posti, ma anche se io ho qualche esperienza di programmazione, non riesco davvero a cogliere il concetto. Puoi trattarmi come un bambino di 10 anni e darmi una spiegazione chiara sulla comunicazione socket?

    
posta Elzo Valugi 20.02.2012 - 18:40
fonte

3 risposte

14

Lascia che ti faccia un esempio: Dì che vuoi comunicare / chattare con il tuo amico, che non vive al tuo indirizzo. Perché ciò accada, devi stabilire un "canale di comunicazione". Di ', vuoi fare questa comunicazione usando i telefoni. Sai che esiste una rete di linee telefoniche nella città che viene estesa ad ogni casa.

Ora, c'è una presa telefonica nella tua casa e una nella casa dei tuoi amici. Affinché la comunicazione abbia luogo, tu e il tuo amico dovete connettervi alla rete collegando il telefono alla presa, a entrambe le estremità della comunicazione. Le prese in programmazione sono le stesse, concettualmente, come le prese telefoniche.

Nella programmazione, hai due processi (programmi in esecuzione) che vogliono comunicare tra loro. Per questo, devono stabilire un collegamento di comunicazione tra loro. Di nuovo, c'è una rete disponibile, hanno solo bisogno di connettersi a questa rete usando una sorta di socket. I socket Unix sono uno di questi socket che fornisce questa connettività / connettività alla rete. Quindi, in ciascuno dei due programmi, avrai un pezzo di codice che fa il lavoro di connessione alla rete tramite socket.

Il resto sono dettagli.

    
risposta data 21.02.2012 - 05:28
fonte
19

I socket Unix sono un socket bidirezionale, proprio come un socket basato su IP, con cui probabilmente hai familiarità, e un po 'come un pipe, che probabilmente conosci.

Hanno un piccolo insieme di proprietà interessanti:

  • Sono solo nel dominio "dell'host locale" - non puoi accedervi tramite la rete, solo sul computer locale.
  • Puoi crearli in modalità "stream", dove passano semplicemente i dati come una pipe come un flusso di byte.
  • Puoi crearli in modalità "datagram", dove mantengono i confini tra le operazioni di invio. Ciò consente di conservare il framing senza creare il proprio protocollo di frammentazione su uno stream di byte.
  • Usano il filesystem, o su Linux, un "namespace astratto", come loro "indirizzo"
  • Potrebbe essere possibile impersonare l'altro capo, identificare in modo sicuro il software di connessione o passare gli handle del file sul socket, a seconda del sistema operativo.

Essenzialmente, sono l'equivalente di qualsiasi altro socket: hanno proprietà leggermente più interessanti delle pipe, ma non sono radicalmente differenti. Solitamente hanno una latenza IPC più alta rispetto a una pipe, e spesso buffer più grandi, anche se potresti essere in grado di ottimizzarlo, e dipende dalla piattaforma.

L'ultima proprietà interessante da ricordare è che usano il filesystem come loro spazio dei nomi - quindi sono come una named pipe, piuttosto che una pipe anonima, in quel software che nessuna relazione precedente può comunicare. (I socket dello spazio dei nomi astratti sono gli stessi, ma il percorso "file" non deve necessariamente esistere.)

Non c'è nulla di più profondo di quello - non hanno alcuna proprietà nascosta super-secret che li rende radicalmente diversi da una pipe tipica, o una connessione TCP a localhost.

    
risposta data 20.02.2012 - 18:59
fonte
0

Programmare i socket Linux, Parte 1: Usare TCP / IP ha funzionato abbastanza bene per me . Inizia con un'introduzione alle reti IP e ai livelli di rete, quindi prosegue mostrando come implementare un semplice server e client echo sia in C che in Python.

    
risposta data 21.02.2012 - 11:04
fonte

Leggi altre domande sui tag