Хабр, привет.

Меня зовут Аркадий и я сетевой инженер в одном из сервис провайдеров.  Кому интересны основные отличия VXLAN от Geneve добро пожаловать под кат. Избегая выстрела в ногу, хочу отметить, что основа статьи – это выжимки из RFC и открытой информации VMware.

В NSX-T VMware уходит от Overlay на базе VXLAN в пользу Geneve. Внедрение Geneve лоббируется помимо VMware такими компаниями как : Intel, Microsoft, Red Hat. Маркетинг называет следующую причину к Geneve : "Geneve сочетает в себе лучшее от протоколов VXLAN (Virtual Extensible LAN), NVGRE(Network Virtualization using Generic Routing Encapsulation), and STT(Stateless Transport Tunneling)." Разберем отличия нового Overlay протокола и почему ему отдано предпочтение ведущими вендорами виртуализации.

Теперь по порядку:

Geneve - туннельный протокол работающий поверх UDP (port number) для построения туннелей между NVEs (Network Virtualization Edge) через IP underlay. Описан в RFC8926, который в свою очередь заменил предшествующий драфт draft-gross-geneve 2020-11-06.

Протокол разрабатывался рабочей группой IETF с целью унификации и агрегации преимуществ протоколов VXLAN, NVGRE и STT. Недостатками которых являлись гибкость и ограниченность масштабирования в условиях стремительного развития виртуализации и сервисов на базе глобальных облачных провайдеров.

Основной задачей технологии (протокола) является виртуализация  L2 домена работающего поверх базовой IP сети. Широко применяется в облачных средах, в связи с ограничениями по размеру поля  VLAN Tag 802.1q в 2 ^ 12 = 4094.

Geneve

Минимальный размер заголовка Geneve составляет 8 байт.

Geneve header
Geneve header

Ver (2 bits) – Версия протокола. Текущее значение 0.

Opt Len (6 bits) – указание размера поля Variable Length Options. Минимальный размер заголовка + значение Opt Len = полный размер заголовка.

O (1bit) – Control packet. Интерпретируется TEPs (tunnel end points). Может использоваться для передачи пакета на обработку выше по стеку.

C (1bit) – Critical options present. Установленный бит указывает на необходимость парсинга опций на TEPах. На TEPах поддерживающих парсинг опций пакет должен быть отброшен.

Rsvd.(6 bits) Reserved. Значение поля должно быть = 0 при передаче пакета и игнорируемо на конечных хостах.

Protocol type (16 bits) - 0x6558 Transparent Ethernet Bridging.

VNI (24 bits) – Virtual Network Identifier – уникальный идентификатор сегмента виртуальной сети. Идентифицирует L2 домен которому принадлежит оригинальный Ethernet фрейм. NSX-T использует диапазон VNI от 5000 до 16777216.

Reserved (8 bits). Значение поля должно быть = 0 при передаче пакета и игнорируемо на конечных хостах.

За базовым заголовком Geneve следует поле опций в TLV формате. Каждая опция состоит из заголовка в 4 байта и данных интерпретируемых в соответствии с полем Type опции. В базовом заголовке предусмотрено поле для идентификации типа опции по организации, технологии, или вендору. Определенный блок IANA зарегистрировала для тестов и оптимизации протокола. Поле опций в заголовке Geneve по тексту RFC в большей степени предусмотрено для масштабирования протокола и возможностей оптимизации протокола разработчиками. В поле тип определено место контрольного бита (C) Critical являющегося глобальным по отношению ко всем TEPs. При обработке TEP пакета при выставленном бите C и не определенным типом опции – пакет должен быть отброшен.

Хотя опции предназначены для обработки на конечных TEP, они также могут быть интерпретированы транзитными устройствами. Если обработка опций на транзитных устройствах не предусмотрена, то транзитные устройства выполняют обработку по аналогии с обычным UDP пакетом.

В сравнении с VXLAN (RFC7348)

VXLAN Header (8 bytes)
VXLAN Header (8 bytes)

VXLAN Flags (8 bits) – Набор флагов, в котором I – должен быть выставлен в 1 для валидного VNI, R – зарезервированные флаги выставленные в 0 при передаче и игнорируемы на приеме

Reserved (24 bits) - Зарезервированные флаги выставленные в 0 при передаче и игнорируемы на приеме

VNI (24 bits) - уникальный идентификатор сегмента виртуальной сети. Идентифицирует L2 домен. Размер поля такой же как у Geneve (порядка 16М номеров).

Reserved (8 bits) - Зарезервированные флаги выставленные в 0 при передаче и игнорируемы на приеме.

Ссылка на vxlan.pcap

 Summary по заголовкам пакетов VXLAN и GENEVE:

Одинаковый минимальный размер заголовка 8 байт с возможность расширения Geneve за счет поля опций разной длины. Geneve обладает следующими «преимуществами»:

  • Поддерживает проприетарные* значения полей type, length, value;

  • Обладает гибкостью в отношении включения дополнительных метаданных в заголовок;

* ИМХО это кажется основной причиной описания нового стандарта и активного его внедения ведущими вендорами, а не маркетинговый булщит на тему сочетания в себе преимуществ предшественников.

Целиком пакет Geneve over IPv4 выглядит так:

Ссылка на Geneve.pcap

Требования к IP Underlay сетевой инфраструктуры следующие:

  • IP связность между TEP

  • Отсутствие на пути трафика блокировок UDP6081 Geneve или UDP4789 VXLAN

  • Минимальный MTU 1600 байт

Итого

Существенных различий между VXLAN и Geneve на уровне заголовков нет, равно как и на этапе инкапсуляции пакета.

Получилось достаточно кратко. В будущем планирую рассмотреть процесс построения таблиц соответствия (которых три) и этапы передачи Geneve пакета между TEP примере NSX-T.