Протокол GRE

GRE (Generic Routing Encapsulation) — протокол туннелирования сетевых пакетов, разработанный фирмой Cisco. Протокол GRE обеспечивает механизм инкапсуляции произвольных пакетов в произвольный транспортный протокол. В наиболее общем случае система имеет пакеты, которые нужно инкапсулировать и маршрутизировать (информационные пакеты). Информация (payload) сначала инкапсулируется в пакет GRE, который может также содержать маршрут.



Полученный в результате пакет GRE инкапсулируется в пакет другого протокола (протокол доставки). В данной статье мы рассмотрим форматы пакетов проткола GRE.

GRE версии 0

Формат заголовка GRE версии 0 выглядит следующим образом.



Первые два октета заголовка содержат флаги GRE:
  • C, Checksum Present. 1 бит. - Контрольная сумма присутствует (бит 0) и содержит корректное значение.
  • R, Routing Present. 1 bit. - Если бит установлен тогда поля смещения и маршрутизации присутствуют и содержат корректные значения
  • K, Key Present. 1 bit. - В заголовке GRE присутствует ключ и содержит корректное значение
  • S, Sequence Number present- Порядковый номер присутствует и содержит корректное значение
  • s, Strict Source Route - Рекомендуется устанавливать этот флаг только если поле маршрутной информации содержит маршруты Strict Source
  • Recur, Recursion Control - 3-битовое беззнаковое целое, указывающее допустимое число дополнительных инкапсуляций.
  • Flags - These bits are reserved and must be transmitted as 0
  • Version - Версия GRE протокола. Должно быть 0
  • Protocol Type - Тип протокола в поле содержимого (payload) пакета. В общем случае это поле указывает тип протокола Ethernet для данного пакета.
  • Checksum - Необязательное поле. Контрольная сумма IP (дополнение до 1) для заголовка GRE и содержимого пакета.
  • Offset - Необязательное поле. Показывает смещение в октетах от начала поля маршрутизации до первого октета проверяемой записи Source Route.
  • Key - Необязательное поле. 4-байтовое, число, которое было вставлено при инкапсуляции. Это значение может использоваться получателем для аутентификации отправителя пакета.
  • Sequence Number - Порядковый номер. Необязательное поле. 32-битовое целое число, вставляемое при инкапсуляции. Это значение может использоваться получателем для поддержки порядка передачи пакетов.
  • Routing - Маршрутизация. Необязательное поле. Содержит данные, которые могут использоваться при маршрутизации данного пакета.

GRE версии 1

Заголовок GRE, используемый протоколом PPTP, незначительно отличается от заголовка, описанного в текущей спецификации протокола GRE. Основное отличие в том, что привелкается дополнительное поле Acknowledgment Number используемое для определения того, прибыл ли GRE пакет на другую сторону GRE туннеля.


  • C, Checksum Present. - Сброшено в 0
  • R, Routing Present - Сброшено в 0
  • K, Key Present. - Установлено в 1
  • S, Sequence Number present - Устанавливается если присуствует Payload. Если Payload не присутствует, то этот бит сброшен в 0. GRE пакет спользуется только для подтверждения.
  • s, Strict Source Route - Сброшено в 0
  • Recur, Recursion Control - Сброшено в 0
  • A, Acknowledgment sequence number present - Установлено в 1, если пакет содержит номер подтверждения (Acknowledgment Number), используемый для подтверждения передаваемых данных.
  • Flags. - Сброшены в 0
  • Version - Версия протокола. Должно быть 1
  • Protocol - Протокол. Это значение всегда равно 0x880B.
  • Payload Length - Размер данных не включая заголовок GRE
  • Call ID - Содержит идентификатор стороны которой принадлежит пакет.
  • Sequence Number. - Необязательное поле. Порядковый номер содержимого
  • Acknowledgment Number - Необязательное поле. Порядковый номер пакета GRE с максимальным номером, принятого передающей стороной в данной пользовательской сессии.