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