Ce este o priză?

Ar putea cineva să-mi explice ce este un socket? Îl văd în multe acronime în contextul SSL etc.

De asemenea, de ce se numește socket? Este doar pentru că așa au inventat numele? Sau a fost primul nume cu care au venit?

Comentarii

  • În termeni laici ‘: o priză este un telefon. ‘ este lucrul pe care îl țineți în mână, care vă permite să purtați o conversație cu un alt telefon. Analogia se descompune puțin: majoritatea conversațiilor telefonice sunt de la egal la egal. Conexiunile socket sunt de la client la server. Clientul (cum ar fi, dar fără a se limita la, software pentru stații de lucru precum browserele) se conectează la un server (cum ar fi un server web, server de fișiere, server de autentificare sau altele). Un alt defect al analogiei: atunci când închideți o conexiune socket, socket-ul este distrus și trebuie să creați un socket nou înainte de a putea stabili o conexiune nouă.
  • It ‘

Răspuns

O priză este doar un punct final logic pentru comunicare. Ele există pe stratul de transport. Puteți trimite și primi lucruri pe un socket, puteți lega și asculta un socket. O priză este specifică unui protocol, mașină și port și este adresată ca atare în antetul unui pachet.

Ghidurile lui Beej către Rețea Programarea și Comunicarea între procese au ambele informații bune despre modul de utilizare a soclurilor și chiar răspundeți la această întrebare exactă .

Răspundeți

În termenii cei mai simpli, un socket este un pseudo-fișier care reprezintă o conexiune la rețea. Odată ce socket-ul a fost creat (folosind primitivele corespunzătoare și parametrii corespunzători pentru a identifica cealaltă gazdă), scrierile către socket sunt transformate în pachete de rețea care sunt trimise și datele primite din rețea pot fi citite din socket.

Într-o privință, soclurile sunt foarte asemănătoare cu conductele: arată ca niște fișiere ale programelor care le folosesc, dar nu au ca rezultat citirea sau scrierea pe un disc; mai degrabă, permit comunicarea cu un alt program (local în cazul țevilor și po la distanță în cazul prizelor). De asemenea, oferă, după cum menționați, comunicare bidirecțională (la fel ca o pereche de conducte conectate corect).

În cele din urmă, este comun ca programele de pe o singură mașină să comunice folosind protocoale de rețea standard, cum ar fi TCP ; ar fi risipitor să mergeți până la hardware-ul de rețea (dacă există!), calculând sumele de verificare etc., doar pentru a reveni la aceeași gazdă: aici intră socketurile de domenii Unix. Acestea seamănă mult cu socket-urile obișnuite , cu excepția faptului că conectează procese pe aceeași gazdă mai degrabă decât procese la distanță și nu încearcă să utilizeze deloc resurse de rețea. În acest fel, ele reprezintă un mediu de comunicare între procese.

După cum a menționat tripleee , în cursul istoriei BSD, conductele au fost introduse mai devreme decât soclurile și au fost reimplementate folosind socluri odată ce acestea au existat. Aceeași referință, Proiectarea și implementarea sistemului de operare FreeBSD , menționează că conductele au fost apoi readuse la o implementare non-socket din motive de performanță: acest lucru subliniază cu siguranță faptul că conductele au similarități.

Comentarii

  • Poate menționați și că conductele sunt anterioare soclurilor, dar odată ce interfața soclului a fost adăugată la Unix, a avut mult sens t o reimplementați conductele folosind prize locale.
  • @tripleee: ‘ este un punct istoric excelent. Doriți să furnizați o referință?
  • Googling rapid apare pagina 40 în Proiectarea și implementarea sistemului de operare FreeBSD ; textul menționează această modificare în 4.2BSD, dar clarifică, de asemenea, că nu mai este așa cum se face ‘, din motive de performanță.
  • Excelent, eu ‘ Voi adăuga acest lucru la răspunsul meu.
  • Cel mai bun răspuns techno din toate

Răspunsul

Acum, ce este?

Un socket sau „socket” pot fi mai multe lucruri:

În primul rând, este un gând model și o interfață de programare a aplicației (API) . Asta înseamnă că aveți un set de reguli pe care trebuie să le urmați și un set de funcții pe care le puteți utiliza pentru a scrie programe care fac ceva, conform unui contract specificat cu precizie. În acest caz particular, ceva înseamnă schimbul de date cu un alt program.

API-ul socket-uri abstractizează pe larg detaliile „comunicării” în general. Incapsulează cu cine vorbiți și cum, printr-o formă (aproape) consistentă și identică de tăiere cookie.
Puteți crea socketuri în diferite „domenii” (cum ar fi de ex.un „socket unix” sau un „socket internet”) și de diferite tipuri de comunicații (de exemplu, un socket „datagram” sau un socket „stream”) și vorbiți cu destinatari diferiți și totul funcționează exact la fel (bine, 99%, există, evident, diferențe minuscule pe care va trebui să le țineți cont).

Nu trebuie să știți (și nici nu vreți să știți!) dacă vorbiți cu un alt program de pe același computer sau pe un alt computer sau dacă există o rețea IPv4 sau IPv6 între aceste computere sau poate vreun alt protocol despre care nu ați auzit niciodată.

socket este, de asemenea, numele funcției de bibliotecă (sau syscall) care creează „socket-ul „, care este un tip special de fișier (totul în Unix este un fișier).

Cum se compară cu …

prizele se încadrează în aceeași categorie ca țevile și nume conducte

O conductă este un mijloc de o ne way comunicare între un cititor și un scriitor (ambele fiind programe) pe același computer. Simulează un flux de date (la fel ca de exemplu TCP).
Adică nu există „mesaje” sau „blocuri de date” individuale din punctul de vedere al conductei. Puteți copia orice cantitate de date într-un „capăt” și altcineva poate citi orice cantitate de date (nu neapărat la fel, și nu neapărat dintr-o dată) la „celălalt capăt” în aceeași ordine de octeți în care ați introdus-o .

O țeavă numită este, bine, pur și simplu o țeavă care deține un nume în sistemul de fișiere . Adică, este ceva care arată și se comportă la fel ca un fișier, apare în lista de directoare și îl puteți deschide, scrie în el, etc. etc. Rețineți că puteți crea și fișiere speciale socket (care ar fi un nume soclu).

Un soclu, pe de altă parte, este un mijloc de bidirecțional (” comunicare duplex „), ceea ce înseamnă că puteți scrie și citi din același soclu și nu aveți nevoie de două socluri separate pentru o comunicare bidirecțională.
De asemenea, un soclu poate acționa ca un flux (identic cu o conductă ), sau poate trimite mesaje discrete, nesigure, sau poate trimite mesaje discrete, ordonate (primele două funcționează pe orice domeniu, ultimele doar pe „domeniu unix”). Poate trimite mesaje (sau simula un flux) cuiva pe un computer complet diferit. O priză poate face chiar și o formă de comunicare unu-la-mulți (multicast) în anumite condiții.

Având în vedere acest lucru, este clar că prizele fac ceva mult mai complicat și în general au mai mult de aer decât conductele (care nu sunt în principiu decât un simplu memcpy către și dintr-un buffer!), dar dacă creați prize locale (adică pe același computer), sistemul de operare aplică de obicei o cale rapidă puternic optimizată, deci nu există într-adevăr o mare diferență.

comunicare între procese uneori menționat în ceea ce privește rețelele

Da, soclurile sunt o modalitate posibilă de comunicare între procese (memoria partajată și conductele fiind exemple de alternative). În același timp, acestea sunt utilizate pentru „rețea”, așa cum s-a explicat mai sus.

Răspuns

Un socket o abstracție . Oferă o interfață pentru aplicații pentru a utiliza o resursă de sistem (în acest caz, conexiunea la rețea) într-un mod care permite sistemului de operare să medieze și să organizeze utilizarea unei resurse limitate de către orice număr de aplicații.

Dacă datele trimise prin socket ar putea fi considerate plicuri de poștă, atunci socket-ul ar fi cutia dvs. poștală. Atașați o cutie poștală (priză) la casa dvs. (program) și introduceți poșta dvs. de ieșire (date) în ea. La o oră programată, poștașul (sistemul de operare) vine și vă preia mesajele trimise și lasă toate mesajele primite în aceeași cutie poștală. E-mailul dvs. de ieșire este transmis în numele dvs. destinatarului prin intermediul camionului poștașului (conexiune la rețea), împreună cu e-mailul tuturor vecinilor. Acest lucru vă permite să corespondați cu oameni îndepărtați, fără a fi nevoie de cheltuiala, timpul, dificultatea etc. de livrare a scrisorii dumneavoastră.

În ceea ce privește motivul pentru care sunt „numiți„ sockets ”bine, noțiunea că inventatorii ajung să-i spună cum doresc, probabil că joacă un rol important acolo. Deși, nu este un nume rău în opinia mea 🙂

Răspunde

Pentru udp sau tcp peste IP,

O adresă de socket este combinația dintre o adresă IP și un număr de port.

O adresă IP este adresa o mașină pe internet de ex unix.stackexchange.com has address 198.252.206.140

Cu toate acestea, fiecare mașină trebuie să poată furniza mai multe servicii, astfel majoritatea mașinilor vor furniza http (pagini web) pe portul 80 și ssh pe port 22, etc.

Deci unix.stackexchange.com:80 port 80 din unix.stackexchange.com (o priză) este punctul de acces al acestui site web.

Cu toate acestea, există și alte tipuri de socket, a se vedea comentariile de mai jos.

Comentarii

  • tcp / ip este doar un tip de priză. Există altele care nu au nimic de-a face cu tcp / ip.
  • câte tipuri de socketuri există?
  • @AbdulAlHazred, știu patru tipuri comune utilizate cu rețeaua IP, la fel cu ip6, două cu unix și două cu IPX. Nu m-am uitat la ax25, atm, sau appletalk. Există alte protocoale acceptate pe Linux și există protocoale pe care Linux nu le acceptă. În majoritatea cazurilor, fiecare protocol are socketuri de flux (tcp) și datagramă (udp). Socket-urile raw sunt, de asemenea, obișnuite, iar imcp poate avea, de asemenea, o interfață de socket.
  • Ideea este că acest răspuns este incomplet prin faptul că acoperă doar un tip de socket și este înșelător prin faptul că reprezintă socketurile în dacă ar fi întotdeauna socketuri de rețea și, în mod specific, socketuri IP (AF_INET).

Răspuns

Cred că ați întrebat despre rețea. Deci, serviciile TCP folosesc sockets ca punct de comunicare și sunt alcătuite dintr-o adresă IP, protocol și număr de port.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *