linux networking notes

32
Proiectarea sistemelor de operare Linux networking Slide 1 (Notes) 05/29/2008

Upload: bronec10

Post on 29-Sep-2015

280 views

Category:

Documents


4 download

DESCRIPTION

dsfg

TRANSCRIPT

  • 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