linux networking notes
DESCRIPTION
dsfgTRANSCRIPT
-
Proiectarea sistemelor de operare
Linux networking
Slide 1 (Notes) 05/29/2008
-
Linux networking
Implementarea socke ilor n Linux Rutarea n Linux Interfa a cu hardware-ul Optimiz ri
Slide 2 (Notes) 05/29/2008
-
Stive de protocoale
Retelele sunt controlate prin intermediul unor protocoale, de obicei grupate intr-o stiva de protocoale Avantajele unei stive de protocoale: modularitate Reduce complexitate Mai usor de inteles Usor de modificat
Slide 3 (Notes) 05/29/2008
-
ISO OSI vs TCP/IP
Aplicatie
TransportInternet
Acces retea
AplicatiePrezentare
SesiuneTransportRetea
Legatura de dateFizic
Slide 4 (Notes) 05/29/2008
-
Componente ale stivei de re ea n Linux
Berkely Socket Interface
Network device drivers
Queing discipline
Data link layer
Transport layerTCP UDP
Network layerIP NetFilter
BRIDGINGARPETH
Routing
Slide 5 (Notes) 05/29/2008
-
Implementarea socke ilor n Linux
struct FILE
struct socket
struct inode
f_opSocket file operations:- read- write-select...
f_inode
Slide 6 (Notes) 05/29/2008
-
Implementarea socke ilor n Linux (2)
struct socket
struct sock
struct inet_sock
struct tcp_sock
struct sock
struct inet_sock
struct udp_sock
struct socket
Slide 7 (Notes) 05/29/2008
-
Fluxul pachetelor intr-un ruter
Slide 8 (Notes) 05/29/2008
-
Tabela de rutare
Contine informatii necesare rutarii unui pachet pentru o retea cunoscuta Adresa retelei Masca retelei Interfata sau next hop-ul pe unde trebuie trimis pachetul Metrica
[tavi@tropaila tavi]$ /sbin/routeKernel IP routing tableDestination Gateway Genmask Flags Metric Ref Use Iface192.168.0.0 * 255.255.255.0 U 0 0 0 eth0172.16.1.0 192.168.58.1 255.255.255.0 UG 0 0 0 vmnet1172.16.125.0 * 255.255.255.0 U 0 0 0 vmnet8192.168.58.0 * 255.255.255.0 U 0 0 0 vmnet1127.0.0.0 * 255.0.0.0 U 0 0 0 lo
Slide 9 (Notes) 05/29/2008
-
Operatii necesare rutarii
Pentru pachetele primite se verifica daca adresa destinatie coincide cu vreo adresa locala Daca da, se trimite pachetul local Daca nu, se ruteaza pachetul
Se determina Interfata pe care trebuie trimis pachetul Adresa de nivel 2 a next hop-ului Adresa de nivel 3 a next hop-ului
daca este necesar se fragmenteaza / defragmenteaza pachetul se suprascrie header-ul de nivel 2 si se transmite pachetul de interfata determinata
Slide 10 (Notes) 05/29/2008
-
Implementarea rutarii in Linux
Procesul de rutare este initiat din bottom-half handler-ul asociat gestiunii retelei Pentru determinarea informatiilor de rutare se consulta in ordine Cache-ul de rute
Forwarding Information Database (FIDB)
Slide 11 (Notes) 05/29/2008
-
Forwarding Information Database
Structura de date ce contine informatii necesare rutarii O tabela cu 32 de intrari, cate una pentru fiecare masca de retea posibila O intrare in tabela contine un pointer catre o lista de structuri ce descriu rute cu aceasi masca de retea
Slide 12 (Notes) 05/29/2008
-
Forwarding Information Database (2)
Slide 13 (Notes) 05/29/2008
-
Forwarding Information Database (3)
Slide 14 (Notes) 05/29/2008
-
Rutarea prin FIB
Se consulta FIB incepand cu zona asociata celei mai specifice masti (/32) Se inspecteaza hash table-ul fiecarei zone Pentru a mari viteza de cautare se folosesc contoare pentru a indica cat de des a fost folosita o ruta; in cadrul unei liste din hash table nodurile se tin ordonate descrescator dupa acest contor Daca nu se face match in hash table-ul unei zone, se trece la urmatoarea Daca nu se face match pe nici o ruta se face drop pe pachet
Slide 15 (Notes) 05/29/2008
-
Cache-ul de rute
Rutarea fiecarui pachet prin FIB este extrem de lenta atunci cand tabela de rutare nu este foarte mica Pentru a mari viteza se foloseste un cache de rute Un hash table cu 256 de intrari Fiecare intrare contine o lista cu noduri ce descriu un triplet informatii necesare de rutere al acestui tip de pachet: adresele de nivel 2 si 3, interfata de iesire Nodurile sunt ordonate descrescator dupa un contor ce specifica cat de des a fost folosit acesta
Slide 16 (Notes) 05/29/2008
-
Cache-ul de rute (2)
Slide 17 (Notes) 05/29/2008
-
Rutarea prin cache-ul de rute
Se calculeaza indexul pentru hash table O combinatie intre adresa sursa, adresa destinatie si TOS Se parcurge lista asociata indexului Daca nu se gaseste nici o potrivire se ruteaza prin FIB Dupa determinarea informatiilor necesare rutarii se introduce o intrare in cache-ul de rute Daca se gaseste o potrivire se actualizeaza contorul nodului, si se reordoneaza lista Intrarile din cache-ul de rute sunt invalidate periodic
Slide 18 (Notes) 05/29/2008
-
Netfilter
Infrastructura folosit n Linux pentru implementarea facilit ilor de firewall & NAT Bazat pe hook-uri: NF_IP_PRE_ROUTING NF_IP_LOCAL_IN NF_IP_FORWARD NF_IP_LOCAL_OUT NF_IP_POST_ROUTING NF_IP_NUMHOOKS
Slide 19 (Notes) 05/29/2008
-
skb
Identific un pachet O parte linear Un vector de fragmente O lista de fragment (mai multe skb-uri nl n uite) Func ii de prelucrare: skb_pull, skb_push, skb_reserve, skb_put
Slide 20 (Notes) 05/29/2008
-
Interfa a cu hardware-ul
RX ring TX ring
Memorie
Slide 21 (Notes) 05/29/2008
-
Interfa a hardware (2)
RX ring umplut de SO cu buffere pentru pachetele recep ionate TX ring actualizat de SO pentru fiecare pachet de trimis Transferul pachetelor din/n memorie se face de c tre placa de re ea Procesorul este ntrerupt doar cnd S-a recep ionat un pachet Place de re ea confirm trimiterea unui pachet
Slide 22 (Notes) 05/29/2008
-
Procesare pachetelor
Se face n context softirq n context IRQ La RX: se face doar extragerea din ringul RX si plasarea pachetului n coada de procesare a socket-ului La TX: se face (eventual) doar eliberarea memoriei pentru un pachet trimis
Slide 23 (Notes) 05/29/2008
-
Interrupt coalescing
Se a teapt un num r de pachete sau un timeout nainte de a trimite ntreruperea Se reduce costul proces rii pe RX atunci cnd pachetele vin n burst Cre te laten a i jitter-ul
Slide 24 (Notes) 05/29/2008
-
NAPI
Acela i scop ca i interrupt coalescing, dar f r a influen a jitter-ul sau laten a Nu necesit suport hardware n momentul gener rii unei ntreruperi Se dezactiveaz ntreruperea pl cii de re ea Se proceseaz toate pachetele Abia apoi se activeaz ntreruperea la loc
Slide 25 (Notes) 05/29/2008
-
Scatter-gather
Un pachet poate fi format din zone ne-contigue de memorie Descriptorii de TX/RX mai au un bit: end-of-packet Necesar pentru zero-copying
Slide 26 (Notes) 05/29/2008
-
Checksum offloading
Checksum-ul pe pachetele TCP/UDP se efectueaz de c tre placa de re ea Place de re ea Prime te pseudo-header checksum-ul i pozi ia checksum-ului n hedear- ul TCP Necesar pentru zero-copying
Slide 27 (Notes) 05/29/2008
-
TCP offload
Implementarea stivei TCP/IP direct n placa de re ea Probleme Scalabilitate Securitate Confirman
Slide 28 (Notes) 05/29/2008
-
Transmit Segmentation offload
Optimizare stateless; TCP/UDP Stiva lucreaz cu segmente de dimensiune mare (pn la 64Kb)
Segmentele sunt apoi sparte n pachete n hardware de c tre place de re ea n software nainte de trimiterea c tre device driver (GSO generic segmentation offload)
Slide 29 (Notes) 05/29/2008
-
Large receive offload
Optimizare stateless; TCP/UDP Reversul TSO Dac se recep ioneaz pachete ale acelua i segment n ordine ele se vor agrega i c tre stiva se va trimite un pachet mare (pn la 64KB) Agregarea se poate face n hardware sau software Pentru a reduce laten a, n momentul n care se iesi din bulca NAPI se face flush
Slide 30 (Notes) 05/29/2008
-
splice
long splice(int fd_in, loff_t *off_in, int fd_out, loff_t *off_out, size_t len, unsigned int flags);
Se mut date de la fd_in la fd_out, f r a se face copierea dac este posibil Unul din file descriptori trebuie s fie neap rat un pipe Offset-ul pentru pipe trebuie s fie NULL Linux 2.6.25 ofer support complet pentru fi iere, socke i
i memorie (via vmsplice)
Slide 31 (Notes) 05/29/2008
-
Intel I/OAT
Controller pentru copierea din memorie n memorie via DMA Folosit la copierea din/n user-space a datelor socke ilor
Slide 32 (Notes) 05/29/2008