Qualcuno potrebbe spiegarmi cos'è una presa? Lo vedo in molti acronimi nel contesto di SSL, ecc.
Inoltre, perché si chiama socket? È solo perché era quello che un nome hanno inventato? O era il primo nome che hanno inventato?
Qualcuno potrebbe spiegarmi cos'è una presa? Lo vedo in molti acronimi nel contesto di SSL, ecc.
Inoltre, perché si chiama socket? È solo perché era quello che un nome hanno inventato? O era il primo nome che hanno inventato?
Risposte:
Un socket è solo un endpoint logico per la comunicazione. Esistono sul livello di trasporto. Puoi inviare e ricevere cose su un socket, puoi associare e ascoltare un socket. Un socket è specifico di un protocollo, una macchina e una porta e viene indirizzato come tale nell'intestazione di un pacchetto.
Le guide di Beej alla programmazione in rete e alla comunicazione tra processi hanno entrambe buone informazioni su come utilizzare i socket e persino rispondere a questa domanda esatta .
In parole povere, un socket è uno pseudo-file che rappresenta una connessione di rete. Una volta creato un socket (utilizzando le primitive appropriate e i parametri corretti per identificare l'altro host), le scritture sul socket vengono trasformate in pacchetti di rete che vengono inviati e i dati ricevuti dalla rete possono essere letti dal socket.
Da un lato, i socket sono molto simili ai pipe: sembrano file ai programmi che li usano, ma non danno luogo a lettura o scrittura su disco; piuttosto, consentono la comunicazione con un altro programma (locale nel caso di tubi e possibilmente remoto nel caso di prese). Offrono anche, come dici tu, comunicazione bidirezionale (proprio come una coppia di tubi correttamente collegati potrebbe).
Infine, è comune che i programmi su un singolo computer comunichino tramite protocolli di rete standard, come TCP; sarebbe inutile andare fino all'hardware di rete (se presente!), checksum di calcolo, ecc., solo per tornare allo stesso host: ecco dove entrano i socket dei domini Unix. Questi sono molto simili ai normali socket, tranne che connettono i processi sullo stesso host anziché i processi remoti e non tentano affatto di utilizzare alcuna risorsa di rete. In questo modo, sono un mezzo di comunicazione tra processi.
Come menzionato da Tripleee, nel corso della storia di BSD, le pipe sono state introdotte prima delle prese e sono state reimplementate usando le prese una volta che esistevano. Lo stesso riferimento, La progettazione e l'implementazione del sistema operativo FreeBSD , menziona che le pipe sono state poi convertite in un'implementazione senza socket per motivi di prestazioni: questo certamente sottolinea il fatto che le pipe condividono somiglianze.
Una presa un'astrazione. Fornisce un'interfaccia per le applicazioni per utilizzare una risorsa di sistema (in questo caso la connessione di rete) in modo da consentire al sistema operativo di mediare e organizzare l'uso di una risorsa limitata da un numero qualsiasi di applicazioni.
Se i dati inviati attraverso il socket potrebbero essere considerati buste di posta, il socket sarebbe la tua casella di posta. Alleghi una cassetta postale (presa) a casa tua (programma) e inserisci la tua posta (dati) in uscita. A un orario prestabilito arriva il postino (sistema operativo) che preleva la posta in uscita e rilascia la posta in arrivo nella stessa cassetta postale. La tua posta in uscita viene trasmessa per tuo conto al destinatario tramite il camion del postino (connessione di rete) insieme a tutta la posta dei tuoi vicini. Ciò consente di comunicare con persone lontane senza la necessità di spese, tempi, difficoltà, ecc. Di consegnare la lettera da soli.
Per quanto riguarda il motivo per cui vengono chiamati "socket" bene, l'idea che gli inventori riescano a chiamarlo come vogliono probabilmente gioca un ruolo importante lì. Tuttavia, secondo me non è un brutto nome :)
Un socket o "socket" può essere diverse cose:
Innanzitutto, è un modello di pensiero e un'interfaccia di programmazione dell'applicazione (API) . Ciò significa che hai una serie di regole che devi seguire e una serie di funzioni che puoi usare per scrivere programmi che fanno qualcosa, secondo un contratto specificato con precisione. In questo caso particolare, qualcosa significa scambiare dati con un altro programma.
L'API socket estrae ampiamente i dettagli della "comunicazione" in generale. Incapsula con chi parli e come, attraverso un form (quasi) coerente e identico cookie-cutter.
È possibile creare socket in diversi "domini" (come ad esempio un "socket unix" o un "socket Internet") e di diversi tipi di comunicazione (ad esempio un socket "datagramma" o un "flusso") e parlare con destinatari diversi e tutto funziona esattamente allo stesso modo (beh, 99%, ci sono ovviamente delle minuscole differenze che dovrai tenere in considerazione).
Non hai bisogno di sapere (e non vuoi nemmeno sapere!) Se parli con un altro programma sullo stesso computer o su un altro computer, o se c'è una rete IPv4 o IPv6 tra quei computer, o forse qualche altro protocollo di cui non hai mai sentito parlare.
socket
è anche il nome della funzione di libreria (o syscall) che crea "il socket ", che è un tipo speciale di file (tutto in Unix è un file).
le prese rientrano nella stessa categoria delle pipe e delle pipe dei nomi
Una pipe è un mezzo di comunicazione unidirezionale tra un lettore e uno scrittore (entrambi programmi) sullo stesso computer. Simula un flusso di dati (proprio come ad esempio TCP).
Cioè, dal punto di vista della pipe non esistono singoli "messaggi" o "blocchi di dati". Puoi copiare qualsiasi quantità di dati in "un'estremità" e qualcun altro può leggere qualsiasi quantità di dati (non necessariamente la stessa, e non necessariamente in una sola volta) dall'altra estremità nello stesso ordine di byte che hai lo spinse dentro.
Una pipe con nome è, beh, semplicemente una pipe che possiede un nome nel filesystem . Cioè, è qualcosa che assomiglia e si comporta proprio come un file, appare nell'elenco delle directory e puoi aprirlo, scriverlo, ecc. Ecc. Nota che puoi anche creare file speciali socket (che sarebbe un socket chiamato) .
Un socket, d'altra parte, è un mezzo di comunicazione a due vie ("duplex"), il che significa che è possibile scrivere e leggere dalla stessa presa e non sono necessarie due prese separate per una comunicazione a due vie.
Inoltre, un socket può fungere da flusso (identico a una pipe), oppure può inviare messaggi discreti e inaffidabili oppure può inviare messaggi ordinati e discreti (i primi due funzionano su qualsiasi dominio, l'ultimo solo su "dominio unix" ). Può inviare messaggi (o simulare un flusso) a qualcuno su un computer completamente diverso. Un socket può persino eseguire una forma di comunicazione uno-a-molti (multicast) in alcune condizioni.
Con questo in mente, è chiaro che i socket fanno qualcosa di molto più complicato e generalmente hanno un overhead maggiore rispetto alle pipe (che in pratica non sono altro che un semplice memcpy
da e verso un buffer!), Ma se si creano socket locali (cioè sullo stesso computer), il sistema operativo di solito applica un percorso rapido fortemente ottimizzato, quindi non c'è davvero molta differenza.
comunicazione tra processi talvolta menzionata per quanto riguarda le reti
Sì, i socket sono un possibile modo di comunicazione tra processi (memoria condivisa e pipe sono esempi di alternative). Allo stesso tempo, vengono utilizzati per il "networking", come spiegato sopra.
Per udp o tcp su IP,
Un indirizzo socket è la combinazione di un indirizzo IP e un numero di porta.
Un indirizzo IP è l'indirizzo di una macchina su Internet, ad es unix.stackexchange.com has address 198.252.206.140
Tuttavia, ogni macchina deve essere in grado di fornire più di un servizio, quindi la maggior parte delle macchine fornirà http (pagine Web) sulla porta 80 e ssh sulla porta 22 e così via.
Quindi la unix.stackexchange.com:80
porta 80
di unix.stackexchange.com
(un socket) è il punto di accesso di questo sito web.
Tuttavia, esistono altri tipi di socket, vedere i commenti di seguito.
AF_INET
socket IP ( ).
Credo che tu abbia chiesto del networking. Quindi i servizi TCP usano i socket come punto di comunicazione e sono composti da un indirizzo IP, protocollo e numero di porta.