ACL (Lista de Control al Accesului) pe dispozitivele de rețea pot fi implementate atât hardware, cât și software, sau mai bine zis, ACL bazate pe hardware și software. Și dacă pentru ACL bazate pe software este clar – acestea sunt regulile stocate și procesate în memoria RAM (adică pe Control Plane), cu toate restricțiile care decurg din aceasta, vom analiza cum sunt implementate și funcționează ACL-urile bazate pe hardware în articolul nostru. Ca exemplu, vom folosi switch-urile din seria ExtremeSwitching ale companiei Extreme Networks.

Dat fiind că ne interesează în mod special ACL-urile bazate pe hardware, este esențial pentru noi să ne concentrăm pe implementarea internă a Data Plane-ului, sau a chipset-urilor utilizate (ASIC). Switch-urile din toate liniile companiei Extreme Networks sunt construite pe ASIC-uri de la Broadcom, așa că majoritatea informațiilor prezentate mai jos vor fi valabile și pentru alte switch-uri disponibile pe piață, construite pe aceleași ASIC-uri.
După cum se poate observa în imaginea de mai sus, responsabilitatea directă pentru funcționarea ACL-ului în chipset este a „ContentAware Engine”, atât pentru „ingress”, cât și pentru „egress”. Arhitectural, acestea sunt identice, doar că „egress” este mai puțin scalabil și funcțional. Fizic, ambele „ContentAware Engine” sunt memorie TCAM plus logica asociată, iar fiecare regulă ACL, fie ea utilizator sau sistem, este o simplă mască de biți (bit-mask) stocată în această memorie. De aceea, procesarea traficului de către chipset se face pe pachete, fără degradarea performanței.
Fizic, aceeași memorie Ingress/Egress TCAM este împărțită logic în mai multe segmente (în funcție de cantitatea memoriei și de platformă), numite „ACL slices”. De exemplu, același lucru se întâmplă cu HDD-ul fizic de pe laptopul dumneavoastră, atunci când creați pe el mai multe discuri logice – C:>, D:>. Fiecare ACL-slice constă la rândul său din celule de memorie, sub formă de „rânduri” unde sunt scrise „rules” (reguli/masci de biți).

Împărțirea TCAM în ACL-slices are o logică specifică. În fiecare ACL-slice separat pot fi scrise doar „rules” compatibile între ele. Dacă o „rule” nu este compatibilă cu precedentul, va fi scrisă în următorul ACL-slice, indiferent de câte rânduri libere pentru „rules” mai rămân în anteriorul.
De unde apare, așadar, această compatibilitate sau incompatibilitate a regulilor ACL? Problema este că o "linie" TCAM, în care sunt stocate "regulile", are o lungime de 232 bit și este împărțită în mai multe câmpuri – Fixed, Field1, Field2, Field3. 232 bit sau 29 byte de memorie TCAM sunt suficienți pentru a stoca o mască de bit a unui anumit MAC sau IP, dar mult mai puțin decât întreaga antet al pachetului Ethernet. În fiecare ACL-slice, ASIC realizează o căutare independentă în baza măștii de biți stabilite în F1-F3. În general, această căutare poate fi efectuată pe primii 128 bytes ai antetului Ethernet. În esență, tocmai din cauza faptului că căutarea poate fi efectuată pe 128 bytes, în timp ce se pot stoca doar 29 bytes, pentru o căutare corectă trebuie să fie stabilit un offset relativ la începutul pachetului. Offset-ul pentru fiecare ACL-slice este stabilit în momentul în care se scrie prima regulă, iar dacă la scrierea următoarei reguli se constată necesitatea unui alt offset, acea regulă este considerată incompatibilă cu prima și este scrisă în următorul ACL-slice.
În tabelul de mai jos este prezentată ordinea compatibilității condițiilor stipulate în ACL. Fiecare linie conține măști de biți care sunt compatibile între ele și măști de biți care nu sunt compatibile cu alte linii.

Fiecare pachet procesat de ASIC inițiază o căutare paralelă în fiecare ACL-slice. Verificarea se efectuează până la prima potrivire în ACL-slice, însă este permisă și multiple potriviri pentru același pachet în diferite ACL-slice. Fiecare regulă are o acțiune corespunzătoare care trebuie realizată în cazul unei potriviri a condiției (mască de biți). Dacă potrivirea a avut loc simultan în mai multe ACL-slice, blocul "Rezolvarea conflictelor de acțiune" va decide, pe baza priorității ACL-slice, care acțiune trebuie executată. Dacă în ACL este definită atât o "acțiune" (permit/deny), cât și un "modificator de acțiune" (count/QoS/log/…), atunci în cazul potrivirilor multiple se va executa doar acțiunea de prioritate mai mare, însă toate modificatoarele de acțiune vor fi realizate. În exemplul de mai jos se arată că ambele contoare vor fi incrementate și se va executa acțiunea de deny cu prioritate mai mare.

cu informații mai detaliate despre funcționarea ACL, disponibile pe site-ul . Orice întrebări apărute sau rămase pot fi adresate întotdeauna angajaților biroului nostru – .
Sursa: habr.com
