目录

前文列表

4G EPS 中的 PDN Connection

4G EPS 中的 Bearer

4G EPS 中的 ESM 和 EMM

4G EPS 中的 GTP

用户平面

所谓用户平面,就是真正传输业务数据(e.g. DNS Request、HTTP Request)的平面,简称 UP。相对应的,传送信令数据(e.g. E-RAB Setup Request、Create Bearer Request)的平面称为控制平面(Control Plane),简称 CP

EPS 的 User Plane 路径由 UE <=> eNB <=> SGW <==> PGW 组成。其实,EPS 的架构设计上,SGW 和 PGW 是相互独立的实体单元,位于不同的节点。但在现网部署中,SGW 和 PGW 也可以共存于同一节点,进一步降低时延,这样的节点称为 SAE-GW(System Architecture Evolution Gateway),MME 选择 SGW 和 PGW 时应尽量选择 SAE-GW。

  • UE:用户终端
  • eNB:(基站)无线信号收发器
  • SGW:本地移动性锚点,在一定的物理区域范围内,为 PGW 屏蔽 UE 的移动性。
  • PGW:业务锚点,连接 PDN。

实际上,eNB 与 SGW 之间、SGW 与 PGW 之间依旧是通过 TCP/IP 三层网络(Underlying IP Transport Network)进行互联的。但是,由于 EPS UP 不只为一个 UE 服务,所以就要求在同一条物理链路上能够区分所属于不同 UE 的 EPS Bearer,这就依赖于隧道技术的实现 —— GTP(GPRS Tunnelling Protocol,GPRS 隧道协议)

在详细了解 GTP 协议之前,我们需要了解到 GTP 是一种 IP Over IP 技术。也就是说在整个 EPS 系统中,实际上是存在两种 IP 类型的数据报文,即:UE IP(业务数据 IP 层)和 NE IP(核心网元互连 IP 层),对此我们要有一个清晰的认识。如下图所示,

  • UE IP(业务数据 IP 层):暗绿色,在 EPS 中,UE IP 不具有寻址作用,仅具有与 PDN 互连的意义。
  • NE IP(核心网元互连 IP 层):灰色,在 EPS,NE IP 仅具有 EPS 内部网元节点之间,或者称之为 GTP-U Protocol Entity(GTP-U 协议实体)之间的寻址作用。

EPS UP 中的 GTP-U

EPS 使用的 GTP

  • GTPv2-C:控制面的传输协议。
  • GTPv1-U:S1-U 和 S5-U 的用户面传输协议。
  • GTPv1’:计费协议。

EPS 中,将应用 GTPv1-U 协议的网元(eNB、SGW 和 PGW)称之为 Peer。每个 Peer 都包含了一个或多个的 GTP-U Protocol Entity(简称,GTP-U Entity),每个 GTP-U Entity 都具有一个 NE IP,不同 Peer 之间通过 GTP-U Entity 来进行连接,该连接称之为 GTP(UDP/IP)Path。每个 GTP Path 包含了若干个 GTP-U Tunnel,通过 TEID 来进行区分

NOTE:GTP-U 协议规定 GTP-U Entity 的 Dst UDP Port(目标端口)为 2152,而 Src UDP Port 则是由发送方自由分配,也就是说并不可以根据 Src UDP Port 号来区别不同的 GTP Path。



如上图所示,以 S5-U 接口为例:SGW、PGW 都是 Peer。SGW 或 PGW 具有所少个 NE IP 用于 GTP-U,则具有多少 GTP-U Entity。在实际部署中,电信运营商可以配置多块插板(U 板)用于 GTP-U 业务,每块插板分配 1 个 NE IP,则有了多个 GTP-U Entity,可以与多个 Peer 相连。

因此,我们也会将原始的业务数据称为 T-PDU,而 T-PDU 在 GTP Entity 中被封装上了 GTP Header 之后就称之为 G-PDU

F-TEID 的组成

前文说到,GTP Tunnel 是包含在 GTP Path 中的隧道,具有用于连接、并且唯一的 GTP Tunnel Endpoint,使用 TEID 来进行标识。但由于 GTP Tunnel 的使用会涉及到 GTP 协议类型的不同、网元类型的不同、EPS 接口类型的不同、GTP Entity 的不同等因素的影响。所以,一个 EPS 全局唯一的 F-TEID 应该具有以下几个要素:

  • GTP Entity NE IP
  • EPS 接口类型
  • 网元类型
  • GTP 协议类型
  • TEID

例如:S5 Bearer 对应的 GTP-U Tunnel,在 SGW 一侧的 TEID 为 S5 SGW GTP-U TEID,在 PGW 一侧的 TEID 为S5 PGW GTP-U TEID。在此基础上再结合 GTP-U Entity 的 NE IP 地址,就构成了 F-TEID。而且,其中的 TEID 是临时性的,当发送方在发送消息的时候才会动态生成

UE IP 数据包在 GTP-U Tunnel 上的封装流程

  1. 当 UE 发出一个上行的 IP 数据包时,IP 数据包头的 Src IP 为 UE IP,Dst IP 为 PDN 中的服务器的地址。
  2. IP 数据包通过 RAN 传送给 eNB,eNB 作为 GTP Entity 将原始的 IP 数据包封装上 GTP Header 成为 GTP 数据包。此时,每个 GTP 数据包的 Src IP 为 eNB NE IP,目的地址则是 SGW NE IP,TEID 为 S1 SGW GTP-U TEID。eNB 根据 SGW NE IP 将 GTP 数据包发送到 SGW。
  3. GTP 数据包到达 SGW 后,SGW 首先会检查 GTP Header 中的 S1 SGW GTP-U TEID 是否为自己的 TEID,若是则继续通过 SGW 的 GTP Entity 将 TEID 替换为 S5 PGW GTP-U TEID,将 GTP 数据包的 Src/Dst IP 分别换成了 SGW/PGW NE IP 并发送至 PGW。若不在,则丢弃 GTP 数据包。
  4. 最终,GTP 数据包到达 PGW 后,PGW 也会首先检查 GTP Header 中的 S5 PGW GTP-U TEID 是否为自己的 TEID。若是则 PGW 的 GTP Entity 进行 GTP 解封装,查看其内含的 IP 数据包的真正的目的地址,然后将数据包路由转发至 PDN。

这样,就完成了一个 IP 数据包从 UE 的 PDN 的上传了。而在 UE 和 APN 之间建立的 PDN Connection 中的 EPS Bearer,其下属的 S1 Bearer 和 S5 Bearer 的本质就是 GTP-U Tunnel

关于 TEID 有一个问题或许你已经察觉,就是 GTPv2 Header 中只有一个 Dst TEID,而没有 Src TEID,接收方的 GTP Entity 也不会检查发送发的 TEID。可见,虽然 GTP Tunnel 的 Endpoint 是成对定义的,但收发双方的 Endpoint 关系却比较松散。这个特点为通信带来了一个安全的隐患:只要知道了对方的 F-TEID,那么任何人都可以向其发送数据,并且接收方始终以为数据时隧道的合法对端发送过来的。为此,TEID 被设计了一个特点:GTP Tunnel 的 TEID 始终在建立 GTP-U Tunnel 时才随机分配,并随着 GTP Tunnel 的释放而释放。这在一定程度上保证了,只有合法发送方知道接收方的 TEID,并对其发送数据。

那为什么要将 GTPv2 Header 设计成这个样子呢?答案依旧是为了 UE 的移动性。例如:在 UE 移动到需要切换 SGW 的过程中,新的上行数据会立即从 New SGW 发给锚 PGW,而旧的下行数据依然会从 PGW 发给 Old SGW,在完成切换后,PGW 才会将新的下行数据发送给 New SGW。显然,在整个 UE 切换的过程中,这种松散的 GTP Tunnel Endpoint 为 EPS Bearer 的上行数据、下行数据也带来了解耦,满足了 UE 的移动性需求

那么在这种松散的 GTP Tunnel Endpoint 设计中,收发双方建立的 GTP Path 又是如何确认其存在的呢?常见的方法就是维护 “心跳” 链接?接收方的 GTP Entity 会根据发送方的 NE IP,向对端发送 Echo Request,再由对端返回 Echo Response,这就是一个 “心跳”。GTP Echo 机制是 GTP Path 层级的维护消息。

除了 GTP Path 的维护信息之外,还有 GTP Tunnel 层级的维护消息:Error Indication 和 End Marker。如果 GTP-U Entity 收到了与自身 TEID 不匹配的 G-PDU,那么 GTP-U Entity 就会向对端返回 Error Indication 消息;在上文提到过的 UE 切换场景中,当 SGW 或 PGW 收到更新下行 F-TEID 的 MBR(GTP-C 消息)后,应该向原有下行路径发送 End Mark(GTP-U 消息)消息,表示原有的下行数据路径终结,并指示新下行路径上的 New eNB 或 New SGW 接收数据。

GTP-U 与 EPS Bearer

这里我们以 GTP-U 和 RB、S1 Bearer 以及 S5 Bearer 为例。如下图所示:

  1. UE 将 UL TFT 和 RB ID 映射:在 UE 中符合 UL TFT 中 PF 规定的 SDF 发送至 RB ID 标识的 RB 中。
  2. eNB 将 RB ID 和 S1 eNB GTP-U TEID 映射:eNB 将从 RB ID 标识的 RB 中接收到的 SDF 发送至与 RB ID 关联起来的 S1 eNB GTP-U TEID 标识的 GTP Tunnel(S1 Bearer)中的,并发送到 Tunnel 的对端。
  3. SGW 将 S1 SGW GTP-U TEID 和 S5 SGW GTP-U TEID 映射:SGW 将从 S1 SGW GTP-U TEID 标识的 GTP Tunnel(S1 Bearer)中接收到的 SDF 发送到与 S1 SGW GTP-U TEID 关联的 S5 SGW GTP-U TEID 标识的 GTP Tunnel(S5 Bearer)中。
  4. PGW 将 DL TFT 和 S5 PGW GTP-U TEID 映射:PGW 将从 S5 PGW GTP-U TEID 标识的 GTP Tunnel(S5 Bearer)中接收到的 SDF 发送到 DL TFT 映射到的 External Bearer 中。

EPS 就是通过将不同的 ID 建立 Mapping,以此来完成了 EPS Bearer 的完整实现,既保证的完整性,又具有解耦的灵活性

NOTE(待确定!):上图可见,GTP-U Tunnel 和 EPS Bearer 是一对一的关系,即一个 UE 可以拥有多个 GTP-U Tunnel。

MME 如何选择 PGW/SGW?

PGW 是 UE 通向 PDN 的网关,UE 通过 APN 来指定要访问的 PDN。由此,UE 在请求建立 PDN Connection 时,只有配置了指定 APN 的 PGW,才会被选中

此外,还要考虑漫游的场景:根据漫游协议不同,选中的可能是 HPLMN(Home Routed)或 VPLMN(Local Breakout)的 PGW。在 HSS 的签约数据中,每个 APN 均包含了 VPAA(VPLMN Address Allowed)标志,表示是否允许使用 VPLMN 的 PGW,同时,MME 也有对应不同 PLMN 漫入用户的配置。

而 SGW 是 UE 的本地移动性锚点,UE 移动时应该尽量保持 SGW 不变。但 SGW 也有服务范围,这个范围内 eNB 的用户面数据被汇聚到同一个 SGW。

在漫游场景中,无论 PGW 处于 HPLMN 还是处于 VPLMN,SGW 都必然是 VPLMN 的 SGW。SGW 和 eNB 靠近,减少了 eNB 和 SGW 之间的传送时延。

可见,MME 会应根据 eNB 的地理位置来选择 SGW。确切的说,MME 是根据 TAI(Tracking Area Identity)来选择 SGW

TAI 由 PLMN ID + TAC 组成,EPS 将覆盖区域划分为若干 TA(Tracking Area,跟踪区),以实现 EMM(EPS Mobility Management,移动性管理)。

出于容灾考虑,运营商通常会部署 SGW POOL 为同一 TA 服务,以及部署 PGW POOL 为同一 APN 服务。这意味着,以 APN 和 TAI 为条件,MME 会得到一组候选 PGW 和一组候选 SGW。同样的,为减少 SGW 和 PGW 之间的传送时延, SGW 和 PGW 也应尽量靠近,甚至存在于同一物理节点上,称之为合设节点(Co-Located SAE-GW),简称 SAE-GW。

需要注意的是,不是所有场景都需同时选择 SGW 和 PGW 的。例如:

  • 在 TAU 场景中(UE 在空闲态移动到新 TA List),由于 PGW 是业务锚点保持不变,但 SGW 可能会变,此时会选择新的 SGW;
  • 在 UE 已经建立若干 PDN Connection 同时还请求与其他 APN 建立新的 PDN Connection 的场景中,由于 SGW 是本地移动性锚点,所以 SGW 保持不变,只需选择新的 PGW。

抛开选择过程,仅从结果来看,最终选中的 SGW 和 PGW,就被包含在了在 MME 发送的 CREATE SESSION REQUEST 消息中,哪个SGW 接收到消息,就表示其被选中。同时,MME 会同时告知 SGW 选中的 PGW,SGW 再向选中的 PGW 发送 CREATE SESSION REQUEST 消息

NOTE:从代码逻辑的角度来看,所谓选中,其实是 MME 获得了 SGW S11-C IP(蓝点)和 PGW S5-C IP(红点),才可向 SGW 发送 CREATE SESSION REQUEST 消息。同时,MME 将 PGW S5-C IP 告知 SGW,SGW 可向 PGW 发送 CREATE SESSION REQUEST 消息。

总的来说,MME 除了依据 APN 来选择 PGW、依据 TAI 来选择 SGW 之外,还需考虑 SGW 和 PGW 是否合设,SGW 和 PGW 的物理位置是否相近,同时,还要考虑协议、漫游、容灾和均衡等因素,是非常复杂的过程

MME 通过 Local DNS 辅助选择 PGW/SGW

理论上,SGW 和 PGW 的 IP 配置在 MME 上,但现网部署肯定需要一个集中式的 “特征-节点” 映射组件,以此来实现全网统一管理,这就是 Local DNS(运营商内部 DNS)。不过,DNS 作用也仅限于记录,最终选择还是由 MME 完成。DNS 借由分级部署、递归查询的特性,可以很好的做到全网统一(DNS 只配置本区域的数据,其他区域(如其他省份或其他运营商)可向其他 DNS 查询)。

需要注意的是,Local DNS 的特别之处在于,其完成的不是 IP-Domain 映射,而是通过输入 APN 和 TAI 等信息 Query 到网元的通信标识(e.g. PGW S5-C IP、SGW S11-C IP)。MME 希望 Local DNS 不仅返回 IP,还可辅助 SGW 和 PGW 的选择。所以,实际上 Local DNS 是一个 DDDS(Dynamic Delegation Discovery System)的系统。如果将 APN、TAI 看成 DDDS 的 “Domain”,将 PGW 和 SGW 看成 DDDS 的服务,将 EPC 网元接口和协议看成 DDDS 的协议,那么 EPS 就可以利用 DDDS 系统来查找 PGW 和 SGW 地址了。



更准确的是,Local DNS 使用的是一个 DDDS 应用:S-NAPTR(Straightforward NAPTR)。S-NAPTR 使用 NAPTR 记录、SRV 记录和 A 记录(或 AAAA 记录),将域名、服务、协议映射为服务器的 IP 地址。S-NAPTR 将 APN、TAI、GUMMEI(MME 唯一标识)、RAI(RA 唯一标识)称为 AUS(ApplicationUser String),S-NAPTR 的第一步,就是将 AUS 转换为域名。从 AUS 转换得到的域名称为 FQDN(Fully Qualified Domain Name),EPS 中以 epc.mncxxx.mccxxx.3gppnetwork.org. 结尾。以中移动为例:

  • APN FQDN:xxx.apn.epc.mnc00x.mcc460.3gppnework. org.
  • TAI FQDN:tac-lbxx.tac-hbyy.tac.epc.mnc000.mcc460.3gppnetwork.org.
  • GUMMEI FQDN:mmecxx.mmegiyy.mme.epc.mnc000.mcc460.3gppnetwork.org.

以此为基础,根据 Local DNS 根据输入的 APN、TAI、GUMMEI 就可以选中对应 EPC 网元的 IP 了。

优先选择 SAE-GW

EPS 通过 Canonical Node Name(标准节点名)来区分 SAR-GW,例如:Canonical Node Name FQDN:node.epc.mncxxx.mccxxx.3gppnetwork.org.

为比较不同节点在地理上是否相近,“node” 标签前可逐级添加地域标签。以中国移动为例:

  1. 先添加省级标签(e.g. “bj” 表示北京,“sh” 表示上海)
  2. 再添加市级标签(e.g. “east” 表示东城区,“west” 表示西城区)
  3. 再添加机房标签(e.g. site01,site02)
  4. 最后添加节点标签(e.g. saegw01,saegw02)

可见,不同 SAE-GW 的 Canonical Node Name 从后往前按序比对,相同标签的数量越多表示地理越相近,这是 MME 选择相近节点的依据。

需要注意的是,MME 的根本目标是选择 SGW 和 PGW 的 NE IP(网元间接口及协议),而不仅仅是选中一个 SAE-GW 物理节点。为和 DNS 的主机(Host)概念匹配,EPS 在物理节点的基础上定义 Host,每个主机对应 SAE-GW 物理节点的一个 NE IP,Host name 的构成是 [topon/topoff] + [接口名称] + Canonical Node Name。例如:

# [ topon / topoff ] 标签是一个开关,topon 表示 Host 参与拓扑优选,topoff 则相反

topon.sgw-s5.saegw01.site01.west.bj.node.epc.mnc000.mcc460.3gppnetwork.org.
topon.sgw-s11.saegw01.site01.west.bj.node.epc.mnc000.mcc460.3gppnetwork.org.
topoff.pgw-s5.saegw01.site01.west.bj.node.epc.mnc000.mcc460.3gppnetwork.org.

如果找不到优先选择的 SAE-GW,且 SGW 和 PGW Host name 包含了 topon 标签,那么则按照最长匹配原则优选相近节点,否则不考虑地理因素,只根据优先级和权重等选择。这样,在 DNS 配置 A 记录(IPv4)或 AAAA 记录(IPv6),就可将不同节点、不同接口的 NE IP 记录下来,即可以通过 Host name 获得 NE IP。

4G EPS 中的 User Plane的更多相关文章

  1. 如何巧妙使用ZBrush中的Image Plane插件

    ZBrush®插件Image Plane提供了一种简单的方法加载图像到ZBrush中,以在添加纹理过程中进行使用,比如使用ZProject笔刷多边形着色,以及利用参考图建模等. ZBrush 中文版下 ...

  2. 3G 4G 5G中的网络安全问题——文献汇总

    Modeling and Analysis of RRC-Based Signalling Storms in 3G Networks 还是使用状态机模型来做恶意UE识别 https://san.ee ...

  3. 使用GnuRadio+OpenLTE+SDR搭建4G LTE基站(上)

    0×00 前言 在移动互联网大规模发展的背景下,智能手机的普及和各种互联网应用的流行,致使对无线网络的需求呈几何级增长,导致移动运营商之间的竞争愈发激烈.但由于资费下调等各种因素影响,运营商从用户获得 ...

  4. WPF中对三维模型的控制

    原文:WPF中对三维模型的控制 (以下选自南开大学出版社出版的<WPF和Silverlight教程>) 3Dmax中的建模模型可以导出为obj文件格式,将此文件导入WPF项目中,由WPF完 ...

  5. 究竟谁在绑架中国的4G政策?

    2009年中国正式发放3G牌照以来,尽管在开始阶段受到了应用不足的困扰,但是随着智 能手机的迅速推广,3G移动通信也开始在中国得到了飞速的发展.就在消费者以及市场 逐步接受并广泛应用该技术之际,4G通 ...

  6. Unity3D中播放视频的方法

    播放视频其实和贴图非常相像,因为播放视频用到的 MovieTexture 属于贴图 Texture 的子类.Unity3D 支持的视频格式有很多,但是还是建议使用 ogv 格式的视频,使用其他格式依然 ...

  7. 5G信令(就是用户身份信息)——手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。

    5G时代,跟IMSI-CATCHER SAY GOODBYE from:https://unicorn.360.com/blog/2018/04/18/GoodBye_5G_IMSI-Catcher/ ...

  8. 4G LTE 网只能提供数据服务,不能承载语音通话,该怎么理解?

    转:http://www.qbiao.com/16776.html 这个问题要从移动核心网的角度来理解.我们平时说的WCDMA.TD-SCDMA.TD-LTE其实通常指空口技术,即从手机到基站的通信技 ...

  9. three中的着色器示例

    其实在3D引擎/库的帮助下,我们做webgl开发的难度已经很大大地降低了,熟悉相关API的话,开发一个简单的3D程序可以说是很轻松的事情. 在我看来,webgl的核心就是着色器(顶点着色器.片元着色器 ...

  10. Unity3D游戏开发之在Unity3D中视频播放功能的实现

    版权声明:欢迎订阅公众号[5厘米的理想],愿生命里的每个小理想,都能成为生命里的小确幸.本文地址为: https://blog.csdn.net/qinyuanpei/article/details/ ...

随机推荐

  1. mupdf实用操作demo,C++操作PDF文件

    前文: 最近有个项目,需要读写PDF,本来想着挺简单的,读写PDF有那么多的库可以使用,唰唰的就完成了. 忘记了我写C++的,还是在国产系统上开发的. 所以一般的东西还不好使,因为项目需要在多个架构的 ...

  2. 链表LinkedList

    #include <iostream> #include <vector> using namespace std; struct Node{ int val; Node *n ...

  3. sql 语句系列(两个日期之间)[八百章之第十七章]

    前言 进入了日期章了. 年月日加减法 分别对原有的日期进行加减法. sql server select DATEADD(DAY,-5,HIREDATE) as hd_mimus_5D, DATEADD ...

  4. 重新整理数据结构与算法(c#)——算法套路k克鲁斯算法[三十]

    前言 这个和前面一节有关系,是这样子的,前面是用顶点作为参照条件,这个是用边作为参照条件. 正文 图解如下: 每次选择最小的边. 但是会遇到一个小问题,就是会构成回路. 比如说第四步中,最小边是CE, ...

  5. 【cef编译包】下载地址

    http://opensource.spotify.com/cefbuilds/index.html

  6. 同义词查找,关键词扩展,使用腾讯Tencent AILAB的800万词向量,gensim,annoy

    最近在做一个关键词匹配系统,为了更好的效果, 添加一个关键词扩展的功能.使用Tencent AIlab的800万词向量文件. 腾讯AILAB的800万词向量下载地址:https://ai.tencen ...

  7. 模型代码联动难? BizWorks来助力

    简介: 本文介绍了业务模型设计和实现保持一致的重要性以及实际落地可能遇到的问题,以及BizWorks如何设计并提供一种双向联动能力, 通过BizWorks Toolkit(IDE 插件) 来解决和优化 ...

  8. 免费体验!阿里云智能LOGO帮你解决设计难题

    ​简介:超实用!零基础搞定一个高大上的智能logo设计 新年过后,往往是大家一年中士气最足的时候,散去了年末的疲惫和emo,重燃对新一年的热情和希望. 想创业的朋友们同样意气风发,趁着新年的劲头想大干 ...

  9. 如何构建企业出海的"免疫力"?深入解读阿里云CDN安全能力

    简介: 随着信息技术快速发展与应用,产业数字化和智能化趋势正日益加深,企业信息安全与防护被提升到前所有未有的高度.阿里云CDN经过10多年的技术发展时间,已逐步构筑一个边缘+云的安全网络立体防护体系, ...

  10. Puppeteer 入门与进阶: 快速上手

    Puppeteer API: https://puppeteer.bootcss.com/api 1. 安装: $ yarn add puppeterr 2. 网页截图实例: // main.jsco ...