GTP协议介绍
GTP 协议介绍
概述
通用分组无线服务 (General Packet Radio Service, GPRS)是为了支持分组交换(Packet Switching, PS)业务,在 2G GSM 网络基础之上发展而来的,通常被称为 2.5G 网络。GPRS隧道协议(GPRS Tunnelling Protocol, GTP)是 GPRS 核心网中基于 IP 的协议,主要用于在 GSN(GPRS Support Node) 节点之间的信息交互。
GTP协议目前有3个版本:version 2 用于 LTE 核心网;version 1 用于 GSM 和 UMTS,也用于 LTE 网络中用户面数据传输;version 0 是早期版本,被 1999 年标准化的 version 1替代。
网络结构
简单来说,GPRS 的结构(如下图)主要分为无线接入网 (Radio Access Network, RAN)和核心网(Core Network, CN)。其中,RAN 负责把终端(例如手机)接入到通信网络中;核心网负责通信数据的交换和处理。服务 GPRS 支持节点(Serving GPRS Support Node, SSGN)和网关 GPRS 支持节点(Gateway GPRS Support Node,GGSN)是 GPRS 网络的主要组件。
SGSN 负责在它的服务区域内从移动台接收/发送数据包,它的功能包括数据包路由和传输、移动性管理以及鉴权和计费功能。GGSN 负责 GPRS 网络和外部网络之间的互联。
SGSN 和 GGSN 的主要区别在于,GGSN 作为网关,在不同的通信网中转换协议。可以把从 mobile 到 GGSN 看作一个内网, GGSN 实现 NAT/PAT 功能,将私有地址转成 GGSN 公网地址池的公网地址,即手机访问互联网使用的公网地址。而 SGSN 作为路由,只是在使用相同协议的网络中接收/转发数据包。
现行的 4G LTE 网络使用 SAE 结构体系,支持控制与转发面分离,SSGN 由服务网关(S-GW),移动性管理组件(MME)等网元替代,GGSN 的功能主要由 PDN 网关(P-GW)实现。
同一个移动通信网(Public Land Mobile Network, PLMN)内部 GSN 之间的通信接口称为 Gn,不同 PLMN 之间 GSN 的接口称为 Gp。Gn/Gp 接口运行 GTP 协议,为 SGSN 和 GGSN 之间的信令和用户数据提供隧道。GTP 能够将数据帧重新封装并通过隧道发送,由新的报文首部提供路由信息,以便在不同网络下传递被封装的负载数据。
由于核心网内部通过 GTP 协议通信,报文在核心网与外部网络之间传输时需要对数据报头进行处理。数据包进入核心网时添加 GTP 头,反之,则去 GTP 头。
数据转发的流程通常是 SGSN 接收数据包,对其封装后通过GTP 隧道将报文转发到 GGSN。GGSN 接收这些数据包时,先解封隧道,然后转发到外部主机。
核心网连接流程
GPRS 分组域核心网使用 PDP(Packet Data Protocol, 分组数据协议) 上下文来管理用户从移动终端到 GSN 及外部网络的数据。移动终端使用分组数据业务时,需要激活 PDP 上下文,激活成功后,移动终端、SGSN 和 GGSN 中会增加一条新的 PDP 上下文记录。根据 PDP 记录信息,SGSN 和 GGSN 才能正确地收发用户数据。
一个简单的分组会话连接过程包括以下三个阶段:
1. 分组域会话连接建立阶段
移动终端发起激活 PDP 上下文的请求,GSN 接受用户的请求并建立新的 PDP 上下文。
SGSN 确认 MS 发送的激活 PDP 请求后,向 GGSN 发送创建 PDP 上下文请求消息。对于首次激活的PDP 上下文,请求消息中包含移动终端的 IMSI 和 MSISDN、NSAPI、SGSN 分配的控制平面 ID(TEID_CP)、PDP Address、接入点名称(Access Point Name)等信息。
GGSN 收到请求后在其 PDP上下文表中创建一个新条目,生成计费 ID,并返回一个创建 PDP 上下文响应。SGSN 收到响应时检查报文中 cause 字段的值,若为 Request accepted,则激活 PDP 上下文。请求接受的响应报文消息包括 TEID、PDP 类型、PDP 地址、协议配置选项、协商的 QoS、计费 ID 等。
更新 PDP 上下文通常由 SGSN 发给 GGSN,作为 SGSN 间 GPRS 路由更新或 PDP 上下文修改过程的一部分。对于跨 SGSN 的路由区域更新,更新请求由新的 SGSN 发送。也可由 GGSN 发起,用于重新协商 PDP 上下文服务质量。
2. 分组域会话阶段:
移动终端收到 PDP 上下文请求成功消息后,可以通过 GSN 连接到互联网。核心网在移动终端和互联网之间透明地路由,转发分组数据,保证在不同网络环境下,数据的正确性。
3. 分组域会话连接结束阶段
当用户不再使用业务时,移动终端发送去激活消息给 SGSN。SGSN 发送删除 PDP 上下文请求给 GGSN,GGSN 删除 PDP 上下文,并返回消息给 SGSN。SGSN 将去激活响应消息再返回给移动终端。
协议分析
GTP 协议包括 GTP 控制面协议(GTP-C) 和用户面协议(GTP-U) 。 在控制面,GTP 协议定义了隧道控制和管理协议,允许 GSN 为移动终端提供分组数据接入, 控制面的信令用于创建、修改和删除隧道。在用户面, GTP 使用隧道机制为用户提供传输数据包的服务, 包括用户数据分组、路径管理。
首部结构
GTP 首部是 GTP- C 和 GTP-U 协议的公用变长首部,最小长度是8字节。分为必选字段和可选字段。
必选字段
Version field: 指定 GTP 协议的版本,通常情况为1。
Protocol Type (PT):区分 GTP 协议(置1)和 GTP 计费协议(置0)。
Extension Header flag (E):说明标志是否有下一个扩展头字段, 字段置1表示有,字段置0表示不必解释下一个扩展头字段。
Sequence number flag (S):说明标志是否有序号字段,有则置1, 置0表示没有或不需要解释。
N-PDU Number flag (PN):该标志指示 N-PDU 数字字段中存在一个有意义的值。当它被设置为0时,N-PDU 数字字段要么不存在,要么不被解释。当它被设置为1时,首部存在 N-PDU Number 字段,并将进行解释。
Message Type:该字段指示 GTP 消息类型(GTP-C 和 GTP-U)。
Length:GTP 头的必选字段(即前8字节)之后的包长度。
Tunnel Endpoint Identifier (TEID):该字段标识 GTP 协议实体中的隧道端点。TEID 值由 GTP 隧道的对端本地分配,供发起方使用。
可选字段
Sequence Number:事务标识,说明消息传输顺序。
N-PDU Number:此字段用于 SGSN 路由区域间的更新和一些系统间的切换过程(例如 2G 和 3G 无线接入网之间),协调MS 和 SGSN之间的公认通信模式的数据传输。
Next Extension Header Type:定义紧接该字段的扩展头的类型。
消息类型
通常情况下 GTP 报文的封装格式如下图所示:
GTP 定义了两个相关 GSN 或 SGSN 和 RNC 之间的一组消息。消息包括路径管理消息,隧道管理消息, 位置管理消息和移动性管理消息四大类。具体可参考 3GPP TS 29.060 Section 7。这里列举四类中部分消息。
路径管理消息
路径管理消息可以在任何类型的 GSN 或 GSN - RNC 对之间发送。
Echo Request/Response:GSN 或 RNC 可以在路径上向另一个 GSN 或 RNC 发送回送请求,以确定对等的 GSN 或 RNC 是否连通,对接收到的 Echo 请求发送响应。
隧道管理消息
Create PDP Context Request/Response:创建 PDP 上下文请求和响应, 由 SGSN 向 GGSN 发送请求消息,GGSN 向 SGSN 发送响应消息。
Update PDP Context Request/Response:更新 PDP 上下文请求和响应, 当 PDP 上下文的有关参数(如网络质量 QoS )需要重新协商时, 或者手机发生越 SGSN 切换时, SGSN 或 GGSN 向对端发送请求消息, 对端发送响应消息。
Delete PDP Context Request/Response:删除 PDP 上下文请求和响应。
位置管理消息:该可选消息在网络请求的 PDP上下文激活过程中 GGSN 没有 Gc 接口时使用。
移动性管理消息:移动管理消息在 SGSN 路由更新时发送。控制平面能够将 MS 相关的数据从旧的 SGSN 传输到新的 SGSN。
信息单元(Information Elements)
GTP 报文除去包头和扩展头,剩下的信令消息可包含若干信息元素(IE),分为 TLV 型(Type, Length, Value)或 TV 型(Type, Value)。可以从报文中提取这些 IE 信息用于关联分析。这里列出部分 IE,具体可参考 3GPP TS 29.060 Section 7.7 Table 37。
IE类型值 | 格式 | IE | 长度 |
---|---|---|---|
1 | TV | 原因(Cause):描述请求原因或响应结果 | 1 |
2 | TV | 国际移动用户识别码(International Mobile Subscriber Identity, IMSI) | 8 |
3 | TV | 路由区标识(Routeing Area Identity, RAI) | 6 |
16 | TV | Tunnel Endpoint Identifier Data I:数据面 TEID 标识 | 4 |
17 | TV | Tunnel Endpoint Identifier Control Plane:控制面 TEID 标识 | 4 |
20 | TV | NSAPI:用户网络接入点 | 1 |
128 | TLV | 终端用户地址(End User Address) | 变长 |
133 | TLV | GSN Address | 变长 |
134 | TLV | 移动台识别码(MS International PSTN/ISDN Number, MSISDN) | 变长 |
154 | TLV | 国际移动设备身份码(IMEI) | 8 |
参考资料
GPRS隧道协议. https://zh.wikipedia.org/wiki/GPRS%E9%9A%A7%E9%81%93%E5%8D%8F%E8%AE%AE.
GPRS核心网. https://zh.wikipedia.org/wiki/GPRS%E6%A0%B8%E5%BF%83%E7%BD%91.
移动数据通信网络工作原理(SGSN&GGSN). https://blog.csdn.net/zhuyiquan/article/details/52759930.
GPRS Tunnelling Protocol. https://carecraft.github.io/protocol-model/2015/01/gtp_protocol/.
陈勇. GTP协议解析系统的实现与应用[D]. 北京邮电大学, 2013.
3GPP TS 23.060-g00. https://www.3gpp.org/ftp/Specs/archive/23_series/23.060/23060-g00.zip.
3GPP TS 29.060-f30. https://www.3gpp.org/ftp/Specs/archive/29_series/29.060/29060-f30.zip.