Протокол туннелирования GPRS

Протокол туннелирования GPRS (англ. GPRS Tunnelling Protocol, GTP) — это группа коммуникационных протоколов на основе IP, используемых для передачи данных в рамках общего пакетного радиосервиса (GPRS) в радиосетях GSM, UMTS, LTE (3GPP Long Term Evolution) и 5G NR. В архитектуре 3GPP интерфейсы на основе GTP и прокси-мобильного IPv6 (Proxy Mobile IPv6) определены для различных точек взаимодействия сетевых элементов[1].

GTP состоит из отдельных протоколов: GTP-C, GTP-U и GTP' (GTP prime).

GTP-C применяется во внутренней сети ядра GPRS для сигнализации между узлами поддержки шлюза GPRS (GGSN) и обслуживающими узлами поддержки GPRS (SGSN). Это позволяет, например, активировать для абонента сессию передачи данных (активация PDP-контекста), деактивировать её, изменять параметры качества обслуживания или обновлять сессию при переходе абонента между разными SGSN.

GTP-U используется для передачи пользовательских данных внутри ядра сети GPRS, а также между радиодоступом (RAN) и ядром. Форматы транспортируемых данных могут быть представлены пакетами IPv4, IPv6 или PPP.

GTP' (GTP prime) использует ту же структуру сообщений, что и GTP-C/GTP-U, но служит независимым задачам. В частности, применяется для передачи платёжных данных от функции сбора расчётной информации (CDF) к шлюзу расчёта (CGF). Чаще всего это означает отправку информации с множества сетевых элементов, таких как GGSN, на централизованный сервер для последующей обработки в биллинговой системе оператора.

Различные варианты GTP реализуются на контроллерах радиосети (RNC), SGSN, GGSN и CGF внутри сетей 3GPP. Мобильные станции GPRS (MS) подключаются к SGSN, не взаимодействуя с GTP напрямую.

GTP может работать через протоколы UDP или TCP. Однако использование UDP является либо рекомендованным, либо обязательным, за исключением туннелирования X.25 в версии 0. GTP версии 1 работает только через UDP.

GTP версии 1

Заголовки GTPv1 включают следующие поля:[1]

+ 0-2 3 4 5 6 7 8-15 16-23 24-31
0 Версия Тип протокола Зарезервировано Флаг расширения Флаг номера последовательности Флаг номера N‑PDU Тип сообщения Длина сообщения
32 Идентификатор конечной точки туннеля (TEID)
64 Номер последовательности Номер N‑PDU Тип следующего расширенного заголовка
Версия
3-битное поле. Для GTPv1 значение 1.
Тип протокола (PT)
1 бит, различает GTP (1) и GTP' (0).
Зарезервировано
1 бит, должен быть 0.
Флаг расширения (E)
есть ли следующий расширенный заголовок.
Флаг номера последовательности (S)
наличие поля номера последовательности.
Флаг номера N‑PDU (PN)
наличие поля N‑PDU.
Тип сообщения
8 бит, определяет тип сообщения GTP (описано в 3GPP TS 29.060, секция 7.1).
Длина сообщения
16 бит, длина полезных данных в байтах (не включая обязательный 8-байтный заголовок GTP), включает все дополнительные поля.
Идентификатор конечной точки туннеля (TEID)
32 бита (4 октета), используется для мультиплексирования различных соединений в одном туннеле GTP.
Номер последовательности
(опционально) 16 бит; присутствует, если один из флагов E, S, PN установлен; интерпретируется, только если установлен S.
Номер N‑PDU
(опционально) 8 бит; существует при наличии любого из флагов E, S, PN; интерпретируется при PN.
Тип следующего расширенного заголовка
(опционально) 8 бит; существует при E, S или PN, используется только если E.

Следующие расширенные заголовки организованы так:

+ Биты 0-7 8-23 24-31
0 Длина расширения Содержимое
Содержимое Следующий расшир. заголовок
Длина расширения
8 бит, указывает длину всего расширенного заголовка (включая все поля) в блоках по 4 октета.
Содержимое
данные расширенного заголовка.
Следующий расширенный заголовок
8 бит, указывает тип следующего расширения либо 0, если такового нет (возможна цепочка расширенных заголовков).

GTP версии 2

Также известен как развитый GTP или eGTP. Заголовки GTPv2-C содержат следующие поля:[2]

+ Бит 0-2 3 4 5-7 8-15 16-23 24-31
0 Версия Флаг наложения сообщений (P) Флаг TEID (T) Зарезервировано Тип сообщения Длина сообщения
32 TEID (присутствует только при T=1)
64 (32 если TEID отсутствует) Номер последовательности Зарезервировано

Протокола GTPv2-U не существует, в LTE используется GTPv1-U.

Версия
3-м битное поле (значение 2 для GTPv2)
Флаг наложения сообщений (P)
если выставлен, к сообщению добавляется ещё одно GTP-C сообщение.
Флаг TEID
если установлен, поле TEID присутствует между длиной сообщения и номером последовательности; обязательно почти для всех сообщений.
Длина сообщения
указывает длину сообщения в октетах, исключая обязательные 4 октета заголовка GTP-C; TEID (если есть) и номер последовательности включены в подсчёт.

Механизмы проверки доступности

Кроме формата сообщений, все версии GTP используют общий механизм для проверки доступности соединений между GSN. Для этого используются два типа сообщений — echo request (запрос эха) и echo response (ответ эха).

Каждые 60 секунд (или иным заданным интервалом) GSN может отправлять echo request всем активным соседям. Если ответ не поступает, соединение считается потерянным и удаляется.

За исключением этих двух, общих сообщений для всех версий GTP не существует, что по сути делает каждую разновидность GTP отдельным протоколом[3].

GTP-C — протокол управления

GTP-C — это управляющая часть протокола GTP. Когда абонент запрашивает активацию PDP-контекста, SGSN отправляет управляющее сообщение GTP-C типа «create PDP context request» на GGSN с деталями запроса. GGSN отвечает соответствующим сообщением, содержа либо параметры активированного PDP-контекста, либо причину отказа. Используется UDP-порт 2123.

Протокол eGTP-C (GTPv2-C) отвечает за создание, поддержку и удаление туннелей на нескольких интерфейсах Sx. Он обеспечивает маршрутизацию по управляющей плоскости, управление туннелями и мобильноcть абонентов, а также поддерживает перенаправление сообщений пересылки и перенос контекста в ходе хендовера LTE.

GTP-U — туннелирование пользовательских данных

GTP-U — это сравнительно простой протокол туннелирования IP, позволяющий создавать множество туннелей между каждой парой сетевых узлов. В UMTS для каждого PDP-контекста пользователя формируется отдельный туннель, также возможны дополнительные туннели для соединений с различными требованиями QoS.

Туннели идентифицируются уникальным (предпочтительно криптографическим) идентификатором TEID в каждом сообщении GTP-U. Качественная энтропия в TEID повышает защищённость от некоторых атак. Тем не менее стандарт 3GPP требует, чтобы весь трафик GTP, включая данные пользователя, передавался только внутри защищённых частных сетей, не подключённых напрямую к Интернету. Работа осуществляется через UDP-порт 2152.

Протокол GTPv1-U используется для обмена пользовательскими данными по туннелям между P-GW и eNodeB c учётом каждой конечной точки UE по интерфейсам S1-U и S5/S8.

GTP' — передача платёжных данных

Протокол GTP' служит для передачи расчётных данных к функции шлюза расчётов (CGF). Использует TCP и UDP-порт 3386.

Внутри ядра сети GPRS

GTP является основным протоколом, применяемым в ядре сети GPRS. Он обеспечивает мобильность пользователей GSM/UMTS-сети с сохранением подключения к Интернету: пользователь перемещается, а IP-сессия остаётся связанной с одним GGSN. Данные пользователя проходят от текущего SGSN к обслуживающему GGSN для данной сессии. Ядро сети использует три разновидности GTP:

  • GTP-U — для передачи пользовательских данных по отдельным туннелям PDP-контекстов;
  • GTP-C — для:
    • создания и удаления PDP-контекстов;
    • проверки доступности GSN;
    • обновления состояния при перемещении абонента между SGSN;
  • GTP' — для передачи расчётных данных между GSN и функцией расчёта.

SGSN и GGSN (совместно — GSN) принимают управляющие GTP-сообщения по UDP-порту 2123, а данные пользователя через порт 2152. Это может происходить как в одной сети, так и через границы сетей — например, в случае международного роуминга посредством GPRS Roaming Exchange (GRX).

Функция шлюза расчёта (CGF) слушает сообщения GTP' от GSN на портах TCP/UDP 3386. Ядро сети передаёт ей время активации PDP-контекста и объём пользовательского трафика. Однако такая передача внутри одной сети часто реализована не по стандарту, зависит от вендора и может использовать проприетарные протоколы и кодировку.

Использование на интерфейсе IuPS

GTP-U применяется на интерфейсе IuPS между ядром GPRS и радиосетью (RAN), но GTP-C здесь не используется. Для установления туннелей GTP-U между SGSN и контроллером радиосети (RNC) используется протокол RANAP.

Стек протоколов

Прикладные протоколы
IP (пользовательские данные)
GTP
UDP
IP
Уровень 2 (например, WAN или Ethernet)

Протокольный стек GTP-U

GTP может быть реализован на базе UDP или TCP. Версия 1 GTP работает только на UDP.

По состоянию на 2018 год определены три версии: 0, 1 и 2. Версии 0 и 1 существенно отличаются по структуре. В версии 0 сигнальный и туннелирующий протоколы объединены на одном порту, в версиях 1 и 2 сигнальный (GTP-C) и пользовательский (GTP-U) протоколы разделены. Версия 2 отличается от версии 1 только в части GTP-C (благодаря расширениям для поддержки EPS в 3GPP).

GTP-U используется для транспортировки пользовательских данных от контроллера радиосети (RNC) к SGSN в сетях UMTS. Сигнализация при этом выполняется по RANAP, а не через GTP-C.

Исторические версии GTP

Исходная версия протокола (версия 0) значительно отличается от современных версий (1 и 2):

  • идентификатор туннеля был неслучайным;
  • существовала поддержка передачи X.25;
  • фиксированный порт 3386 использовался для всех функций (в отличие от GTPv1, где он остался только для расчёта);
  • был разрешён транспорт через TCP (опционально), а не только UDP;
  • поля, связанные с абонентской подпиской (например, качество обслуживания), были ограничены.

Нерандомизированный TEID в версии 0 был уязвим — злоумышленник, попавший в сеть или к партнёрам по роумингу, мог атаковать платформу передачи данных. Версия 0 постепенно вытесняется версией 1 почти во всех сетях. Использование отдельных портов для разных версий позволяет блокировать старую версию на маршрутизаторах.

Стандартизация GTP

Первоначально GTP был стандартизирован обществом ETSI (стандарт GSM 09.60)[4]. С переходом к стандарту UMTS сопровождение GTP было передано 3GPP, которая поддерживает актуальную версию стандарта 29.060[5]. Форматы сообщений расчёта стандартизированы в 3GPP TS 32.295.

Поздние редакции TS 29.060 декларируют отказ от поддержки совместимости между версиями GTPv0/v1[6], то есть нет отката к более ранней версии, если GSN не поддерживает новую.

GTPv2 (для усовершенствованных пакетных сервисов) был представлен в черновиках в начале 2008 года и окончательно утверждён в декабре того же года. Новая версия поддерживает откат к GTPv1 по механизму «Версия не поддерживается», но не поддерживает работы с GTPv0.

Примечания

Литература

  • GSM standard 09.60, ETSI, 1996—1998, стандарт, охватывающий начальную (0) версию GTP.
  • 3GPP TS 29.060 V6.9.0 (2005-06), 3rd Generation Partnership Project, Sophia Antipolis, Франция, 2005—06. Основной стандарт, определяющий варианты GTP версии 1.
  • 3GPP TS 32.295 V6.1.0 (2005-06), 3rd Generation Partnership Project, Sophia Antipolis, Франция, 2005—06. Стандарт использования GTP для расчётов.
  • 3GPP TS 29.274 V8.1.0 (2009-03), 3rd Generation Partnership Project, Sophia Antipolis, Франция, 2009—03. GTPv2 для развитого GPRS.