Semplice spiegazione delle prese Unix


20

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


Scrivi alcune piccole app di prova utilizzandole. Non hai nemmeno bisogno di due macchine, solo due piccole app per iniziare. Bingo.
Patrick Hughes,

La Guida alla programmazione in rete di Beej sembra essere un testo introduttivo molto popolare per i socket Unix, anche se non posso dire che mi piace.
Nemanja Trifunovic,

Ho già votato la risposta @DanielPittman, se dovessi scrivere avrei scritto la stessa risposta; Eppure, se desideri più aiuto, vorrei estendere. Per favore modifica la tua domanda, metti un po 'di cose su ciò che sai e ciò che non fai e anche, fammi sapere se stai cercando aiuto su come usare, come funzionano all'interno o teorico (progettazione del protocollo) o se stai provando valutare per qualche scopo?
Dipan Mehta,

Ecco un libro: Unix Network Programming . Chiunque sulla terra avrebbe risposto a questa domanda, avrebbe imparato da questa madre. Leggi questo libro, la tua stessa domanda migliorerà.
Dipan Mehta,

Vuoi dire prese BSD? I socket Unix funzionano solo localmente.
imel96,

Risposte:


15

Lascia che ti faccia un esempio: supponi di voler comunicare / chattare con il tuo amico, che non abita al tuo indirizzo. Perché ciò accada, è necessario stabilire un "canale di comunicazione". Di ', vuoi fare questa comunicazione usando i telefoni. Sai che esiste una rete di linee telefoniche in città che si estende ad ogni casa.

Ora c'è una presa telefonica a casa tua e una a casa dei tuoi amici. Affinché la comunicazione abbia luogo, tu e il tuo amico dovete collegarvi alla rete collegando il telefono alla presa, a entrambe le estremità della comunicazione. Le prese in programmazione sono le stesse, concettualmente, delle 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. Ancora una volta, è disponibile una rete, devono solo collegarsi a questa rete utilizzando 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.


2
Voterei questo voto se avessi abbastanza reputazione. Il tuo testo non spiega come funziona il socket. Proprio lo stesso testo generale di Wikipedia. Come ascolta la presa ? In che modo la tua presa telefonica può ascoltare la connessione?
Verde

21

I socket Unix sono un socket bidirezionale, proprio come un socket basato su IP, che probabilmente hai familiarità, e in qualche modo simile a un pipe, che probabilmente conosci.

Hanno un piccolo insieme di proprietà interessanti:

  • Sono solo nel dominio dell '"host locale": non è possibile 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à "datagramma", dove mantengono i confini tra le operazioni di invio. Ciò consente di conservare l'inquadratura senza creare il proprio protocollo di inquadratura su un flusso di byte.
  • Usano il filesystem, o su Linux, uno "spazio dei nomi astratto", come il loro "indirizzo"
  • Potrebbe essere possibile impersonare l'altra estremità, identificare in modo sicuro il software di connessione o passare gli handle di file sul socket, a seconda del sistema operativo in uso.

Fondamentalmente, sono l'equivalente di qualsiasi altra presa - hanno proprietà leggermente più interessanti dei tubi, ma non sono radicalmente diverse. In genere hanno una latenza IPC più elevata 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 pipe denominata, 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 esistere.)

Non c'è niente di più profondo di così: non hanno alcuna proprietà nascosta super segreta che li rende radicalmente diversi da una tipica pipe o da una connessione TCP a localhost.


3
Grazie ma lo trovo ancora complicato e pieno di argot.
Elzo Valugi,

2
Per favore non essere offeso da questo tentativo di risposta a una riga, per vedere se questo aiuta meglio: "Sai come funzionano i socket TCP / IP e UDP / IP? Questi sono gli stessi, solo senza la parte IP."
Daniel Pittman,

Non sono offeso, voglio solo capire. Grazie. Li studierò più in dettaglio.
Elzo Valugi,

4
Definire un termine usando quel termine (cioè: "I socket Unix sono un socket bidirezionale") non spiega nulla a qualcuno che non sa con cosa cominciare un socket.
Bryan Oakley

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.