Протокол GENEVE¶
Протокол GENEVE (Generic Network Virtualization Encapsulation) — это сетевой протокол инкапсуляции, предназначенный для создания виртуальных сетей поверх существующих физических сетей (оверлейных сетей). Он обеспечивает стандартизированный способ упаковки кадров сетевого уровня (L2/L3) в пакеты транспортного протокола (обычно UDP) для передачи через IP-сеть, позволяя строить изолированные виртуальные сети с произвольной топологией.
¶История и предпосылки создания
Протокол GENEVE был разработан в рамках рабочей группы NVO3 (Network Virtualization Overlays) организации IETF (Internet Engineering Task Force). Его создание было обусловлено необходимостью преодоления ограничений более ранних протоколов инкапсуляции, таких как VXLAN (Virtual Extensible LAN) и NVGRE (Network Virtualization using Generic Routing Encapsulation). Основные недостатки предшественников включали фиксированную структуру заголовка, что затрудняло добавление новых метаданных (например, для телеметрии, безопасности или политик), а также негибкость в выборе транспортного протокола.
Первая версия спецификации GENEVE была предложена в 2014 году. В 2020 году протокол был стандартизирован в документе RFC 8926 «Geneve: Generic Network Virtualization Encapsulation». Разработка велась с участием таких компаний, как VMware, Microsoft, Intel, Cisco и Red Hat.
¶Принцип работы
GENEVE работает по принципу инкапсуляции. Исходный кадр (например, Ethernet-кадр) помещается в полезную нагрузку нового пакета, который затем передаётся через транспортную сеть. Ключевые элементы протокола:
- Инкапсуляция: Исходный кадр (L2 или L3) упаковывается в UDP-пакет. UDP-порт назначения по умолчанию — 6081.
- Идентификатор виртуальной сети (VNI): Каждый пакет содержит 24-битный идентификатор VNI (Virtual Network Identifier), который позволяет различать до 16 миллионов изолированных виртуальных сетей в одном физическом канале.
- Гибкие опции (TLV): Главное отличие GENEVE от VXLAN — поддержка переменного набора опций (Type-Length-Value). Через опции можно передавать дополнительные метаданные, например:
- Информацию о безопасности (контекст безопасности, токены).
- Данные телеметрии (задержки, потери пакетов).
- Политики доступа (например, метки для микросегментации).
- Информацию о протоколах (например, для поддержки MPLS-over-GENEVE).
- Транспорт: Пакеты GENEVE передаются через стандартные IP-сети (IPv4 или IPv6) с использованием UDP. Это позволяет использовать существующую инфраструктуру маршрутизаторов и коммутаторов без специальной настройки (кроме поддержки UDP-порта 6081).
¶Структура заголовка
Заголовок GENEVE состоит из нескольких частей:
- Base Header (фиксированная часть, 8 байт):
- Версия (2 бита) — всегда 0.
- Флаги (6 бит) — управляющие биты, включая флаг O (опции присутствуют).
- Длина опций (8 бит) — длина поля опций в 4-байтовых словах.
- Идентификатор виртуальной сети (VNI, 24 бита) — номер виртуальной сети.
- Резерв (8 бит) — зарезервировано для будущего использования.
- Опции (переменная длина): Набор TLV-блоков, каждый из которых содержит:
- Класс (16 бит) — определяет тип опции (например, стандартный IETF или вендорский).
- Тип (8 бит) — уточняет тип опции в рамках класса.
- Длина (8 бит) — длина данных опции.
- Данные (переменная длина) — значение опции.
¶Применение
Протокол GENEVE используется в основном в программно-определяемых сетях (SDN) и виртуализации сетевой инфраструктуры (NFV). Основные области применения:
- Виртуализация сетей (Network Virtualization): Создание изолированных виртуальных сетей (VPC) для арендаторов облачных платформ (например, OpenStack, VMware NSX). GENEVE позволяет гибко настраивать политики безопасности и маршрутизации для каждой виртуальной сети.
- Микросегментация: Использование опций GENEVE для передачи меток безопасности (например, контекст безопасности SELinux) позволяет реализовать политики «нулевого доверия» (Zero Trust) на уровне отдельных виртуальных машин или контейнеров.
- Телеметрия и мониторинг: Опции GENEVE могут нести данные о состоянии сети (например, задержки, потери) для систем управления и аналитики.
- Интеграция с контейнерами: GENEVE поддерживается в решениях для оркестрации контейнеров (например, в CNI-плагинах для Kubernetes, таких как Calico или Cilium) для создания оверлейных сетей между узлами кластера.
¶Преимущества и недостатки
¶Преимущества
- Гибкость: Возможность добавлять произвольные метаданные через опции TLV, что позволяет адаптировать протокол под конкретные задачи без изменения базовой спецификации.
- Стандартизация: RFC 8926 обеспечивает совместимость между различными вендорами и платформами.
- Масштабируемость: Поддержка до 16 миллионов виртуальных сетей.
- Совместимость: Работает поверх стандартных IP-сетей и не требует модификации существующего аппаратного обеспечения (кроме поддержки UDP-порта).
¶Недостатки
- Накладные расходы: Заголовок GENEVE (минимум 8 байт + UDP-заголовок 8 байт + IP-заголовок 20 байт) может быть больше, чем у VXLAN (8 байт + 8 байт + 20 байт), особенно при использовании большого количества опций.
- Сложность реализации: Поддержка переменных опций требует более сложной обработки на коммутаторах и сетевых адаптерах, что может увеличить задержки.
- Необходимость поддержки: Для использования GENEVE требуется, чтобы все участники сети (виртуальные коммутаторы, гипервизоры, физические коммутаторы) поддерживали этот протокол.
¶Сравнение с другими протоколами
| Характеристика | VXLAN | NVGRE | GENEVE |
|---|---|---|---|
| Транспорт | UDP (порт 4789) | GRE (IP-протокол 47) | UDP (порт 6081) |
| Идентификатор сети | 24 бита (VNI) | 24 бита (VSID) | 24 бита (VNI) |
| Опции | Фиксированный заголовок | Фиксированный заголовок | Переменные TLV-опции |
| Гибкость | Низкая | Низкая | Высокая |
| Стандартизация | RFC 7348 | RFC 7637 | RFC 8926 |
| Основное применение | Виртуализация сетей в дата-центрах | Виртуализация сетей (Microsoft Hyper-V) | SDN, микросегментация, телеметрия |
¶Интересные факты
- Название GENEVE является отсылкой к Женеве (Швейцария), где проходили ключевые заседания рабочей группы NVO3.
- Протокол GENEVE поддерживает не только инкапсуляцию Ethernet-кадров, но и кадров других протоколов, например, MPLS (Multiprotocol Label Switching).
- В отличие от VXLAN, который использует фиксированный UDP-порт, GENEVE использует порт 6081, зарезервированный IANA специально для этого протокола.
¶Источники
- RFC 8926 — «Geneve: Generic Network Virtualization Encapsulation» (IETF, 2020).
- «Network Virtualization Overlays (NVO3)» — рабочая группа IETF.
- «GENEVE: A New Protocol for Network Virtualization» — техническая документация VMware.
- «OpenStack Networking Guide: GENEVE» — документация OpenStack.
- «Cilium: GENEVE Encapsulation» — документация проекта Cilium.