15
1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei Întreruperi, copiere, şi contoare de timp circulare/timing wheels; pentru Pathfinder şi Sting Fiecare dispozitiv de reţea este un sistem construit prin interconectarea unor sub-sisteme. Comportamentul unui router depinde de decizii luate la diferite scale de timp. Proiectarea unui sistem eficient presupune mutarea în spaţiu (spre alte subsisteme) a câtorva din funcţiile sale, sau mutarea în timp (anterior sau posterior momentului aparent în care funcţia este necesară).

curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

  • Upload
    dohanh

  • View
    218

  • Download
    0

Embed Size (px)

Citation preview

Page 1: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

1

Curs 3

Introducere în algoritmica de reţea

Tehnici de reducere a congestiei

• Întreruperi, copiere, şi contoare – de timp circulare/timing wheels; pentru Pathfinder şi

Sting • Fiecare dispozitiv de reţea este un sistem

construit prin interconectarea unor sub-sisteme. • Comportamentul unui router depinde de decizii

luate la diferite scale de timp. • Proiectarea unui sistem eficient presupune

mutarea în spaţiu (spre alte subsisteme) a câtorva din funcţiile sale, sau mutarea în timp (anterior sau posterior momentului aparent în care funcţia este necesară).

Page 2: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

2

Sistem de detectare a intruşilor-marchează pachetele de intrare suspecte. Atac – inundarea buffer-ului/depăşirea capacităţii buffer-ului, când codul maşinii C se plasează în antetul de reţea F. - Staţia destinaţie alocă un buffer prea mic pentru câmpul F al antetului şi nu verifică depăşirea/inundarea, codul C poate ajunge în stiva staţiei destinaţie.

- Intrusul poate face ca staţia destinaţie să execute codul rău C (va prelua controlul

staţiei destinaţie).

Exemplu: depistarea pachetelor rele (evil packets)

Detecţia intruşilor

Atac încorporat în câmpul Web URL (Uniform Resource Locator) destinaţie.

URL-urile care conţin un cod dăunător sunt prea lungi sau conţin caractere neobişnuite, cum este #. Monitorul poate marca astfel de câmpuri.

A URL, colloquially termed a web address, is a reference to a web resource that specifies its location on a computer network and a mechanism for retrieving it.

Page 3: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

3

Proiectarea unui detector de intruşi

Arhitectul de securitate trimite o specificare arhitectului de chip-uri. Proiectantul de chip-uri poate folosi următoarele procese de proiectare :

proiectarea strawman şi rafinarea proiectarii, prin conceperea unui

algoritm mai bun, relaxarea specificaţiilor şi exploatarea hardware-ului.

Proiectarea strawman

Pentru detectarea unui pachet dăunător: se contorizează fiecare caracter într-un tablou contor, se compară valorile cu cele din tabloul de praguri.

A straw man is a common form of argument and is an informal fallacy based on giving the impression of refuting an opponent's argument, while refuting an argument that was not presented by that opponent.

Page 4: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

4

Tabloul de praguri T Verificarea lungimii totale este implementată direct. Verificarea unor caractere suspicioase predominante :

Chip-ul păstrează două tablouri : (de praguri) T şi (de contorizare) C, cu câte 256 de elemente (unul pentru fiecare valoare posibilă). T conţine procentul acceptabil (ca o fracţiune din lungimea totală a URL-ului) pentru fiecare caracter. Dacă frecvența apariţiilor unui caracter într-un URL trece peste prag, pachetul este marcat. Fiecare caracter are un prag diferit.

Tabloul de contorizare C Conţine contorul curent C[i] pentru fiecare caracter i posibil. Când chip-ul citeşte un nou caracter “i” in URL,

se incrementează C[i] cu 1. C[i] are iniţial valoarea 0 pentru toate valorile lui i, când un nou pachet este întâlnit. Procesul de incrementare începe numai după ce chip-ul analizează antetul HTTP şi recunoaşte începutul URL-ului. Sfârşitul URL-ului este reprezentat cu două caractere de rând nou.

Page 5: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

5

Incrementarea

După ce a fost întâlnit sfârşitul URL-ului, chip-ul realizează o ultimă parcurgere a tabloului C. Dacă C[ j] ≥ L⋅T [ j] pentru orice j (unde L este lungimea URL-ului) pachetul va fi marcat.

Presupunem că pachetele vin cu viteză mare în monitor şi dorim să terminăm procesarea pachetului înainte de sosirea următorului. Această cerinţă, numită procesare la viteza liniei/wire speed processing, este des întâlnită în reţele; se previne amânarea procesării chiar şi în cel mai defavorabil caz.

Procesarea la viteza liniei Chip-ul ar trebui să facă un număr mic şi constant de operaţii pentru fiecare octet al URL-ului. Presupunem că pasul principal de incrementare

al contorului poate fi făcut pe durata recepţiei octetului. Cele două treceri prin tablou, pentru iniţializare şi verificare a depăşirilor de prag iau mult timp. Dimensiunea minimă a unui pachet este de 40 de

octeţi, incluzând doar antetele de reţea. Adăugând 768 operaţii în plus (1scriere şi 1 citire pentru fiecare element din C, şi 1 citire din T pentru fiecare din cei 256 indici) modelul de proiectare devine irealizabil.

Page 6: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

6

Gândirea algoritmică

Intuitiv, a doua trecere prin tablourile C şi T de la sfârşit pare o risipă. Este suficientă avertizarea când orice caracter depăşeşte pragul. Atunci de ce să verificam toate caracterele ? Să urmărim doar cea mai mare valoare din contorul de caractere, c; la sfârşit algoritmul trebuie să verifice doar dacă c e deasupra pragului, ţinând cont de L.

Evitarea buclei finale urmărind doar Max, valoarea celui mai mare contor relativ la valoarea de prag întâlnită.

Page 7: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

7

Limitări

Un caracter nesuspicios : “e” poate apărea des, i se atribuie un prag ridicat. Dacă ţinem evidenţa numai pentru “e”, 20 de apariţii de exemplu, s-ar putea să nu mai ţinem evidenţa lui “#” cu 10 apariţii. Dacă pragul pentru

“#” este mult mai mic, algoritmul poate duce la un răspuns negativ fals:

chip-ul poate eşua la alarmarea despre un pachet care ar trebui marcat.

Chip-ul ţine evidenţa celei mai mari valori a contorului relativizat, Max, corespunzătoare unui caracter k oarecare, astfel încât C[k ]/T [k ] = Max este cel mai mare dintre toate caracterele contorizate până acum. Dacă un caracter nou i este citit, chip-ul incrementează C[i]. Dacă C[i]/T [i] > Max , atunci chip-ul înlocuieşte valoarea curentă a lui Max memorată, cu C[i]/T [i] . La sfârşitul procesării URL-ului, chip-ul

ne alertează dacă Max ≥ L .

Corecţie

Page 8: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

8

Corecţie (cont) Iată de ce această soluţie e bună: dacă Max = C[k]/T [k] ≥ L , evident că pachetul trebuie marcat, deoarece caracterul k depăşeşte pragul. Pe de altă parte, dacă C[k]/T [k] < L , atunci pentru orice i, avem C[i]/T [i] ≤ C[k ]/T [k ] < L . Dacă Max cade sub prag, atunci nici un caracter nu va trece peste prag. Nu pot exista răspunsuri false negative.

Rafinarea algoritmului

Noul algoritm încă trebuie să realizeze operaţia de împărţire. Ar trebui evitată dacă se poate – dar cum ? Probabil că pragurile nu trebuie să fie numere reale exacte în virgulă flotantă; probabil că 2.78% poate fi aproximat cu 3%. De ce să nu aproximăm pragul cu o putere a lui 2, în loc să folosim valoarea exactă a pragului respectiv ? Dacă pragul este 1/29, de ce să nu îl aproximăm cu 1/32 ?

Page 9: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

9

Exploatarea hardware-ului

Un prag ca 1/32 poate fi codat compact ca o putere a lui 2. Această valoare de prag deplasată/shifted poate fi memorată în tabloul de praguri, în locul unei fracţii. Când este întâlnit un caracter j, chip-ul incrementează C[ j] şi-l deplasează apoi spre stânga – împărţirea cu 1/ x este înlocuită cu înmulţirea lui x cu pragul indicat. Dacă valoarea deplasată e mai mare decât ultima valoare Max stocată, chip-ul înlocuieşte vechea valoare cu noua valoare şi continuă.

Logica necesară pentru procesarea unui octet

Constă dintr-o deplasare şi o comparaţie. E necesar doar un registru pentru memorarea valorii Max. E necesară o citire a tabloului Prag (pentru valoarea deplasată), o citire a tabloului Contor (pentru valoarea vechiului contor) şi o scriere în tabloul Contor (pentru valoarea incrementată).

Page 10: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

10

Citirea memoriei (durează 1-2 nsec pentru cele mai rapide memorii pe chip, dar poate dura până la 10 nsec pentru memoriile mai lente) e mai lentă ca logica. Întârzierile porţilor sunt de ordinul picosecundelor, şi logica de deplasare nu necesită prea multe porţi. Strangularea de procesare este dată de numărul de accesări ale memoriei.

Citiri

Implementarea chip-ului poate combina cele două citiri ale memoriei într-o singură citire, reunind cele două tablouri Prag şi Contor într-unul singur.

Combinarea citirilor

Page 11: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

11

Implementarea combinării Ideea este de a face cuvintele din memorie destul de lungi pentru a conţine şi contorul (15 biţi pentru a manevra pachete cu lungimea 32K) şi pragul (nu mai mult de 14 biţi). Cele două câmpuri pot fi combinate într-un cuvânt de 29 biţi (hardware-ul poate manevra cuvinte de până la 1000 biţi). Extragerea celor două câmpuri dintr-un singur cuvânt este laborioasă prin software dar banală prin hardware (cablarea adecvată a firelor între registre, sau prin folosirea multiplexoarelor).

Ştergerea Problema buclei de iniţializare. Chip-ul are la dispoziţie un timp de iniţializare, dupa analiza URL-lui pachetului curent şi înainte de tratarea URL-lui următorului pachet. Dimensiunea minimă a pachetelor poate fi mică, de până la 50 bytes, inclusiv antetul HTTP. Presupunând că sunt 40 bytes non-URL şi 10 bytes URL, iniţializarea unei zone de 256 de bytes nu poate fi făcută fără un cost suplimentar de 256/40 =6 operaţii per byte, necesare prelucrării unui URL. Ca şi la bucla de procesare a URL-lui, fiecare iniţializare presupune o citire şi o scriere a zonei comasate.

Page 12: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

12

Bucla de iniţializare

Amânarea iniţializării până e absolut necesară, în speranţa că nu va fi necesară. Chip-ul nu trebuie să iniţializeze C[i] până când caracterul i e accesat prima dată în pachetul următor. Cum poate să ştie chip-ul că accesează caracterul i pentru prima dată ? Pentru a implementa evaluarea relaxată, fiecare cuvânt de memorie, reprezentând o intrare în zona comasată, trebuie extins pentru a include G[i], numărul generaţiei.

Includerea lui G

Numărul de generaţie se exprimă pe 3 biţi - poate fi văzut ca un contor care numară de câte ori e întâlnit pachetul. Chip-ul are un registru suplimentar g pentru fiecare i, pe lângă G[i], cu 3 biţi; registrul g este incrementat modulo 8 la fiecare pachet intâlnit. De câte ori C[i] este actualizat, chip-ul actualizează şi G[i] pentru a reflecta valoarea curentă a lui g.

Page 13: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

13

Chip-ul nu mai trebuie să iniţializeze zona de numărare dupa ce pachetul curent a fost procesat. Să considerăm cazul unui pachet cu numărul generaţiei h, care conţine un caracter i în URL-ul său. Când chip-ul întâlneşte caracterul i în timpul procesării pachetului, citeşte C[i] şi G[i] din zona de numărare. Dacă G[i] ≠ h înseamnă că intrarea i a fost accesată anterior de un pachet şi nu a fost iniţializată în consecinţă. Astfel, logica va repune pe 1 valoarea lui C[i] (iniţializare plus incrementare) şi va pune pe h valoarea lui G[i].

Deoarece numărul generaţiei are doar 3 biţi, iar valoarea lui g este ciclică, pot apare erori. Dacă G[i] = 5 iar intrarea i nu este accesată până când nu au trecut deja 8 pachete, valoarea curentă a lui g este 8. Dacă următorul pachet conţine caracterul i, C[i] nu va mai fi iniţializat şi contorul va număra eronat valoarea de ordine a caracterului i din pachetul curent, cu valoarea din urmă cu opt pachete.

Page 14: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

14

Chip-ul poate evita această eroare printr-o buclă de filtrare separată, care citeşte tabelul şi iniţializează toate contoarele cu numerele de generaţie învechite. Pentru corectitudine, chip-ul trebuie să realizeze o scanare completă a zonei pentru toate cele opt pachete procesate. Incetinirea existentă, de 40 non-URL octeti per pachet, garantează o încetinire de 320 bytes non-URL pentru cele opt pachete, ceea ce este suficient pentru a iniţializa o zonă de 256 de elemente, utilizând o citire şi o scriere per octet indiferent de tipul de octet, URL sau non-URL. Se poate câştiga mai multă întârziere dacă este nevoie, crescand numărul de biţi ai numărului generaţiei, cu preţul unei uşoare creşteri a necesarului de memorare a zonei.

In acest caz, chip-ul trebuie să conţină două stări, una de procesare a biţilor aparţinând URL-lui şi una de procesare a biţilor non-URL. Când un URL este complet procesat, chip-ul trece în starea de filtrare/scrub. Chipul dispune de un alt registru, care indică intrarea s a următoarei zone de filtrat. Dacă G[s] ≠ g , G[s] este resetat la valoarea g, iarC[s] este iniţializat pe 0. Deci utilizarea a 3 biti suplimentari, pentru numărul generaţiei pentru fiecare intrare de zonă, a dus la reducerea ciclurilor de iniţializare cu preţul creşterii zonei de memorare. Intrarea zonei comasate are acum doar 32 de biţi, 15 biţi pentru contor, 14 biţi pentru valoarea de prag de comutare, şi 3 biţi pentru numărul generaţiei.

Page 15: curs 3 tarc 2017 - tc.etc.upt.ro · 1 Curs 3 Introducere în algoritmica de reţea Tehnici de reducere a congestiei • Întreruperi, copiere, şi contoare – de timp circulare/timing

15

Verificările adăugate iniţializării, necesare în timpul procesării byte-lor URL nu cresc numărul de referiri la memorie (strangulare) ci cresc puţin logica de procesare. In plus, mai e nevoie de două registre pe chip pentru memorarea şirurilor g şi s.