Введення в Distributed Switch Architecture: технологія управління мережею як єдиним пристроєм



Команда дизайн-центру електроніки Promwad повертається на Хабр після зимових канікул з новими статтями про розробку вбудованого ПЗ і нових пристроїв для серійного виробництва. Сьогодні ми поділимося своїм досвідом в темі мережевих технологій.

Середньостатистична домашня мережа, також як і мережа невеликого підприємства, — це вже давно не просто два-три комп'ютери, з'єднані через перший-ліпший китайський комутатор. Разом із зростанням обсягу контенту (бази даних, потокове аудіо/відео тощо) та збільшенням кількості пристроїв (VoIP-пристрої, сервери, NAS-и, IP-камери, а в домашніх мережах — телевізори та інший «інтернет речей») зростає і кількість переданих даних через мережеву інфраструктуру. Потоки даних потрібно розділяти між собою, при цьому не забуваючи про пріоритезації трафіку: наприклад, VoIP-трафік бажано пускати з великим пріоритетом, ніж IPTV, а IPTV в свою чергу — чим торренти. Тому не дивно, що з часом навіть малі локальні мережі ускладнюються, а ємності портів одиночних комутаторів стає недостатньо…

Для збільшення ємності портів великих вузлів мережі, а також для збільшення загальної пропускної здатності мережі, найчастіше вдаються до побудови т. н. стеків — об'єднання комутаторів в ієрархічні структури в залежності від потоків переданих даних.

Найбільшою «класичною архітектурою побудови мереж є дерево, як показано на малюнку:



При цьому трафік від вузла A до вузла D проходить через ланцюжок вищестоящих комутаторів, що накладає додаткові вимоги до продуктивності — пропускна здатність кожного такого (вищого) вузла дерева повинна бути вище попереднього.

Для того щоб розвантажити основні вузли мережі найчастіше вводять додаткові зв'язки між комутаторами. Наприклад, «ядро» мережі часто організовують у вигляді кільця комутаторів, як показано на схемі нижче:



Якщо при цьому використовується старий добрий Ethernet, то щоб уникнути переповнення кільця широкомовним трафіком використовують Spanning Tree Protocol, який переводить один з лінків між комутаторами кільця в неактивний стан. Це дозволяє забезпечити альтернативний шлях проходження трафіку в разі обриву центрального кільця в будь-якої з точок. Якщо ви використовуєте який-небудь з протоколів спеціально призначених для «кілець», наприклад FDDI або Token Ring, то кільце не розривається, а трафік передається по кільцю з найбільш рівномірним завантаженням входять в кільце комутаторів.

Ну і звичайно ж, ніхто не забороняє при необхідності комбінувати різні топології в рамках однієї мережі, аж до використання множинно пересічних кілець, кожен з вузлів якого є вершиною дерева.

При побудові мережі з'являється необхідність не просто з'єднати пасивні вузли-комутатори, але і забезпечити передачу даних між вузлами з урахуванням пріоритету і поділу різних видів трафіку. При цьому бажано зберегти можливість централізованого управління мережею з однієї точки для визначення цих пріоритетів. З'являється необхідність об'єднати все обладнання мережі в якусь логічну сутність.

Технологія Distributed Switch Architecture надає таку можливість, дозволяючи керувати розгалуженою мережею як єдиним пристроєм, а також задавати шляху проходження трафіку всієї системи в цілому. При цьому вузли-комутатори можуть представляти із себе прості одночіпові пристрою з одним загальним для всіх вузлів керуючим процесором, що позитивно позначається на вартості системи і витрати на її обслуговування.

Суть технології DSA можна коротко звести до введення додаткового рівня адресації в рамках вузлів всієї мережі, а фактично — в рамках всієї ємності портів всіх вузлів. В якості прикладу цієї технології розглянемо реалізацію Distributed Switch Architecture від одного з виробників світч-мікросхем — Marvell. Існує безліч реалізацій подібної технології від різних вендорів (при цьому різні виробники називають цю технологію по-різному), але суть цих рішень схожа.

Для успішної роботи цієї технології кожному вузлу-комутатора присвоюється унікальний Device ID, а кожного порту окремо взятого пристрою — Port ID. Кожен пакет, що входить в будь-який зовнішній порт будь-якого вузла мережі, який неможливо обробити в межах цього вузла (тобто на підставі локальних таблиць і правил), доповнюється 4-ма байтами: DSA-тегом. Для звичайного трафіку в пристроях Marvell використовується тег Forward DSA. У цей тег поміщається Device ID і Port ID, що однозначно визначають, де саме в межах мережі пакет потрапив у мережу. Сам же тег поміщається відразу за Source Address MAC-заголовку.



Реалізація DSA від Marvell підтримує 802.1 Q — при наявності в пакеті VLAN-заголовка його VID і пріоритет переносяться в DSA-заголовок, при цьому сам VLAN-заголовок з пакету прибирається, тобто розмір пакета зберігається незмінним. Спеціальний прапор в новому заголовку показує, що вихідний пакет був тегирован, що дозволяє відновлювати VLAN-заголовок на виході з зовнішнього порту при необхідності. При перенесенні пріоритету пакета можна скористатися спеціальною таблицею заміни, тому розподіл пакетів по чергах можна задати довільно.

Оскільки при наявності адресації вузлів можна звертатися до кожного з них окремо, для всієї мережі комутаторів можна використовувати один спільний керуючий CPU, з'єднаний фізично тільки з одним з вузлів. CPU підключається до одного з портів комутатора, а для обміну з урахуванням додаткової адресації використовується або згаданий вище DSA-заголовок, або розширений на 4 байта варіант заголовка — Ethertype DSA, в якому додатково включено значення ethertype. Цей ethertype обирається адміністратором і задається в конфігурації комутатора, а також в модулі ядра на керуючому CPU. Використання Ethertype DSA дозволяє одночасно передавати через порт як трафік з DSA-тегом, так і звичайний мережевий трафік.

Централізоване управління — це одна з найважливіших умов при побудові складної мережі передачі даних. Реалізація DSA від Marvell вирішує цю задачу за допомогою спеціальних пакетів — Management frames, які використовуються з двома типами DSA-тегів: From_CPU і To_CPU. Як можна зрозуміти з назви, перший тип використовується для передачі пакетів від CPU до керованого вузла, а другий тип — від вузла до керуючого CPU. Їх основна відмінність в тому, що в тезі From_DSA вказується Target Device ID Target Port ID пристрою, а в тезі To_DSA — Source Device ID Source Port ID. Справа в тому, що кожен комутатор у мережі знає, до якого порту (прямо або через інші вузли) підключений керуючий CPU, а значить, досить тільки адресувати керований пристрій.

Серед додаткових можливостей реалізації DSA від Marvell також можна відзначити мульти-чіповий моніторинг трафіку: трафік будь-якого порту будь-якого вузла мережі можна продублювати на будь-який інший порт, включаючи порт керуючого CPU. При цьому можна здійснювати моніторинг будь-якої кількості портів, а щоб позначити джерело використовується DSA-тег типу To_Sniffer, в який записується Source Device ID, Source Port ID і номер VLAN прийшов пакета.

Починаючи з версії 2.6.28 mainline ядра Linux підтримує використання Distributed Switch Architecture на мережеві інтерфейси. Спочатку підтримувалися тільки деякий моделі світчів від Marvell, але потім додалася також підтримка чіпів Broadcom. Також існує патч для підтримки світчів від Micrel. Підтримка полягає в додатковій прошарку в мережевому стеку, яка додає в пакет, або прибирає з нього DSA-заголовок, відправляючи дані у віртуальний мережевий інтерфейс залежно від заголовка. Таким чином, з точки зору операційної системи, кожен зовнішній порт всіх світчів DSA-мережі (крім DSA-портів, якими світчі з'єднані між собою) «видно» як окремий мережний інтерфейс. У разі наявності підтримки з боку обладнання, такого інтерфейсу можна призначити власний MAC — і IP-адресу, а значить за допомогою DSA також можна побудувати і маршрутизатор з великою ємністю портів.

Варто відзначити, що реалізації DSA від різних вендорів не сумісні між собою, а також володіють різним функціоналом. Так, наприклад, Micrel KSZ8993M може додатково адресувати тільки номер порту одного пристрою, безпосередньо підключеного до керуючого CPU. Тому в разі використання мережі з використанням описаної технології доведеться вибрати якогось одного виробника чіпів.

Розглянемо приклад опису DSA в конфігурації Device Tree для ядра 3.10 або вище:

dsa@0 {
compatible = "marvell,dsa";
#address-cells = <2>;
#size-cells = <0>;

interrupts = <10>;
dsa,ethernet = <ðernet0>;
dsa,mii-bus = <&mii_bus0>;

switch@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <16 0>; /* MDIO address 16, switch 0 in tree */

port@2 {
reg = <2>;
label = "lan2";
};

port@4 {
reg = <4>;
label = "lan4";
};

port@5 {
reg = <5>;
label = "cpu";
};

switch0uplink: port@6 {
reg = <6>;
label = "dsa";
link = <&switch1uplink>;
};
};

switch@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <17 1>; /* MDIO address 17, switch 1 in tree */

port@1 {
reg = <1>;
label = "lan1";
};

port@3 {
reg = <3>;
label = "lan3";
};

switch1uplink: port@5 {
reg = <5>;
label = "dsa";
link = <&switch0uplink>;
};
};


В даному випадку описується архітектура з двох комутаторів, яку можна представити так:



Оскільки у двох комутаторах визначено по 2 зовнішні порти, з такою конфігурацією в операційній системі буде додатково створено 4 віртуальних мережевих інтерфейсу, що представляють з себе порти, які включені комп'ютери A, B, C і D, кожен з яких можна використовувати незалежно. У такому випадку за замовчуванням для кожного порту кожного комутатора буде виділена окрема незалежна MAC-таблиця.

При цьому конфігурація кожного окремого комутатора може проводитися як локально по шині MDIO (наприклад, якщо все обладнання розташоване в межах одного юніта, або чіпи розташовані на одній друкованій платі), так і з допомогою спеціальних конфігураційних пакетів Ethernet-мережі. Завдяки цьому можна побудувати як комутатор з великою ємністю портів, так і складну мережу комутаторів з централізованим управлінням.

Варто зазначити, що поточна реалізація DSA в ядрі підтримує конфігурацію комутаторів тільки через шину MDIO, що дещо звужує рамки використання технології. Однак при необхідності додавання віддаленого управління не складе праці.

На цьому теоретичну частину опису Distributed Switch Architecture можна вважати закінченою, наступного разу спробуємо розібратися із застосуванням цієї технології на практиці. Так що якщо мережеві технології та розробка електроніки — ваша тема, приєднуйтесь нашим передплатникам на Хабре.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.