Introdusă in 1981, BSD 4.1 UNIX
O interfaţă locală, creată/aparţinand de aplicaţie, controlată de SO în care procesul aplicaţiei poate atât transmite cât şi recepţiona mesaje către/de la alt proces al aplicaţiei (la distanţă sau local)
Doi sockeţi pe gazde separate „conectaţi” prin rutine de management al lăcaşului pentru SO. Aplicaţia vede numai socketul local.
Sockeţii sunt creaţi explicit, utilizaţi şi puţi în funcţiune de către aplicaţii. Ei se bazează pe paradigma client/server. Există doua tipuri de servicii de transport via IPA pentru socket:
- datagrame nesigure
- sigure, orientate pe flux
Nivelele de prezentare şi sesiune lipsesc în reţelele UNIX.
Sockeţi: aspectul conceptual
Fiecare socket are bufere de transmisie şi recepţie separate, posibilitatea de identificare a portului, parametri (aplicaţie interogativă şi setabilă).
Operaţiile socketului implementat ca sistem apelează la SO. Limitele utilizator/kernel se încucişează pe sus.
Servicii fără conexiune
Serviciu datagramă: protocoalele de transport de bază nu garantează livrarea.
Nu exista o identificare explicită a serverului sau clientului.
Dacă se iniţiază contactul cu cealaltă parte, trebuie cunoscute.
- adresa IP
- numărul portului sau procesul care aşteaptă să fie contactat
Dacă se aşteaptă contactul de la cealaltă parte, trebuie declarat:
- numărul portului la care se aşteaptă de cealaltă parte.
Crearea unui socket
Acelaşi terminal (socket) folosit pentru a transmite/recepţiona date.
Nu exista o asociere a priori a socketului cu reţeaua.
Trebuie să se specifice familia de protocoale de transport, şi serviciul specific la nivel de transport care se va folosi cu socketul:
Familia de protocoale | Nume simbolic |
TCP/IP Internet | AF_INET |
Xerox NS | AF_NS |
intra-host UNIX | AF_UNIX |
DEC DNA | AF_DECNET |
Tipul serviciului | Nume simbolic | Comentariu |
datagrama | SOCK_DGRAM | protocol UDP in AF_INET |
sigură, în ordine | SOCK_STREAM | protocol TCP in AF_INET |
socket brut | SOCK_RAW | acces direct la nivelul reţea |
Socket int (familia int, serviciul int, protocol int)
Familia este numele simbolic al familiei de protocoale.
Serviciul este numele simbolic al tipului de serviciu.
Protocolul permite o specificare mai bună a socketului brut. Pentru noi, acesta va fi 0.
Codul de răspuns de la socket() este este un descriptor de socket, folosit în toate apelurile de sistem legate de socket.
Exemplu:
#include <sys/types.h> #include<sys/ socket.h> int sockfd; if ( (sockfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { /* handle error */ }
Lasă un răspuns