一、漫游基础架构:3GPP漫游架构概述、归属网络与拜访网络、漫游接口与协议栈

各位好,我是老周。今天咱们聊聊漫游的基础架构。说实话,漫游这个事儿,表面上看就是手机到了国外还能打电话上网,但背后的信令交互、路由寻址、计费清算,远比想象中复杂。我当年刚接触核心网时,就被S6a、S8、S9这些接口搞得晕头转向。嗯,咱们一步步来拆解。

1.1 3GPP漫游架构概述

3GPP定义的漫游架构,说白了就是一套让用户设备(UE)在非归属网络下依然能获得服务的规则和接口集合。核心思想是:用户归属地不变,服务由拜访地提供,认证和计费由归属地兜底

我个人习惯把漫游架构想象成“出差模式”:你人在外地(拜访网络),但你的公司(归属网络)依然给你发工资、管社保。拜访网络提供办公桌和网络,归属网络负责确认你的身份和权限。

关键点:漫游架构的核心是归属网络(HPLMN)拜访网络(VPLMN)之间的信任关系。没有信任,就没有漫游。

3GPP从R8开始,明确将控制面与用户面分离。这在漫游场景下尤为重要——控制面信令走归属网络,用户面数据可以本地卸载,也可以回传归属网络。我在项目中遇到过某运营商为了节省传输成本,强制所有漫游用户数据回传归属地,结果时延飙升,用户体验极差。后来改成了本地分流,问题才解决。

1.2 归属网络与拜访网络

咱们先明确两个概念:

  • 归属网络(HPLMN):用户签约的运营商网络。它负责用户的认证、授权、计费,以及用户数据的存储(HSS/UDM)。
  • 拜访网络(VPLMN):用户当前所在区域的运营商网络。它负责提供无线接入、本地移动性管理、以及用户面承载。

你想想看,用户漫游时,拜访网络凭什么相信你?它得去问归属网络。这个“问”的过程,就是通过漫游接口完成的。

避坑指南:我曾经在测试中发现,某厂商的MME在收到漫游用户的Attach Request后,没有正确携带“Visited PLMN ID”字段,导致HSS无法识别用户当前所在的网络,直接拒绝了请求。嗯,这个字段千万别漏。

归属网络和拜访网络之间,需要建立漫游协议。这不仅仅是技术对接,更是商业合同。我记得有一次帮客户做漫游测试,发现S8接口的GTP隧道一直建不起来,查了半天,结果是两家运营商的APN配置不一致——归属网络允许的APN,拜访网络根本没配。说白了,技术问题背后往往是管理问题。

1.3 漫游接口与协议栈

漫游接口是归属网络与拜访网络之间的“通信管道”。3GPP定义了多个关键接口,每个接口承载不同的功能。我整理了一张表,方便大家对照:

接口名称 连接网元 协议栈 主要功能
S6a MME ↔ HSS Diameter over SCTP 认证、位置更新、签约数据获取
S8 SGW ↔ PGW GTP-C/U over UDP 用户面承载建立、数据转发
S9 PCRF ↔ PCRF Diameter over SCTP 策略与计费控制(PCC)
S10 MME ↔ MME GTP-C over UDP MME间移动性管理
Gx PGW ↔ PCRF Diameter over SCTP QoS策略下发

为什么S6a要用Diameter over SCTP?因为SCTP是面向消息的可靠传输,比TCP更适合信令场景。GTP-C为什么用UDP?因为GTP本身有超时重传机制,不需要TCP的复杂状态机。这些设计细节,都是3GPP反复权衡的结果。

下面这张SVG图,展示了漫游场景下的核心接口与网元关系:

3GPP漫游架构核心接口示意图 归属网络 (HPLMN) 拜访网络 (VPLMN) HSS PGW PCRF (H) MME SGW PCRF (V) S6a (Diameter) S8 (GTP-C/U) S9 (Diameter) 漫游接口

从图中可以看到,S6a、S8、S9是漫游场景下的三大核心接口。S6a负责认证和签约数据获取,S8负责用户面数据转发,S9负责策略协商。这三个接口一旦出问题,漫游基本就废了。

⚠️ 安全警告:S6a接口传输的是用户的IMSI、认证向量等敏感信息。如果Diameter链路没有启用TLS或IPSec,这些数据就是明文传输的。我曾经在现网抓包分析时,亲眼看到IMSI在S6a接口上裸奔——嗯,那家运营商后来被我们要求紧急整改。

1.4 协议栈细节

咱们以S8接口为例,看看它的协议栈长什么样:

+---------------------+
|   GTP-C / GTP-U     |  ← 控制面/用户面协议
+---------------------+
|        UDP          |  ← 传输层(无连接,快速)
+---------------------+
|        IP           |  ← 网络层
+---------------------+
|   L2 (Ethernet/...) |  ← 数据链路层
+---------------------+
|   L1 (物理层)       |
+---------------------+

GTP-C用于建立、修改、删除承载。GTP-U用于传输用户的实际数据包。为什么不用TCP?因为GTP-C需要快速响应,TCP的拥塞控制和重传机制反而会引入不必要的延迟。GTP-U更是如此——用户面数据丢了就丢了,语音或视频还能靠编解码器纠错,但TCP重传会导致更大的抖动。

Diameter协议栈(以S6a为例):

+---------------------+
|   Diameter App      |  ← 应用层(S6a命令、AVP)
+---------------------+
|   Diameter Base     |  ← 基础协议(消息头、路由)
+---------------------+
|        SCTP         |  ← 传输层(可靠、多流)
+---------------------+
|        IP           |  ← 网络层
+---------------------+
|   L2 / L1           |
+---------------------+

SCTP相比TCP,最大的优势是多流(multi-streaming)多宿主(multi-homing)。多流可以避免队头阻塞——一个流的丢包不影响其他流。多宿主则提供了链路冗余。我在现网中见过因为SCTP多宿主配置不当,导致主链路断了但备链路没生效,漫游用户全部掉线的案例。嗯,配置要仔细。

1.5 漫游场景下的关键流程

咱们简单过一下漫游附着流程,看看这些接口是怎么协同工作的:

  1. UE发起Attach Request,携带IMSI或GUTI,发给拜访网络的MME。
  2. MME通过S6a接口向归属网络的HSS发送Authentication Information Request,获取认证向量。
  3. HSS返回认证向量,MME与UE完成双向认证(AKA流程)。
  4. MME通过S6a接口发送Update Location Request,HSS记录当前MME地址,并返回签约数据。
  5. MME选择SGW和PGW。SGW在拜访网络,PGW在归属网络(或本地)。
  6. MME通过S11接口通知SGW建立会话,SGW再通过S8接口与PGW建立GTP隧道。
  7. PGW分配IP地址,并通过S8返回给SGW,最终到达UE。
  8. 附着完成,UE可以开始上网。

这个流程中,S6a和S8是跨PLMN的接口,也是最容易受到攻击的环节。比如S6a的Diameter消息如果被篡改,攻击者可以伪造位置更新,把用户的MME指向恶意网元。S8的GTP隧道如果没有IPSec保护,用户面数据可以被中间人窃听。

个人经验:我建议在部署漫游接口时,至少做到以下几点:

  • S6a/S9接口启用Diameter over TLS或IPSec。
  • S8接口启用GTP over IPSec。
  • 部署信令防火墙(SBC/DSF),对跨PLMN的信令进行合法性校验。
  • 定期审计漫游协议中的APN、QoS配置,避免配置漏洞。

好了,这一章的内容就到这里。漫游基础架构是后续所有攻击与防护讨论的基石。你想想看,如果连归属网络和拜访网络怎么通信都不清楚,怎么谈得上保护它们?下一章咱们会深入S6a接口的攻击面,到时候再细聊。


专注资料整理