《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。
实际上,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 层),对此我们要有一个清晰的认识。如下图所示,
EPS 使用的 GTP:
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。
前文说到,GTP Tunnel 是包含在 GTP Path 中的隧道,具有用于连接、并且唯一的 GTP Tunnel Endpoint,使用 TEID 来进行标识。但由于 GTP Tunnel 的使用会涉及到 GTP 协议类型的不同、网元类型的不同、EPS 接口类型的不同、GTP Entity 的不同等因素的影响。所以,一个 EPS 全局唯一的 F-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 是临时性的,当发送方在发送消息的时候才会动态生成。
这样,就完成了一个 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 和 RB、S1 Bearer 以及 S5 Bearer 为例。如下图所示:
EPS 就是通过将不同的 ID 建立 Mapping,以此来完成了 EPS Bearer 的完整实现,既保证的完整性,又具有解耦的灵活性。
NOTE(待确定!):上图可见,GTP-U Tunnel 和 EPS Bearer 是一对一的关系,即一个 UE 可以拥有多个 GTP-U Tunnel。
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 的。例如:
抛开选择过程,仅从结果来看,最终选中的 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 的物理位置是否相近,同时,还要考虑协议、漫游、容灾和均衡等因素,是非常复杂的过程。
理论上,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.
结尾。以中移动为例:
xxx.apn.epc.mnc00x.mcc460.3gppnework. org.
tac-lbxx.tac-hbyy.tac.epc.mnc000.mcc460.3gppnetwork.org.
mmecxx.mmegiyy.mme.epc.mnc000.mcc460.3gppnetwork.org.
以此为基础,根据 Local DNS 根据输入的 APN、TAI、GUMMEI 就可以选中对应 EPC 网元的 IP 了。
EPS 通过 Canonical Node Name(标准节点名)来区分 SAR-GW,例如:Canonical Node Name FQDN:node.epc.mncxxx.mccxxx.3gppnetwork.org.
。
为比较不同节点在地理上是否相近,“node” 标签前可逐级添加地域标签。以中国移动为例:
可见,不同 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。