GRE (англ. Generic Routing Encapsulation — общая инкапсуляция маршрутов) — протокол туннелирования сетевых пакетов, разработанный фирмой Cisco. Его основное назначение — инкапсуляция пакетов сетевого уровня сетевой модели OSI в IP пакеты.
Пример применения
* Используется в сочетании с PPTP для создания виртуальных частных сетей.
* Применяется в технологии WDS для координации действий точек доступа и контроллера WDS.
* Используется в технологиях мобильного IP
Пример стека протоколов использующих GRE
Код:
RADIUS
UDP
IPv6 (2)
GRE
IPv4 (1)
Ethernet
Проблема DF-бита
В связи с служебным заголовком размер передаваемых данных внутри IP пакета через GRE-туннель уменьшается при сохранении общего размера пакета. В IP-пакете предусмотрено наличие бита DF (do not fragment), запрещающего разделение пакета на несколько при передаче через среду с меньшим размером MTU. В этом случае пакет с размером полезной области данных (англ. payload), превышающим MTU IP пакета в GRE-туннеле, отбрасывается, что приводит к потерям пакетов при существенной нагрузке (проходят пакеты малого размера, такие как SYN пакеты TCP, ICMP сообщения (ping), но теряются пакеты с данными в TCP потоке (т. е. соединение рвётся)). Для решения этой проблемы рекомендуется использовать path-mtu-discovery (определение TCP MSS, т. е. максимального размера IP-пакетов на всём пути) при передаче данных через GRE-туннель, чтобы избежать избыточной фрагментации или потери больших пакетов.