GPRS Tunnelling Protocol ( GTP ) — это группа протоколов связи на основе IP , используемых для передачи пакетной радиосвязи общего назначения (GPRS) в сетях GSM , UMTS , LTE и 5G NR . В архитектурах 3GPP интерфейсы на основе GTP и Proxy Mobile IPv6 указаны в различных точках интерфейса.
GTP можно разложить на отдельные протоколы: GTP-C, GTP-U и GTP' .
GTP-C используется в базовой сети GPRS для сигнализации между узлами поддержки шлюза GPRS (GGSN) и узлами поддержки обслуживания GPRS (SGSN). Это позволяет SGSN активировать сеанс от имени пользователя ( активация контекста PDP ), деактивировать тот же сеанс, настраивать параметры качества обслуживания или обновлять сеанс для абонента, который только что прибыл с другого SGSN.
GTP-U используется для передачи пользовательских данных в пределах базовой сети GPRS и между сетью радиодоступа и базовой сетью. Передаваемые пользовательские данные могут быть пакетами в любом из форматов IPv4 , IPv6 или PPP .
GTP' ( GTP prime ) использует ту же структуру сообщений, что и GTP-C и GTP-U, но имеет независимую функцию. Он может использоваться для переноса данных о тарификации из функции данных о тарификации (CDF) сети GSM или UMTS в функцию шлюза тарификации (CGF). В большинстве случаев это должно означать передачу данных от многих отдельных сетевых элементов, таких как GGSN, на централизованный компьютер, который более удобно доставляет данные о тарификации в центр выставления счетов оператора сети.
Различные варианты GTP реализуются RNC, SGSN, GGSN и CGF в сетях 3GPP. Мобильные станции GPRS (MS) подключаются к SGSN, не зная о GTP.
GTP можно использовать с UDP или TCP . UDP рекомендуется или обязателен, за исключением туннелирования X.25 в версии 0. GTP версии 1 используется только в UDP.
Все варианты GTP имеют некоторые общие черты. Структура сообщений одинакова, с заголовком GTP, следующим за заголовком UDP/TCP.
Заголовки GTPv1 содержат следующие поля: [1]
Далее следуют заголовки расширения:
Он также известен как evolved-GTP или eGTP. Заголовки GTPv2-C содержат следующие поля: [2]
Протокола GTPv2-U нет, GTP-U в LTE также использует GTPv1-U.
Помимо общей структуры сообщения, существует также общий механизм проверки связи от одного GSN к другому GSN. Он использует два сообщения.
GSN может отправлять эхо-запросы всем другим GSN, с которыми у него есть активное соединение, каждые 60 секунд. Если другой конец не отвечает, его можно считать отключенным, и активные соединения с ним будут удалены.
Помимо двух ранее упомянутых сообщений, нет других сообщений, общих для всех вариантов GTP [3], что означает, что по большей части они фактически образуют три совершенно отдельных протокола.
Протокол GTP-C является разделом управления стандарта GTP. Когда подписчик запрашивает контекст PDP , SGSN отправляет сообщение GTP-C запроса создания контекста PDP в GGSN, содержащее сведения о запросе подписчика. Затем GGSN отвечает сообщением GTP-C ответа создания контекста PDP , которое либо содержит сведения о фактически активированном контексте PDP, либо указывает на сбой и указывает причину этого сбоя. Это сообщение UDP на порту 2123.
Протокол eGTP-C (или GTPv2-C) отвечает за создание, поддержку и удаление туннелей на нескольких интерфейсах Sx. Он используется для управления путями плоскости управления, управления туннелями и управления мобильностью. Он также управляет пересылкой сообщений о перемещении; контекстом SRNS и созданием прямых туннелей во время хэндоверов между LTE.
GTP-U, по сути, является относительно простым протоколом туннелирования на основе IP, который допускает множество туннелей между каждым набором конечных точек. При использовании в UMTS каждый абонент будет иметь один или несколько туннелей, по одному для каждого контекста PDP, который у них активен, а также, возможно, иметь отдельные туннели для определенных соединений с различными требованиями к качеству обслуживания.
Отдельные туннели идентифицируются TEID (Tunnel Endpoint Identifier) в сообщениях GTP-U, который должен быть динамически назначаемым случайным числом. Если это случайное число имеет криптографическое качество, то оно обеспечит меру безопасности от определенных атак. Тем не менее, требование стандарта 3GPP заключается в том, что весь трафик GTP, включая пользовательские данные, должен отправляться в защищенных частных сетях, а не напрямую подключенных к Интернету. Это происходит на порту UDP 2152.
Протокол GTPv1-U используется для обмена пользовательскими данными по туннелям GTP через интерфейсы Sx. IP-пакет для UE (конечной точки пользователя) инкапсулируется в пакет GTPv1-U и туннелируется между P-GW и eNodeB для передачи относительно UE через интерфейсы S1-U и S5/S8.
Протокол GTP' используется для передачи данных о зарядке в функцию шлюза зарядки. GTP' использует порт TCP/UDP 3386.
GTP — это основной протокол, используемый в базовой сети GPRS. Это протокол, который позволяет конечным пользователям сетей GSM или UMTS перемещаться с места на место, продолжая при этом подключаться к Интернету, как будто из одного места в GGSN. Он делает это, перенося данные абонента из текущего SGSN абонента в GGSN, который обрабатывает сеанс абонента. Базовая сеть GPRS использует три формы GTP.
Узел GGSN и узел SGSN (совместно именуемые узлами GSN) прослушивают сообщения GTP-C на порту UDP 2123 и сообщения GTP-U на порту 2152. Это взаимодействие происходит в пределах одной сети или, в случае международного роуминга, может происходить на международном уровне, вероятно, через GPRS-роуминговую станцию (GRX).
Функция шлюза зарядки (CGF) прослушивает сообщения GTP, отправленные от GSN на порт TCP/UDP 3386. Основная сеть отправляет информацию о зарядке в CGF, обычно включая время активации контекста PDP и количество данных, переданных конечным пользователем. Однако эта коммуникация, которая происходит в пределах одной сети, менее стандартизирована и может, в зависимости от поставщика и параметров конфигурации, использовать фирменное кодирование или даже полностью фирменную систему.
GTP-U используется в IuPS между базовой сетью GPRS и RAN, однако протокол GTP-C не используется. В этом случае RANAP используется в качестве протокола управления и устанавливает туннели GTP-U между SGSN и контроллером радиосети (RNC).
GTP можно использовать с UDP или TCP . GTP версии 1 используется только на UDP.
По состоянию на 2018 год [update]определены три версии: версии 0, 1 и 2. Версии 0 и 1 значительно различаются по структуре. В версии 0 протокол сигнализации (протокол, который устанавливает туннели путем активации контекста PDP) объединен с протоколом туннелирования на одном порту. Версии 1 и 2 фактически представляют собой два протокола: один для управления (называемый GTP-C) и один для туннелирования пользовательских данных (называемый GTP-U). Версия GTP 2 отличается от версии 1 только в GTP-C. Это связано с тем, что 3GPP определяет улучшения GTP-C для EPS в версии 2 для улучшения обработки носителя.
GTP-U также используется для передачи пользовательских данных от RNC к SGSN в сетях UMTS. Однако в этом случае сигнализация осуществляется с использованием RANAP вместо GTP-C.
Первоначальная версия GTP (версия 0) имела существенные отличия от текущих версий (версии 1,2):
Неслучайный TEID в версии 0 представлял собой проблему безопасности, если злоумышленник имел доступ к сети любого партнера по роумингу или мог найти другой способ удаленной отправки пакетов в магистраль GPRS. Версия 0 выходит из употребления и заменяется версией 1 почти во всех сетях. К счастью, однако, использование различных номеров портов позволяет легко блокировать версию 0 с помощью простых списков доступа IP.
GTP изначально был стандартизирован в ETSI (стандарт GSM 09.60 [4] ). С созданием стандартов UMTS он был перемещен в 3GPP , который с 2005 года [update]поддерживает его как стандарт 3GPP 29.060. [5] GTP использует тот же формат сообщения, но его особые применения охвачены стандартом 32.295 вместе со стандартизированными форматами для данных о тарификации, которые он передает.
Более поздние версии TS 29.060 исключают поддержку взаимодействия GTPv1/v0 [6], так что нет возможности отката в случае, если GSN не поддерживает более высокую версию.
GTPv2 (для расширенных пакетных служб) был представлен в черновике в начале 2008 года и выпущен в декабре того же года. GTPv2 предлагает откат к GTPv1 через более ранний механизм «Версия не поддерживается», но явно не предлагает поддержки отката к GTPv0.