2. 核心网信令面与用户面:信令面协议栈(HTTP/2、PFCP、GTP-C)、用户面协议栈(GTP-U、UDP/IP)、N1/N2/N3/N4/N6接口详解

各位好,咱们今天聊聊核心网里最基础、也最绕不开的一个话题——信令面和用户面的分离。

说白了,5G核心网的设计哲学就是「控制与转发分离」。你想想看,信令面负责「动嘴皮子」,用户面负责「干苦力」。我刚开始接触5GC的时候,总觉得这两个平面就是简单的逻辑划分,直到有一次在现网排查一个VoNR语音断续的问题,才发现信令面和用户面在接口上的交互细节,才是真正的坑。

好,咱们直接进入正题。

2.1 信令面协议栈

信令面,也叫控制面。它承载的是NAS消息、会话管理、移动性管理等核心逻辑。我习惯把它比作「大脑」——它不直接传用户数据,但它决定数据怎么传、往哪传。

2.1.1 HTTP/2

5GC的SBI接口(基于服务的架构)全面拥抱了HTTP/2。为什么不用HTTP/1.1?因为HTTP/2支持多路复用、头部压缩、服务器推送。说白了,就是快。

我在项目中遇到过一个问题:AMF和SMF之间的通信突然变慢,抓包一看,HTTP/2的流ID冲突了。嗯,这里要注意,HTTP/2的流ID是单递增的,如果客户端和服务端对不上号,就会导致RST_STREAM帧满天飞。

关键点: HTTP/2在5GC中主要用于N11、N12、N15等接口。它的帧类型包括HEADERS、DATA、SETTINGS、PING等。我个人建议,排查信令面问题时,先看HTTP/2的GOAWAY帧——它往往是优雅关闭或异常断连的信号。

2.1.2 PFCP

PFCP(Packet Forwarding Control Protocol)是SMF和UPF之间的「传话筒」。它负责告诉UPF:这个UE的包该怎么转发、要不要做QoS标记、要不要做GTP-U封装。

PFCP的消息类型不多,但每个都很关键。我列个表,你一看就明白:

消息类型 作用 我踩过的坑
PFCP Session Establishment 建立会话 有一次FAR规则没配全,导致UPF一直丢包
PFCP Session Modification 修改会话 QoS变更时,BAR(Buffering Action Rule)没更新,语音包被缓存了
PFCP Session Deletion 删除会话 UE频繁附着/去附着时,PFCP会话残留,UPF内存泄漏

我曾经在现网遇到过一个诡异的问题:用户上网正常,但VoNR语音不通。抓包发现PFCP的PDR(Packet Detection Rule)里,UL PDR和DL PDR的TEID配反了。你想想看,上行包被当成了下行包,语音能通才怪。

2.1.3 GTP-C

GTP-C是4G时代的「老将」,在5G里主要用于N4接口的某些场景(比如N4会话的建立和释放)。虽然5GC主推PFCP,但GTP-C并没有完全退役。

GTP-C的消息类型包括Create Session Request/Response、Modify Bearer Request/Response等。我个人的经验是,GTP-C的排查重点在于TEID的分配和释放。如果TEID分配冲突,会导致会话建立失败。

避坑指南: 我曾经在升级核心网版本时,忘记更新GTP-C的TEID池大小,结果用户量一上来,TEID耗尽,新用户全部附着失败。嗯,从那以后,我每次升级都会检查TEID池的配置。

2.2 用户面协议栈

用户面,也叫数据面。它负责真正的用户数据传输——你的微信消息、抖音视频、网页浏览,全走用户面。

2.2.1 GTP-U

GTP-U是用户面的核心协议。它把用户IP包封装在GTP隧道里,在gNB和UPF之间传输。说白了,就是「包一层皮」。

GTP-U的头部包含TEID、序列号、扩展头等信息。TEID是关键——它标识了哪个UE的哪个会话。我在项目中遇到过一个问题:GTP-U的序列号回绕导致UPF丢包。嗯,这里要注意,GTP-U的序列号是16位的,如果流量太大,序列号会回绕,UPF需要正确处理。

2.2.2 UDP/IP

GTP-U是承载在UDP/IP之上的。UDP端口号2152是GTP-U的默认端口。为什么用UDP不用TCP?因为用户面追求低延迟,UDP不需要三次握手和重传,效率更高。

但UDP也有缺点——它不可靠。如果网络丢包,GTP-U不会自动重传。所以,用户面的质量很大程度上取决于底层IP网络的稳定性。我建议,排查用户面问题时,先看UDP的重传率和乱序率。

小技巧: 在UPF上抓包时,可以用tcpdump过滤GTP-U流量:tcpdump -i any udp port 2152。然后分析GTP-U的TEID和序列号,判断是否有丢包或乱序。

2.3 N1/N2/N3/N4/N6接口详解

5GC的接口命名很直观——N1到N6,每个接口都有明确的职责。我画了一张图,帮你理清它们的关系:

5GC核心网接口关系图 UE gNB AMF SMF UPF DN N1 N2 N3 N4 N6 图例: 信令面接口 用户面接口 N1: UE-AMF | N2: gNB-AMF | N3: gNB-UPF | N4: SMF-UPF | N6: UPF-DN

好,咱们逐个接口过一遍。

2.3.1 N1接口

N1是UE和AMF之间的接口。它传输的是NAS消息——比如注册请求、服务请求、PDU会话建立请求。说白了,UE和核心网之间的「悄悄话」都走N1。

我在项目中遇到过一个问题:UE注册时,N1接口的NAS消息被gNB截断了。原因是gNB的NAS消息长度限制没配好。嗯,这里要注意,NAS消息的最大长度是65535字节,但gNB的配置可能更小。

2.3.2 N2接口

N2是gNB和AMF之间的接口。它传输的是NGAP消息——比如初始上下文建立请求、UE上下文释放请求。说白了,gNB和核心网之间的「握手」都走N2。

我曾经在现网遇到过一个经典问题:UE切换时,N2接口的Handover Required消息丢失,导致切换失败。抓包发现是SCTP的流ID冲突。你想想看,SCTP是多流传输的,如果流ID分配不当,消息就会乱序或丢失。

2.3.3 N3接口

N3是gNB和UPF之间的接口。它传输的是GTP-U数据包。说白了,用户数据从gNB到UPF,走的就是N3。

N3接口的排查重点在于GTP-U的TEID和序列号。我建议,如果用户上网慢,先看N3接口的GTP-U重传率。如果重传率超过1%,说明底层IP网络有问题。

2.3.4 N4接口

N4是SMF和UPF之间的接口。它传输的是PFCP消息。说白了,SMF通过N4告诉UPF:这个UE的包该怎么处理。

N4接口的排查重点在于PFCP的会话状态。我遇到过一个问题:SMF和UPF之间的PFCP心跳超时,导致UPF删除了所有会话。嗯,从那以后,我每次部署都会检查PFCP心跳间隔——默认是30秒,但有些场景需要调小。

2.3.5 N6接口

N6是UPF和DN(数据网络)之间的接口。它传输的是普通的IP包。说白了,用户数据从UPF到互联网,走的就是N6。

N6接口的排查重点在于NAT和防火墙。我建议,如果用户能上网但某些应用打不开,先看N6接口的NAT表项是否正常。我曾经遇到过一个案例:NAT表项老化时间太短,导致长连接被中断。

总结一下: 信令面接口(N1、N2、N4)用HTTP/2、PFCP、NGAP等协议,用户面接口(N3、N6)用GTP-U、UDP/IP。排查问题时,先看接口类型,再选对协议分析工具。我个人习惯用Wireshark过滤信令面流量,用tcpdump过滤用户面流量。

好,这一章的内容就到这里。记住,信令面和用户面的分离是5GC的核心设计,理解接口和协议栈是排查一切问题的基础。下一章咱们会深入N4接口的PFCP细节,到时候再聊。


专注资料整理