Перейти до вмісту

Virtual Extensible LAN

Матеріал з Вікіпедії — вільної енциклопедії.

VXLAN (англ. Virtual eXtensible Local Area Network) - це схема інкапсуляції кадрів мережевого протоколу другого рівня в пакетах протоколу третього рівня (тунелювання), з метою створити віртуальну мережу, і обійти деякі обмеження традиційної схеми VLAN. VXLAN працює поверх наявної мережевої інфраструктури, таким чином можна назвати її оверлейною мережею.

Завдання

[ред. | ред. код]

В 2010-тих роках поширюються хмарні технології та віртуалізація серверів. Це створює додаткові виклики для мережевої інфраструктури. Ті з них які намагається розв’язати технологія VXLAN буде розглянуто нижче.

Якщо дата-центр використовує кілька користувачів, і кожен з них хоче мати свою окрему віртуальну мережу для з’єднання орендованих машин, то їх потрібно якось ізолювати одне від одного, як з метою безпеки, так і з метою продуктивності (наприклад щоб широкомовні кадри однієї мережі не заважали кадрам інших мереж (широкомовні кадри трапляються дуже часто при використанні ARP)). Традиційно це робили за допомогою технології VLAN, проте через те що VLAN намагається відповідати формату кадру стандарту Ethernet, ця технологія дозволяє створити лише 4096 віртуальних мереж. Ця кількість була достатньою раніше, коли дата-центри не обслуговували тисячі користувачів водночас. Окрім того, деякі користувачі самі потребуватимуть кількох VLAN.

Ще одною проблемою є розширення віртуальної мережі за межі фізичної мережі. Іноді користувач може орендувати сервери на кількох різних мережах дата-центру, і захотіти їх об’єднати. Він міг би вдатись до міжмережевого протоколу на рівні 3 (Internet Protocol), але це не враховує користувачів яким потрібні інші протоколи третього рівня, або прямий доступ до другого рівня.

Зі зростанням кількості віртуальних машин на фізичних серверах відповідно зростає кількість MAC-адрес присвоєних одному фізичному серверу. Це збільшує розмір таблиць маршрутизації у свічах. Якщо таблиця переповнюється - сервер перестає запам’ятовувати нові адреси, поки інформація про старі не застаріє і не буде видалена, що спричинить широкомовну трансляцію кадрів які призначені адресі яку свіч не знає, і падіння пропускної здатності мережі.

VXLAN також допомагає обійти деякі обмеження STP[джерело?].

Оверлейна мережа в Docker базується на основі технології VXLAN.[1]

VXLAN розбиває мережу на кілька сегментів (англ. VXLAN Segments). Кожен сегмент має ідентифікатор - VNI (англ. VXLAN Network Identifier), розміром 24 біт. Це дозволяє максимальну кількість сегментів приблизно 16 мільйонів. Між собою можуть з’єднуватись лише машини всередині одного сегменту.

Віртуальна машина на хості може не знати (і не повинна знати), що вона знаходиться в певному сегменті. Вона просто відправляє кадр Ethernet, і якщо на гіпервізорі хоста налаштований VTEP (англ. VXLAN Tunnel End Point) (сутність з якої починаються або в якій закінчуються тунелі VXLAN), то цей VTEP спершу перевірить якому сегменту відповідає MAC-адреса призначення, і звірить його з VNI для машини відправника. Якщо вони однакові - кадр можна відправляти. Якщо машина призначення знаходить на тому самому хості - гіпервізор передасть кадр машині зразу, якщо на якомусь іншому - загорне наш кадр в набір заголовків VXLAN і відправить VTEP-у віддаленого хоста. IANA призначила для протоколу VXLAN окремий номер порту UDP - 4789[2]

Формат заголовків VXLAN

[ред. | ред. код]

VXLAN може працювати наприклад на тому ж Ethernet, і дуже часто так і є. Тому він може містити два заголовки Ehternet, почнемо розглядати його з зовнішнього:

Заголовок зовнішнього Ethernet кадру
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Зовнішня MAC-адреса призначення
4 32 Зовнішня MAC-адреса призначення Зовнішня MAC-адреса відправника
8 64 Зовнішня MAC-адреса відправника
12 96 OptnlEthtype = C-Tag 802.1Q VLAN Tag
16 128 Ethertype = 0x0800 (IPv4)

Всередині кадру Ethernet міститься IPv4 пакет:

Заголовок зовнішнього IP пакету
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Версія IHL Тип сервісу Загальна довжина
4 32 Ідентифікація Прапорці Зміщення фрагментації
8 64 TTL Протокол=17 (UDP) Контрольна сума заголовку
12 96 Зовнішня IP-адреса призначення
16 128 Зовнішня IP-адреса відправника

Який містить дейтаграму UDP:

Заголовки UDP
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Порт відправника Порт призначення = порту VXLAN
4 32 Довжина UDP Чексума UDP

Всередині якої міститься заголовок VXLAN:


Заголовок VXLAN
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Р[3] Р Р Р I Р Р Р Зарезервовано
4 32 VNI Зарезервовано

Після якого йдуть заголовки внутрішнього кадру Ethernet, і нарешті вміст кадру:

Заголовок внутрішнього Ethernet кадру
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Внутрішня MAC-адреса призначення
4 32 Внутрішня MAC-адреса призначення Внутрішня MAC-адреса відправника
8 64 Внутрішня MAC-адреса відправника
12 96 OptnlEthtype = C-Tag 802.1Q Внутрішній VLAN Tag
16 128 Ethertype вмісту що передається через VXLAN тунель Вміст кадру
20 160 Вміст кадру (Зауважте що FCS оригінального кадру Ethernet не включаються)


Frame Check Sequence
Зміщення (Offsets) Октет 0 1 2 3
Октет Біти  0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
0 0 Нова FCS (Frame Check Sequence) для зовнішнього кадру Ethernet.

Відправка широкомовних кадрів

[ред. | ред. код]

Нехай віртуальна машина всередині VXLAN хоче поспілкуватись з іншою машиною, звернувшись до неї по IP. Якщо це IP в тій самій підмережі, то вона пошле широкомовний кадр ARP, щоб дізнатись фізичну адресу призначення. В середовищі без VXLAN, такий кадр було б послано з використанням широкомовної адреси FF:FF:FF:FF:FF:FF, і був би переданий у всі порти свіча на який прийшов, або на всі порти свіча що належать тому самому VLAN, якщо свіч підтримує технологію VLAN.

У випадку з VXLAN, вміст кадру поміщається в VXLAN пакет, в полі якого встановлюється відповідне VNI, і вони загортаються в UDP та IP пакет. IP пакет відсилається IP мультикаст групі, яка пов’язана з даним VXLAN сегментом. Щоб це здійснити, потрібне відображення з VNI на потрібну IP мультикаст групу. Це відображення здійснюється на рівні керування мережею і надається кожному окремому VTEP через канал керування. Кожен VTEP може повідомляти свіч до якого він під’єднаний про приєднання чи вихід з мультикаст групи за допомогою IGMP.

Також для керування мультикаст деревами можуть використовуватись протоколи маршрутизації мультикаст повідомлень, на зразок Protocol Independent Multicast - Sparse-Mode PIM-SM (RFC 4601), або Bidirectional PIM (BIDIR-PIM, RFC 5015), так як VTEM може бути як відправником, так і приймачем широкомовних пакетів.

Мультикаст фрейми, і фрейми порт MAC-адреса призначення якої має невідомий порт також відсилаються через IP мультикаст.

Зноски

[ред. | ред. код]
  1. Poulton, Nigel (12 жовтня 2016). Demystifying Docker overlay networking. nigelpoulton.com. Архів оригіналу за 21 листопада 2018. Процитовано 21 листопада 2018. [Архівовано 2018-11-21 у Wayback Machine.]
  2. Service Name and Transport Protocol Port Number Registry. Архів оригіналу за 25 вересня 2020. Процитовано 24 квітня 2020.
  3. зарезервовано

Посилання

[ред. | ред. код]