This shows you the differences between two versions of the page.
so2:laboratoare:lab10 [2018/05/01 19:14] anda.nicolae [netfilter] |
so2:laboratoare:lab10 [2019/05/06 10:20] (current) liza_elena.babu [Structura socket] |
||
---|---|---|---|
Line 30: | Line 30: | ||
===== Noțiuni teoretice ===== | ===== Noțiuni teoretice ===== | ||
- | Dezvoltarea Internet-ului a dus la creșterea exponențială a aplicațiilor de rețea și, drept consecință, la creșterea cerințelor de viteza și productivitate a subsistemului de rețea (networking) al unui sistem de operare. Subsistemul de networking nu este o componentă esențială a nucleului unui sistem de operare (kernel-ul de Linux poate fi compilat fără suport de rețea). Este, însă, destul de puțin probabil pentru un sistem de calcul (sau chiar un dispozitiv embedded) să conțină un sistem de operare fără suport de rețea, datorită nevoii de conectivitate. Atât sistemele Linux (Unix), cât și Windows folosesc [[http://en.wikipedia.org/wiki/TCP/IP_model|stiva TCP/IP]]. Nucleul acestora va conține implementate protocoalele până la nivelul transport inclusiv, urmând ca protocoalele de nivel aplicație să fie implementate în user-space (HTTP, FTP, SSH, etc.). | + | Dezvoltarea Internet-ului a dus la creșterea exponențială a aplicațiilor de rețea și, drept consecință, la creșterea cerințelor de viteza și productivitate a subsistemului de rețea (networking) al unui sistem de operare. Subsistemul de networking nu este o componentă esențială a nucleului unui sistem de operare (kernel-ul Linux poate fi compilat fără suport de rețea). Este, însă, destul de puțin probabil pentru un sistem de calcul (sau chiar un dispozitiv embedded) să conțină un sistem de operare fără suport de rețea, datorită nevoii de conectivitate. Atât sistemele Linux (Unix), cât și Windows folosesc [[http://en.wikipedia.org/wiki/TCP/IP_model|stiva TCP/IP]]. Nucleul acestora va conține implementate protocoalele până la nivelul transport inclusiv, urmând ca protocoalele de nivel aplicație să fie implementate în user-space (HTTP, FTP, SSH, etc.). |
==== Networking în user-space ==== | ==== Networking în user-space ==== | ||
Line 258: | Line 258: | ||
int (*getname) (struct socket *sock, | int (*getname) (struct socket *sock, | ||
struct sockaddr *addr, | struct sockaddr *addr, | ||
- | int *sockaddr_len, int peer); | + | int peer); |
//... | //... | ||
</code> | </code> | ||
Line 271: | Line 271: | ||
</code> | </code> | ||
- | Se va realiza astfel instanțierea pointerilor de funcții cu apeluri specifice tipului de protocol asociat socket-ului. Apelurile [[https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L2512|sock_register]] și [https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L2545|sock_unregister]] sunt folosite pentru completarea vectorului [[https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L158|net_families]]. | + | Se va realiza astfel instanțierea pointerilor de funcții cu apeluri specifice tipului de protocol asociat socket-ului. Apelurile [[https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L2512|sock_register]] și [[https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L2545|sock_unregister]] sunt folosite pentru completarea vectorului [[https://elixir.bootlin.com/linux/v4.15/source/net/socket.c#L158|net_families]]. |
Pentru restul operațiilor cu socketi (în afară de creare, închidere și transmitere/recepție mesaj, prezentate mai sus, în secțiunea [[#Operații asupra structurii socket|Operații asupra structurii socket]]), se vor apela funcțiile date de pointerii din această structură. Spre exemplu, pentru operația ''bind'', care asociază unui socket un port pe mașina locală, vom avea următoarea secvență de cod: | Pentru restul operațiilor cu socketi (în afară de creare, închidere și transmitere/recepție mesaj, prezentate mai sus, în secțiunea [[#Operații asupra structurii socket|Operații asupra structurii socket]]), se vor apela funcțiile date de pointerii din această structură. Spre exemplu, pentru operația ''bind'', care asociază unui socket un port pe mașina locală, vom avea următoarea secvență de cod: | ||
Line 364: | Line 364: | ||
Structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/skbuff.h#L585|struct sk_buff]] (//socket buffer//) descrie un pachet de rețea. Câmpurile structurii conțin informații atât despre antetele și conținutul pachetelor cât și protocoalele utilizate, dispozitivul de rețea utilizat, pointeri către celelalte structuri ''struct sk_buff''. O descriere sumară a conținutului structurii este prezentată mai jos: | Structura [[https://elixir.bootlin.com/linux/v4.15/source/include/linux/skbuff.h#L585|struct sk_buff]] (//socket buffer//) descrie un pachet de rețea. Câmpurile structurii conțin informații atât despre antetele și conținutul pachetelor cât și protocoalele utilizate, dispozitivul de rețea utilizat, pointeri către celelalte structuri ''struct sk_buff''. O descriere sumară a conținutului structurii este prezentată mai jos: | ||
<code c> | <code c> | ||
- | struct sk_buff { | ||
struct sk_buff { | struct sk_buff { | ||
union { | union { |