Priză de rețea - Network socket

O priză de rețea este o structură software dintr-un nod de rețea al unei rețele de calculatoare care servește ca punct final pentru trimiterea și primirea de date prin rețea. Structura și proprietățile unui socket sunt definite de o interfață de programare a aplicației (API) pentru arhitectura de rețea. Soclurile sunt create numai pe durata de viață a unui proces al unei aplicații care rulează în nod.

Datorită standardizării protocoalelor TCP / IP în dezvoltarea Internetului , termenul socket de rețea este cel mai frecvent utilizat în contextul suitei de protocol Internet și, prin urmare, este adesea denumit și socket Internet . În acest context, un socket este identificat extern altor gazde prin adresa sa de socket , care este triada protocolului de transport , adresa IP și numărul portului .

Termenul socket este, de asemenea, utilizat pentru punctul final al software-ului de comunicare inter-proces (IPC) dintre noduri , care utilizează adesea același API ca socket de rețea.

Utilizare

Utilizarea termenului de priză în software este analogă funcției unui conector electric feminin , un dispozitiv în hardware pentru comunicația între noduri interconectate cu un cablu electric . În mod similar, termenul de port este utilizat pentru puncte finale fizice externe la un nod sau dispozitiv.

Interfața de programare a aplicației (API) pentru stiva de protocol de rețea creează un handle pentru fiecare soclu creat de o aplicație, denumit în mod obișnuit un descriptor de soclu . În sistemele de operare tip Unix , acest descriptor este un tip de descriptor de fișiere . Este stocat prin procesul de aplicare pentru utilizare cu fiecare operație de citire și scriere pe canalul de comunicație.

La momentul creării cu API-ul, o priză de rețea este legată de combinația unui tip de protocol de rețea care trebuie utilizat pentru transmisii, o adresă de rețea a gazdei și un număr de port . Porturile sunt resurse numerotate care reprezintă un alt tip de structură software a nodului. Acestea sunt utilizate ca tipuri de servicii și, odată create de un proces, servesc ca o componentă de locație adresabilă extern (din rețea), astfel încât alte gazde să poată stabili conexiuni.

Soclurile de rețea pot fi dedicate conexiunilor persistente pentru comunicarea între două noduri sau pot participa la comunicații fără conexiune și multicast .

În practică, datorită proliferării protocoalelor TCP / IP utilizate pe internet, termenul socket de rețea se referă de obicei la utilizarea cu Internet Protocol (IP). Prin urmare, se numește adesea și soclu Internet .

Adrese de soclu

O aplicație poate comunica cu un proces la distanță prin schimbul de date cu TCP / IP, cunoscând combinația de tip de protocol, adresă IP și număr de port. Această combinație este adesea cunoscută sub numele de adresă de socket . Este mânerul de acces orientat spre rețea la priza de rețea. Procesul de la distanță stabilește un socket de rețea în propria instanță a stivei de protocol și folosește API-ul de rețea pentru a se conecta la aplicație, prezentând propria adresă de socket pentru utilizare de către aplicație.

Implementare

O stivă de protocol , furnizată de obicei de sistemul de operare (mai degrabă decât ca o bibliotecă separată, de exemplu), este un set de servicii care permit proceselor să comunice printr-o rețea utilizând protocoalele pe care stiva le implementează. Sistemul de operare transmite sarcina utilă a pachetelor IP primite către aplicația corespunzătoare prin extragerea informațiilor despre adresa socketului din antetele IP și protocolul de transport și extragerea anteturilor din datele aplicației.

Interfața de programare a aplicațiilor (API) care programele folosesc pentru a comunica cu stiva de protocol, folosind socluri de rețea, se numește o priză API . Dezvoltarea programelor de aplicații care utilizează acest API se numește programare socket sau programare de rețea . API-urile de socket-uri de internet se bazează de obicei pe standardul de socket-uri Berkeley . În standardul Berkeley sockets, soclurile sunt o formă de descriptor de fișiere , datorită filosofiei Unix conform căreia „totul este un fișier” și analogiilor dintre socluri și fișiere. Ambele au funcții de citit, scris, deschis și închis. În practică, diferențele încordează analogia și diferite interfețe (trimitere și primire) sunt utilizate pe un socket. În comunicarea inter-proces , fiecare capăt are, în general, propriul socket.

În protocoalele Internet standard TCP și UDP, o adresă de soclu este combinația dintre o adresă IP și un număr de port , la fel ca un capăt al unei conexiuni telefonice este combinația unui număr de telefon și o anumită extensie . Socket-urile nu trebuie să aibă o adresă sursă, de exemplu, numai pentru trimiterea de date, dar dacă un program leagă un socket de o adresă sursă, socket-ul poate fi utilizat pentru a primi date trimise la acea adresă. Pe baza acestei adrese, socket-urile de internet livrează pachetele de date primite la procesul de aplicare corespunzător .

Socket se referă adesea în mod specific la un socket de internet sau socket TCP. O priză de internet este caracterizată minim prin următoarele:

  • adresa locală de soclu, formată din adresa IP locală și (pentru TCP și UDP, dar nu IP) un număr de port
  • protocol: Un protocol de transport, de exemplu, TCP, UDP, IP brut. Aceasta înseamnă că punctele finale (locale sau la distanță) cu portul TCP 53 și portul UDP 53 sunt socket-uri distincte, în timp ce IP nu are porturi.
  • Un soclu care a fost conectat la un alt soclu, de exemplu, în timpul stabilirii unei conexiuni TCP, are și o adresă de soclu la distanță.

Definiție

Distincțiile dintre un socket (reprezentare internă), descriptorul de soclu (identificator abstract) și adresa de soclu (adresa publică) sunt subtile, iar acestea nu sunt întotdeauna distinse în utilizarea de zi cu zi. Mai mult, definițiile specifice ale unui socket diferă între autori. În IETF Request for Comments , Internet Standards , în multe manuale, precum și în acest articol, termenul socket se referă la o entitate care este identificată în mod unic prin numărul de socket. În alte manuale, termenul socket se referă la o adresă locală de socket, adică o „combinație între o adresă IP și un număr de port”. În definiția inițială a socketului dată în RFC 147, așa cum a fost legată de rețeaua ARPA în 1971, „socket-ul este specificat ca un număr de 32 de biți, cu socketuri care identifică socket-urile de primire și socket-urile impare care identifică socket-urile de trimitere”. Astăzi, însă, comunicațiile socket sunt bidirecționale.

În cadrul sistemului de operare și al aplicației care a creat un socket, un socket este menționat printr-o valoare întreagă unică numită descriptor de socket .

Instrumente

Pe sistemele de operare de tip Unix și Microsoft Windows , instrumentele pentru linia de comandă netstat sau ss sunt utilizate pentru a lista socket-urile stabilite și informațiile conexe.

Exemplu

Acest exemplu, modelat în conformitate cu interfața socket-ului Berkeley, trimite șirul „Hello, world!” prin TCP la portul 80 al gazdei cu adresa 1.2.3.4. Acesta ilustrează crearea unui socket (getSocket), conectarea acestuia la gazda de la distanță, trimiterea șirului și, în cele din urmă, închiderea socketului:

Socket mysocket = getSocket(type = "TCP")
connect(mysocket, address = "1.2.3.4", port = "80")
send(mysocket, "Hello, world!")
close(mysocket)

Tipuri

Sunt disponibile mai multe tipuri de prize de internet:

Socluri pentru datagramă
Socluri fără conexiune , care utilizează User Datagram Protocol (UDP). Fiecare pachet trimis sau primit pe o priză de datagramă este adresat și direcționat individual. Comanda și fiabilitatea nu sunt garantate cu soclurile datagramelor, astfel încât mai multe pachete trimise de la o mașină sau proces la alta pot ajunge în orice ordine sau s-ar putea să nu ajungă deloc. Poate fi necesară o configurație specială pentru a trimite transmisii pe o priză de datagramă. Pentru a primi pachete de difuzare, un socket de datagramă nu ar trebui să fie legat de o anumită adresă, deși în unele implementări, pachetele de difuzare pot fi recepționate și atunci când un socket de datagramă este legat de o adresă specifică.
Socluri pentru flux
Socluri orientate spre conexiune, care utilizează Protocolul de control al transmisiei (TCP), Protocolul de transmisie al controlului fluxului (SCTP) sau Protocolul de control al congestiei datagramelor (DCCP). O priză de flux oferă un flux secvențiat și unic de date fără erori fără limite de înregistrare, cu mecanisme bine definite pentru crearea și distrugerea conexiunilor și raportarea erorilor. O priză de flux transmite datele în mod fiabil , în ordine și cu capacități în afara benzii . Pe Internet, socket-urile de flux sunt de obicei implementate utilizând TCP, astfel încât aplicațiile să poată rula în orice rețea utilizând protocolul TCP / IP.
Prize brute
Permiteți trimiterea și primirea directă de pachete IP fără formatarea stratului de transport specific protocolului. Cu alte tipuri de socket-uri, sarcina utilă este încapsulată automat în conformitate cu protocolul de strat de transport ales (de ex. TCP, UDP), iar utilizatorul socket-ului nu este conștient de existența anteturilor de protocol care sunt difuzate cu sarcina utilă. Când citiți dintr-o priză brută, anteturile sunt de obicei incluse. Când transmiteți pachete dintr-o priză brută, adăugarea automată a unui antet este opțională.
Majoritatea interfețelor de programare a aplicațiilor de socket (API), de exemplu, cele bazate pe socket-uri Berkeley , acceptă socket-uri brute. Windows XP a fost lansat în 2001 cu suport pentru socket brut implementat în interfața Winsock , dar trei ani mai târziu, Microsoft a limitat suportul pentru socket brut Winsock din motive de securitate.
Soclurile brute sunt utilizate în aplicații legate de securitate, cum ar fi Nmap . Un caz de utilizare pentru socket-urile brute este implementarea de noi protocoale de strat de transport în spațiul utilizatorului . Socket-urile brute sunt de obicei disponibile în echipamente de rețea și sunt utilizate pentru protocoale de rutare precum Internet Group Management Protocol (IGMP) și Open Shortest Path First (OSPF) și în Internet Control Message Protocol (ICMP) folosit, printre altele, de către ping utilitate .

Alte tipuri de socket-uri sunt implementate peste alte protocoale de transport, cum ar fi Arhitectura rețelei de sisteme și socket-urile de domeniu Unix pentru comunicarea inter-proces internă.

Stări de soclu în modelul client-server

Procesele computerizate care furnizează servicii de aplicații sunt denumite servere și creează socluri la pornire care se află în starea de ascultare . Aceste socketuri așteaptă inițiative din programele clientului .

Un server TCP poate deservi mai mulți clienți concomitent prin crearea unui socket dedicat unic pentru fiecare conexiune client într-un nou proces copil sau fir de procesare pentru fiecare client. Acestea sunt în starea stabilită atunci când o conexiune virtuală socket-to-socket sau un circuit virtual (VC), cunoscut și sub numele de sesiune TCP , este stabilită cu socket-ul de la distanță, oferind un flux de octeți duplex .

Un server poate crea mai multe socket-uri TCP stabilite concomitent cu același număr de port local și adresă IP locală, fiecare mapat la propriul proces server-copil, servind propriul proces client. Acestea sunt tratate ca socketuri diferite de sistemul de operare, deoarece adresa socket-ului de la distanță (adresa IP a clientului sau numărul portului) este diferită; adică din moment ce au tupluri de perechi de socket diferite .

Soclurile UDP nu au o stare stabilită , deoarece protocolul este fără conexiune . Un proces de server UDP gestionează secvențial datagramele primite de la toți clienții la distanță prin același socket. Soclurile UDP nu sunt identificate de adresa de la distanță, ci doar de adresa locală, deși fiecare mesaj are o adresă de la distanță asociată care poate fi preluată din fiecare datagramă cu interfața de programare a aplicației de rețea (API).

Perechi de soclu

Soclurile de comunicare locale și de la distanță se numesc perechi de socluri . Fiecare pereche de socket este descrisă de un 4-tuplu unic format din adrese IP sursă și destinație și numere de port, adică adrese de socket locale și la distanță. După cum sa discutat mai sus, în cazul TCP, o pereche de soclu este asociată la fiecare capăt al conexiunii cu un 4-tuplu unic.

Istorie

Termenul socket datează publicării RFC 147 în 1971, când a fost folosit în ARPANET. Majoritatea implementărilor moderne ale soclurilor se bazează pe soclurile Berkeley (1983) și alte stive precum Winsock (1991). Berkeley sockets API din Berkeley Software Distribution (BSD), a apărut cu sistemul de operare 4.2BSD Unix ca API. Cu toate acestea, abia în 1989 UC Berkeley a putut elibera versiuni ale sistemului său de operare și ale bibliotecii de rețea libere de constrângerile de licențiere ale Unix protejate prin drepturi de autor ale AT&T .

În c. În 1987, AT&T a introdus interfața de strat de transport (TLI) bazată pe STREAMS în UNIX System V Release 3 (SRV3). și a continuat în versiunea 4 (SVR4).

Alte implementări timpurii au fost scrise pentru TOPS-20 , MVS , VM , IBM-DOS (PCIP).

Socluri în echipamente de rețea

Socketul este în primul rând un concept utilizat în stratul de transport al suitei de protocol Internet sau stratul de sesiune al modelului OSI . Echipamentele de rețea, cum ar fi routerele , care funcționează la nivelul internetului și comutatoarele , care operează la nivelul link-ului , nu necesită implementări ale stratului de transport. Cu toate acestea, firewall-urile de rețea , traducătorii de adrese de rețea și serverele proxy țin evidența perechilor active de socketuri. În comutatoarele multistrat și calitatea serviciului (QoS) suport în routere, fluxurile de pachete pot fi identificate prin extragerea informațiilor despre perechile de socketuri.

Soclurile brute sunt de obicei disponibile în echipamente de rețea și sunt utilizate pentru protocoale de rutare, cum ar fi IGRP și OSPF , și pentru protocolul de control al mesajelor pe Internet (ICMP).

Vezi si

Referințe

Lecturi suplimentare

  • Jones, Anthony; Ohlund, Jim (2002). Programare în rețea pentru Microsoft Windows . ISBN 0-7356-1579-9.

linkuri externe