VXLAN () - це схема інкапсуляції кадрів мережевого протоколу другого рівня в пакетах протоколу третього рівня (тунелювання), з метою створити віртуальну мережу, і обійти деякі обмеження традиційної схеми VLAN. VXLAN працює поверх наявної мережевої інфраструктури, таким чином можна назвати її оверлейною мережею.
Завдання В 2010-тих роках поширюються хмарні технології та віртуалізація серверів. Це створює додаткові виклики для мережевої інфраструктури. Ті з них які намагається розв’язати технологія VXLAN буде розглянуто нижче.
Якщо дата-центр використовує кілька користувачів, і кожен з них хоче мати свою окрему віртуальну мережу для з’єднання орендованих машин, то їх потрібно якось ізолювати одне від одного, як з метою безпеки, так і з метою продуктивності (наприклад щоб широкомовні кадри однієї мережі не заважали кадрам інших мереж (широкомовні кадри трапляються дуже часто при використанні ARP)). Традиційно це робили за допомогою технології VLAN, проте через те що VLAN намагається відповідати формату кадру стандарту Ethernet, ця технологія дозволяє створити лише 4096 віртуальних мереж. Ця кількість була достатньою раніше, коли дата-центри не обслуговували тисячі користувачів водночас. Окрім того, деякі користувачі самі потребуватимуть кількох VLAN.
Ще одною проблемою є розширення віртуальної мережі за межі фізичної мережі. Іноді користувач може орендувати сервери на кількох різних мережах дата-центру, і захотіти їх об’єднати. Він міг би вдатись до міжмережевого протоколу на рівні 3 (Internet Protocol), але це не враховує користувачів яким потрібні інші протоколи третього рівня, або прямий доступ до другого рівня.
Зі зростанням кількості віртуальних машин на фізичних серверах відповідно зростає кількість MAC-адрес присвоєних одному фізичному серверу. Це збільшує розмір таблиць маршрутизації у свічах. Якщо таблиця переповнюється - сервер перестає запам’ятовувати нові адреси, поки інформація про старі не застаріє і не буде видалена, що спричинить широкомовну трансляцію кадрів які призначені адресі яку свіч не знає, і падіння пропускної здатності мережі.
VXLAN також допомагає обійти деякі обмеження STP.
Оверлейна мережа в Docker базується на основі технології VXLAN.
Опис VXLAN розбиває мережу на кілька сегментів (). Кожен сегмент має ідентифікатор - VNI (), розміром 24 біт. Це дозволяє максимальну кількість сегментів приблизно 16 мільйонів. Між собою можуть з’єднуватись лише машини всередині одного сегмента.
Віртуальна машина на хості може не знати (і не повинна знати), що вона знаходиться в певному сегменті. Вона просто відправляє кадр Ethernet, і якщо на гіпервізорі хоста налаштований VTEP () (сутність з якої починаються або в якій закінчуються тунелі VXLAN), то цей VTEP спершу перевірить якому сегменту відповідає MAC-адреса призначення, і звірить його з VNI для машини відправника. Якщо вони однакові - кадр можна відправляти. Якщо машина призначення знаходить на тому самому хості - гіпервізор передасть кадр машині зразу, якщо на якомусь іншому - загорне наш кадр в набір заголовків VXLAN і відправить VTEP-у віддаленого хоста. IANA призначила для протоколу VXLAN окремий номер порту UDP - 4789
Формат заголовків VXLAN
VXLAN може працювати наприклад на тому ж Ethernet, і дуже часто так і є. Тому він може містити два заголовки Ehternet, почнемо розглядати його з зовнішнього:
+ Заголовок зовнішнього Ethernet кадру Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Зовнішня MAC-адреса призначення 432 Зовнішня MAC-адреса призначення Зовнішня MAC-адреса відправника 864 Зовнішня MAC-адреса відправника 12 96 OptnlEthtype = C-Tag 802.1Q VLAN Tag 16128 Ethertype = 0x0800 (IPv4)
Всередині кадру Ethernet міститься IPv4 пакет:
+ Заголовок зовнішнього IP пакету Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Версія IHL Тип сервісу Загальна довжина 432 Ідентифікація Прапорці Зміщення фрагментації 864 TTL Протокол=17 (UDP) Контрольна сума заголовку 12 96 Зовнішня IP-адреса призначення 16128 Зовнішня IP-адреса відправника
Який містить дейтаграму UDP:
+ Заголовки UDP Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Порт відправника Порт призначення = порту VXLAN 432 Довжина UDP Чексума UDP
Всередині якої міститься заголовок VXLAN:
+ Заголовок VXLAN Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Рзарезервовано Р Р Р I Р Р Р Зарезервовано 432 VNI Зарезервовано
Після якого йдуть заголовки внутрішнього кадру Ethernet, і нарешті вміст кадру:
+ Заголовок внутрішнього Ethernet кадру Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 0 0 Внутрішня MAC-адреса призначення 432 Внутрішня MAC-адреса призначення Внутрішня MAC-адреса відправника 864 Внутрішня MAC-адреса відправника 12 96 OptnlEthtype = C-Tag 802.1Q Внутрішній VLAN Tag 16128 Ethertype вмісту що передається через VXLAN тунель Вміст кадру 20160 Вміст кадру (Зауважте що FCS оригінального кадру Ethernet не включаються)
+ Frame Check Sequence Зміщення (Offsets) Октет 0 1 2 3 Октет Біти 0 1 2 3 4 5 6 7 8 910111213141516171819202122232425262728293031 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 мультикаст.
Зноски
Посилання RFC 7348 VXLAN Series – How VTEP Learns and Creates Forwarding Table VMware vSphere Blog Five Functional Facts about VXLAN VXLAN Deep Dive