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 с максимальным номером, принятого передающей стороной в данной пользовательской сессии.
Источник www.ciscolab.ru