ACL (Access Control List) նետային սարքերում կարող են իրականացվել թե՛ սարքավորումային, թե՛ ծրագրային, կամ ավելի սովորաբար ասած hardware և software-based ACL: Եվ եթե software-based ACL-ի մասին պետք է հստակ լինի, — դա օրենքներն են, որոնք պահվում և մշակվում են օպերատիվ հիշողության մեջ (թ.e. թռիչքային մակարդակում), բոլորին հայտնի սահմանափակումներով, ապա ինչպես են իրականացվել և աշխատում hardware-based ACL-ները, մենք կքննարկենք մեր հոդվածում: օրինակ, որպես օրինակ օգտագործելու ենք Extreme Networks ընկերության ExtremeSwitching շարքիSwitch-ները:

Քանի որ մեզ հետաքրքրում է հենց hardware-based ACL-ն, ապա մեզ համար առաջնային նշանակություն ունի հենց Data Plane-ի ներքին իրականացումը, կամ իսկապես օգտագործվող չիպսեթները (ASIC): Extreme Networks ընկերության բոլոր կոմցետորները կառուցված են Broadcom ընկերության ASIC-ների վրա, ուստի ստորև ներկայացված շատ տեղեկություններ նույնպես ճիշտ կլինեն այլ կոմցետորների համար, որոնք ներկայանում են շուկայում և իրականացվում են նույն ASIC-ների վրա:
Ինչպես ցույց է տալիս վերին նկարն, անմիջապես ACL-ի աշխատանքի համար չիպսեթում պատասխանատվություն են կրում “ContentAware Engine”-ները, որոնք առանձնապես աշխատաոճներից “ingress” և “egress”: Ստեղծականորեն նրանք նույնն են, միայն “egress”-ը ավելի քիչ մասշտաբելի, և ավելի քիչ ֆունկցիոնալ: Ֆիզիկապես երկու “ContentAware Engine”-ներն էլ TCAM հիշողությունն են, plus համապատասխան տրամաբանությունը, իսկ յուրաքանչյուր օգտագործողի կամ համակարգային ACL օրենքն է մի պարզ բիթ դիմակ (bit-mask), որը գրանցված է այդ հիշողության մեջ: Ն precisely մ, այդ իսկ պատճառով չիպսեթը իրականացնում է տրաֆիկի մշակումը փաթեթ-փաթեթ, առանց կատարողականության նվազեցման:
Փոզի հումքը նույն Ingress/Egress TCAM-ը իր հերթին բաժանվում է տրամաբանական առումով մի քանի հատվածների (կախված самой памяти и платформы), այսպես կոչված “ACL slices”: Օրինակ, նույն բանն է տեղի ունենում ֆիզիկապես մեկ HDD-ի վրա ձեր ноутբուքում, երբ դուք ստեղծում եք մի քանի տրամաբանական սկավառակներ – C:>, D:>: Յուրաքանչյուր ACL-slice-ը իր հերթին բաղկացած է հիշողության բջիջներից, որպես “տողեր”, որտեղ և գրանցվում են “rules” (օրենքներ/բիթ-դիմակներ):

TCAM-ի բաժանումը ACL-slices-ի վրա ունի որոշակի տրամաբանական հիմք: Յուրաքանչյուր առանձին ACL-slice-ում կարող են գրանցվել միայն համատեղելի “rules”: Եթե որևէ “rule” չի համարվում նախորդի հետ համատեղելի, ապա այն կգրանցվի հաջորդ ACL-slice-ում, անկախ նրանից, թե որքան ազատ տողեր են մնացել նախորդ ACL-slice-ում:
Որտեղի՞ց առաջանում է այս համատեղելիությունն ու անկարստությունն ACL կանոնների։ Դրանք այն բանն են, որ մեկ «տող» TCAM-ի մեջ, որտեղ գրանցվում են «կանոնները», ունի 232 բիթ երկարություն և բաժանվում է մի քանի դաշտերի՝ Fixed, Field1, Field2, Field3։ 232 բիթ կամ 29 բիթի TCAM հիշողություն բավական է արձանագրելու MAC կամ IP հասցեի բիթ-մասկը, սակայն շատ ավելի քիչ, քան էլեկտրական փաթեթի լիարժեք վերնագիրը։ Յուրաքանչյուր առանձին ACL-slice ASIC-ը կատարում է անկախ որոնում ըստ F1-F3-ում տեղադրված բիթ-մասկերի։ Ընդհանուր առմամբ, այս որոնումը կարող է կատարվել էլեկտրական վերնագրի առաջին 128 բայտում։ Իրոք, հենց այն պատճառով, որ որոնումը կարող է կատարվել 128 բայտի վրա, իսկ գրանցվել կարող է միայն 29 բայտ, ճիշտ որոնման համար պետք է սահմանվի տեղաշարժ (offset) փաթեթի սկզբից։ Յուրաքանչյուր ACL-slice համար offset-ը սահմանվում է առաջին կանոնը գրելու ժամանակ, և եթե հաջորդական կանոնը գրելու ժամանակ անհրաժեշտություն է հայտնվում այլ offset-ի, ապա այդ կանոնը считается несовместимым с первым և գրանցվում է հաջորդ ACL-slice-ում։
Ներդրված աղյուսակում համատեղելիության կարգն է, որը նշվում է ACL-ում։ Յուրաքանչյուր առանձին տող պարունակում է համատեղելի բիթ-մասկեր, որոնք միասին ձևավորվում են, և ոչ համատեղելի այլ տողերի հետ։

Յուրաքանչյուր առանձին փաթեթ, որը մշակվում է ASIC-ի կողմից, запускает параллельный որոնում յուրաքանչյուր ACL-slice-ում։ Օգնությունը ստացվում է առաջին համընկնումի արդյունքում ACL-slice-ում, սակայն թույլատրվում է բազմակի համընկնում մեկ և նույն փաթեթի համար տարբեր ACL-sliceերում։ Յուրաքանչյուր «կանոնի» համար կա համապատասխան գործողություն, որը պետք է իրականացվի պայմանավորած համընկման (բիթ-մասկի) դեպքում։ Եթե համընկնումն ամփոփվել է մի քանի ACL-slice-ներում, ապա «Action Conflict Resolution» հատվածում, ըստ ACL-slice-ի առաջնելիության, որոշվում է, թե welke գործողությունը պետք է իրականացվի։ Եթե ACL-ում նշվում է թե «action» (թույլատրել/արգելել), և «action-modifier» (հաշվարկել/QoS/գրանցել/…), ապա բազմաթիվ համընկնումների դեպքում կիրականացվի միայն առավել առաջնային «action», «action-modifier»-ները սակայն կիրականացվեն բոլորը։ Նիկակը ներկայացված է, որ բարձրացվելու են երկու հաշվարկիչները և կիրականացվի առավել առաջնային «արգելել»։

մանրամասն տեղեկություններով ACL-ի աշխատանքի մասին բաց հասանելի է կայքում . Լինում են կամ մնացած հարցեր, միշտ կարող եք դիմել մեր գրասենյակի աշխատակիցներին՝ .
Ընտանիք: habr.com
