Qualcuno potrebbe spiegarmi cosè un socket? Lo vedo in molti acronimi nel contesto di SSL, ecc.
Inoltre, perché si chiama socket? È semplicemente perché era il nome che hanno inventato? O era il primo nome che hanno inventato?
Commenti
- In parole povere ‘: una presa è un telefono. ‘ è la cosa che tieni in mano che ti consente di conversare con un altro telefono. Lanalogia si interrompe un po : la maggior parte delle conversazioni telefoniche sono peer-to-peer. Le connessioni socket sono da client a server. Il client (come, ma non limitato a, software per workstation come i browser) si connette a un server (come un server web, file server, server di autenticazione o altro). Un altro difetto nellanalogia: quando chiudi una connessione socket, il socket viene distrutto e devi creare un nuovo socket prima di poter stabilire una nuova connessione.
- It ‘ non è poi così male per unanalogia. Un server è solo un call center e può avere molte centinaia di chiamate attive contemporaneamente.
Rispondi
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 per un protocollo, una macchina e una porta e viene indirizzato come tale nellintestazione di un pacchetto.
Le guide di Beej “alla Rete Sia la programmazione e la comunicazione tra processi hanno buone informazioni su come utilizzare i socket e anche rispondi a questa esatta domanda .
Risposta
In termini più semplici, un socket è uno pseudo-file che rappresenta una connessione di rete. Una volta che un socket è stato creato (usando le primitive appropriate ei parametri appropriati per identificare laltro 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 alle pipe: sembrano proprio dei file ai programmi che li utilizzano, ma non risultano in lettura o scrittura su un disco; piuttosto, consentono la comunicazione con un altro programma (locale nel caso di pipe e po notevolmente remoto nel caso delle prese). Offrono anche, come hai detto, la comunicazione bidirezionale (molto simile a una coppia di pipe correttamente connesse).
Infine, è comune che i programmi su una singola macchina comunichino utilizzando protocolli di rete standard, come TCP ; sarebbe uno spreco andare fino in fondo allhardware di rete (se esiste!), calcolare i checksum, ecc., solo per tornare allo stesso host: è lì che entrano in gioco i socket dei domini Unix. Quelli sono molto simili ai normali socket , tranne per il fatto che collegano processi sullo stesso host piuttosto che processi remoti e non tentano affatto di utilizzare alcuna risorsa di rete. In questo modo, sono un mezzo di comunicazione tra processi.
Come menzionato in tre parti , nel corso della storia di BSD, i pipe sono stati introdotti prima dei socket e sono stati reimplementati usando i socket una volta che esistevano. Lo stesso riferimento, The Design and Implementation of the FreeBSD Operating System , menziona che i pipe sono stati quindi ripristinati a unimplementazione non socket per motivi di prestazioni: questo certamente sottolinea il fatto che le pipe condividono somiglianze.
Commenti
- Forse anche menzionarlo le pipe sono antecedenti ai socket, ma una volta aggiunta linterfaccia socket a Unix, aveva molto senso t o reimplementare le pipe usando socket locali.
- @tripleee: questo ‘ è un grande punto storico. Vuoi fornire un riferimento?
- Una rapida ricerca su Google mostra pagina 40 in Progettazione e implementazione del sistema operativo FreeBSD ; il testo menziona questo cambiamento in 4.2BSD ma chiarisce anche che non è più così che ‘ è fatto, per motivi di prestazioni.
- Eccellente, io ‘ aggiungerò questo alla mia risposta.
- La migliore risposta techno in tutto
Risposta
Che cosè?
Un socket, o “socket” può essere diverse cose:
Prima di tutto, è un pensiero model e un interfaccia di programmazione dellapplicazione (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 precisamente specificato. In questo caso particolare, qualcosa significa scambiare dati con un altro programma.
LAPI dei socket astrae ampiamente i dettagli della “comunicazione” in generale. Incapsula le persone con cui parli e come, il tutto attraverso un modulo (quasi) coerente e identico.
Puoi creare socket in diversi “domini” (come ad es.una “presa unix” o una “presa Internet”) e di diversi tipi di comunicazione (ad esempio una presa “datagramma” o una presa “flusso”) e parlare con destinatari diversi, e tutto funziona esattamente allo stesso modo (beh, il 99%, ci sono ovviamente piccole differenze di cui dovrai tener conto).
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 tra questi computer è presente una rete IPv4 o IPv6 o forse un 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).
Come si confronta con …
i socket rientrano nella stessa categoria di pipe e nome pipe
Un pipe è un mezzo di o ne way comunicazione 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 “unestremità” e qualcun altro può leggere qualsiasi quantità di dati (non necessariamente la stessa, e non necessariamente in una volta sola) all “altra estremità” nello stesso ordine di byte in cui lhai inserita .
Una pipe con nome è, beh, semplicemente una pipe che possiede un nome nel filesystem . Cioè, è qualcosa che sembra e si comporta proprio come un file, appare nellelenco delle directory e puoi aprirlo, scriverci, ecc. Ecc. Nota che puoi anche creare file speciali per socket (che sarebbero un nome socket).
Un socket, daltra parte, è un mezzo di bidirezionale (” duplex “), il che significa che puoi scrivere e leggere dallo stesso socket e non hai bisogno di due socket separati per una comunicazione bidirezionale.
Inoltre, un socket può fungere da flusso (identico a un pipe ), oppure può inviare messaggi discreti e inaffidabili, oppure può inviare messaggi discreti e ordinati (i primi due funzionano su qualsiasi dominio, lultimo solo su “dominio unix”). Può inviare messaggi (o simulare uno stream) a qualcuno su un computer completamente diverso. Un socket può anche fare 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 più overhead dei pipe (che in pratica non sono altro che un semplice memcpy
da e verso un buffer!), ma se crei socket locali (es. sullo stesso computer), il sistema operativo di solito applica un percorso veloce fortemente ottimizzato, quindi non cè davvero molta differenza.
comunicazione tra processi a volte menzionato riguardo alle 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.
Risposta
Un socket unastrazione . Fornisce uninterfaccia alle applicazioni per utilizzare una risorsa di sistema (in questo caso la connessione di rete) in un modo che consente al sistema operativo di mediare e organizzare luso di una risorsa limitata da parte di un numero qualsiasi di applicazioni.
Se i dati inviati attraverso il socket potessero essere pensati come buste di posta, allora il socket sarebbe la tua casella di posta. Alleghi una casella di posta (presa) a casa tua (programma) e ci metti la posta in uscita (dati). Allora programmata arriva il postino (sistema operativo) che raccoglie la posta in uscita e lascia la posta in arrivo nella stessa casella di posta. La 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ò ti consente di corrispondere con persone lontane senza la necessità di spese, tempo, difficoltà, ecc. Per consegnare la lettera da solo.
Per quanto riguarda il motivo per cui vengono “chiamate” prese “, beh, lidea che gli inventori possono chiamarlo come vogliono probabilmente gioca un ruolo importante lì. Tuttavia, secondo me non è un brutto nome 🙂
Risposta
Per udp o tcp su IP,
un indirizzo socket è la combinazione di un indirizzo IP e un numero di porta.
Un indirizzo IP è lindirizzo 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 unix.stackexchange.com:80
porta 80
di unix.stackexchange.com
(una presa) è il punto di accesso di questo sito web.
Tuttavia ci sono altri tipi di socket, vedere i commenti di seguito.
Commenti
- tcp / ip è solo un tipo di presa. Ce ne sono altri che non hanno nulla a che fare con tcp / ip.
- quanti diversi tipi di socket ci sono?
- @AbdulAlHazred, conosco quattro tipi comuni usati con il networking ip, lo stesso con ip6, due con unix e due con IPX. Non ho esaminato ax25, atm o appletalk. Ci sono altri protocolli supportati su Linux e ci sono protocolli che Linux non supporta. Nella maggior parte dei casi ogni protocollo ha socket stream (tcp) e datagram (udp). Anche i socket raw sono comuni e imcp può anche avere uninterfaccia socket.
- Il punto è che questa risposta è incompleta in quanto copre solo un tipo di socket e fuorviante in quanto rappresenta i socket in generale come se fossero sempre socket di rete e in particolare socket IP (
AF_INET
).
Risposta
Credo che tu abbia chiesto informazioni sul networking. Quindi i servizi TCP utilizzano i socket come punto di comunicazione e sono costituiti da un indirizzo IP, protocollo e numero di porta.