5G核心网实现了控制面(CP)与用户面(UP)的彻底分离,而N4接口(PFCP协议,定义于TS 29.244)正是这条分割线上的"神经索"。SMF通过N4向UPF下发四类核心规则——PDR(包检测规则)、FAR(转发动作规则)、QER(QoS执行规则)和URR(使用量上报规则),构成一个精密的包处理流水线,决定每一个用户面报文的命运:识别、转发、限速、计费。
本文基于3GPP TS 29.244 V18.6.0(Release 18),深度解析PFCP会话建立过程中的规则链设计、包处理模型、规则关联机制及其工程实战要点。
PFCP会话建立之前,SMF与UPF必须先建立PFCP关联(PFCP Association)。根据TS 29.244 Section 5.8.1,一对CP/UP功能之间只能有一个PFCP关联,但一个SMF可与多个UPF建立关联,反之亦然。
sequenceDiagram
participant SMF as SMF (CP)
participant UPF as UPF (UP)
Note over SMF,UPF: 阶段一:PFCP关联建立
SMF->>UPF: PFCP Association Setup Request
Note right of SMF: Node ID, CP Function Features,<br/>Recovery Time Stamp
UPF->>SMF: PFCP Association Setup Response
Note left of UPF: Node ID, UP Function Features,<br/>Recovery Time Stamp
Note over SMF,UPF: 阶段二:PFCP会话建立(由PDU Session触发)
SMF->>UPF: PFCP Session Establishment Request
Note right of SMF: CP F-SEID, Create PDR,<br/>Create FAR, Create QER, Create URR,<br/>Create BAR(可选), UE IP Address
UPF->>SMF: PFCP Session Establishment Response
Note left of UPF: UP F-SEID, Cause,<br/>Created PDR (含F-TEID),<br/>Created URR (可选)
Note over SMF,UPF: 阶段三:用户面数据传输激活
Note over SMF,UPF: UL/DL数据可通过UPF转发
根据TS 29.244 Section 7.5.2,PFCP Session Establishment Request消息携带以下关键IE:
| IE名称 | 类型 | 必选/条件 | 描述 |
|---|---|---|---|
| Node ID | 必选 | M | 标识发送请求的SMF |
| CP F-SEID | 必选 | M | SMF侧的会话端点标识符,包含SEID和IP地址 |
| Create PDR | 条件 | C | 包检测规则,含PDI、Precedence、关联的FAR/QER/URR ID |
| Create FAR | 条件 | C | 转发动作规则,含Apply Action和转发参数 |
| Create QER | 可选 | O | QoS执行规则,含Gate Status、MBR、GBR、QFI |
| Create URR | 可选 | O | 使用量上报规则,含Measurement Method、Reporting Triggers |
| Create BAR | 可选 | O | 缓存动作规则,控制DL数据缓存行为 |
| Create Traffic Endpoint | 可选 | O | 流量端点,用于PDI优化(共享匹配字段) |
| PDN Type | 可选 | O | PDU会话类型(IPv4/IPv6/Ethernet/Unstructured) |
| User Plane Inactivity Timer | 可选 | O | 用户面不活动定时器 |
设计意图:PFCP采用"一次下发全套规则"的设计哲学,在Session Establishment Request中一次性下发所有PDR/FAR/QER/URR,避免多轮交互。这极大降低了PDU会话建立时延,但也意味着SMF必须精确计算所有规则参数。
根据TS 29.244 Section 5.2.1,PFCP的包处理模型基于PDR为核心节点的规则关联图:
graph LR
PKT[入向报文] --> PDR1[PDR-1<br/>包检测规则]
PKT --> PDR2[PDR-2<br/>包检测规则]
PKT --> PDR3[PDR-3<br/>包检测规则]
PDR1 -->|关联1个| FAR1[FAR<br/>转发动作规则]
PDR1 -->|关联0..N个| QER1[QER<br/>QoS执行规则]
PDR1 -->|关联0..N个| URR1[URR<br/>使用量上报规则]
PDR2 -->|关联1个| FAR2[FAR]
PDR2 -->|关联0..1个| QER2[QER]
PDR3 -->|关联1个| FAR1
FAR1 -->|可选关联| BAR[BAR<br/>缓存动作规则]
FAR2 -->|可选关联| BAR
style PDR1 fill:#e1f5fe
style FAR1 fill:#f3e5f5
style QER1 fill:#e8f5e9
style URR1 fill:#fff3e0
style BAR fill:#fce4ec
核心关联约束(TS 29.244 Section 5.2.1):
PDR是整个包处理模型的入口和调度中心。根据TS 29.244 Section 5.2.1A.1,每个PDR包含一个PDI(Packet Detection Information),定义了如何匹配入向报文。
| PDI字段 | 说明 | 匹配层级 |
|---|---|---|
| Source Interface | 报文来源接口:ACCESS(上行)、CORE(下行)、CP-function、SGi-LAN/N6-LAN | 必选 |
| Local F-TEID | 本地GTP-U隧道端点标识 | 外层IP/UDP |
| UE IP Address | UE的IP地址/前缀 | 内层IP |
| SDF Filter | 业务数据流过滤器(五元组) | 内层IP/TCP/UDP |
| Application ID | 应用标识(基于深度包检测) | 应用层 |
| QFI | QoS Flow Identifier(5GC特有) | GTP-U扩展头 |
| Ethernet Packet Filter | 以太网过滤器(Ethernet PDU会话) | L2 |
| Network Instance | 网络实例(VRF/路由域) | 路由域 |
TS 29.244 Section 5.2.1定义了严格的PDR匹配优先级规则:
报文到达 → 识别PFCP会话 → 按Precedence排序PDR → 逐一匹配PDI → 首匹配即执行 → 关联FAR/QER/URR
设计博弈:Precedence机制允许同一会话内PDR重叠。例如一个精确匹配(五元组SDF)的PDR可以设置更高优先级,一个通配匹配(仅UE IP)的PDR设置更低优先级。这实现了"精确流优先,默认兜底"的分层策略。
FAR告诉UPF"识别到报文后做什么"。根据TS 29.244 Section 5.2.3.1,通过Apply Action IE中的标志位控制:
| Apply Action标志 | 含义 | 典型场景 |
|---|---|---|
| FORW | 转发报文 | 正常UL/DL数据转发 |
| DROP | 丢弃报文 | 策略控制、未授权流量 |
| BUFF | 缓存报文 | UE处于CM-IDLE时缓存DL数据 |
| NOCP | 通知控制面 | 缓存首个DL包时通知SMF触发寻呼 |
| DUPL | 复制报文 | 合法监听、流量镜像 |
| DFRT | 冗余传输复制 | URLLC双隧道冗余传输 |
| EDRT | 冗余传输去重 | URLLC接收端去重 |
| IPMA | 接受IP组播加入 | IPTV场景 |
| IPMD | 拒绝IP组播加入 | 组播策略控制 |
| BDPN | 缓存DL包通知(每SDF) | 精细化DL数据通知 |
| DDPN | 丢弃DL包通知(每SDF) | 缓存溢出时通知 |
FORW标志配套参数(Forwarding Parameters IE):
| 参数 | 说明 |
|---|---|
| Destination Interface | 目标接口:ACCESS(下行→AN)、CORE(上行→DN)、CP-function |
| Outer Header Creation | 添加GTP-U封装(IP+TEID) |
| Transport Level Marking | DSCP/TOS标记 |
| Forwarding Policy | 转发策略标识(预配置) |
| Header Enrichment | 上行HTTP头部增强(插入特定Header) |
| Linked Traffic Endpoint ID | 关联反向方向Traffic Endpoint |
关键设计:FAR中的转发参数(如Outer Header Creation)即使当前Apply Action设为BUFF也可以保留配置。这样UE从CM-IDLE回到CM-CONNECTED时,SMF只需修改Apply Action从BUFF→FORW,无需重新下发转发参数——一次修改替代完整重建,极大降低了信令开销。
QER执行门控、速率限制和QoS标记。根据TS 29.244 Section 5.2.5:
| QER功能 | 对应IE | 说明 |
|---|---|---|
| 门控 | Gate Status | OPEN允许/ CLOSED禁止(分UL/DL独立控制) |
| Session-AMBR限速 | MBR (UL/DL) | 会话级最大比特率 |
| GBR保障 | GBR (UL/DL) | 保证比特率(GBR QoS Flow) |
| QFI标记 | QFI | 下行报文的QoS Flow标识 |
| 反射QoS | RQI (Reflective QoS Indication) | UE通过反射学习上行QoS |
| 包速率限制 | Packet Rate (UL/DL) | 每秒包数限制 |
QER的分层设计:
graph TB
subgraph "Session级QER"
SQER["QER-1<br/>Session-AMBR<br/>UL/DL MBR"]
end
subgraph "Bearer/QoS Flow级QER"
BQER1["QER-2<br/>GBR QoS Flow<br/>GBR+MBR+QFI"]
BQER2["QER-3<br/>Non-GBR QoS Flow<br/>QFI only"]
end
subgraph "SDF级QER"
SDQER["QER-4<br/>门控控制<br/>Gate Status"]
end
SQER -.->|"Session AMBR<br/>多PFCP会话共享"| BQER1
SQER -.-> BQER2
BQER1 --> SDQER
style SQER fill:#e8f5e9
style BQER1 fill:#c8e6c9
style BQER2 fill:#c8e6c9
style SDQER fill:#a5d6a7
关键机制——QER Correlation ID(TS 29.244 Section 5.2.1):多个PFCP会话中的QER如果设置了相同的QER Correlation ID,UPF会将它们关联执行——这是实现Session-AMBR跨PDU会话限速的核心机制。例如一个UE有3个PDU会话,它们的Session-AMBR QER使用相同的Correlation ID,UPF在执行限速时会聚合计算所有PDU会话的总带宽。
URR控制流量测量与计费上报。根据TS 29.244 Section 5.2.2:
| URR参数 | 说明 |
|---|---|
| Measurement Method | 测量方法:VOLUME(流量)、DURATION(时长)、EVENT(事件) |
| Reporting Triggers | 上报触发条件 |
| Volume Threshold | 流量阈值(达到即上报) |
| Time Threshold | 时间阈值 |
| Volume Quota | 流量配额(在线计费) |
| Time Quota | 时间配额 |
| Quota Holding Time | 配额保持时间(无流量后多久回收配额) |
| Monitoring Time | 监控时间窗口 |
| Inactivity Detection Time | 不活动检测时间 |
Reporting Triggers关键触发条件:
| 触发条件 | 说明 |
|---|---|
| PERIO | 周期性上报 |
| VOLTH | 达到流量阈值 |
| TIMTH | 达到时间阈值 |
| QUHTI | 配额保持时间到期 |
| START | 检测到SDF/应用开始 |
| STOPT | 检测到SDF/应用停止 |
| LIUSA | 配额使用完毕 |
| IMMEDIATE | 立即上报(PFCP Modification中请求) |
| DROTH | 丢弃DL流量达到阈值 |
| TERM | 会话终止时上报 |
UPF收到一个用户面报文后的完整处理流程(基于TS 29.244 Section 5.2.1 Figure 5.2.1-1):
flowchart TD
A[报文到达UPF] --> B[步骤1: 识别PFCP会话<br/>通过Local F-TEID / UE IP]
B --> C[步骤2: PDR匹配查找<br/>按Precedence从高到低]
C --> D{找到匹配PDR?}
D -->|否| E[丢弃报文]
D -->|是| F[步骤3: 执行关联QER<br/>门控检查→速率限制→QFI标记]
F --> G{Gate Status = CLOSED?}
G -->|是| H[丢弃报文<br/>可能触发URR丢弃计数]
G -->|否| I[步骤4: 执行关联FAR<br/>Apply Action决定报文去向]
I --> J{Apply Action}
J -->|FORW| K[转发: 添加Outer Header→发送]
J -->|DROP| L[丢弃报文]
J -->|BUFF| M[缓存报文<br/>可选触发NOCP通知SMF]
J -->|DUPL| N[复制报文→转发到监听接口]
I --> O[步骤5: 更新关联URR<br/>流量统计/时间统计]
O --> P[检查Reporting Triggers<br/>是否需要上报]
P --> Q{触发上报?}
Q -->|是| R[生成PFCP Session Report<br/>发送给SMF]
Q -->|否| S[继续处理下一个报文]
处理顺序的精妙设计:
以一个典型5G PDU会话(IPv4,含默认QoS Flow和一个GBR QoS Flow)为例,SMF在PFCP Session Establishment Request中下发以下规则集:
graph TB
subgraph "上行规则 (Source Interface = ACCESS)"
ULPDR1["UL PDR-1<br/>Precedence=100<br/>PDI: Local F-TEID + QFI=1<br/>(默认QoS Flow)"]
ULPDR2["UL PDR-2<br/>Precedence=50<br/>PDI: Local F-TEID + QFI=2 + SDF<br/>(GBR QoS Flow)"]
ULPDR1 --> ULFAR["UL FAR<br/>Apply Action=FORW<br/>Outer Header Creation:<br/>N6接口 → DN"]
ULPDR2 --> ULFAR
ULPDR1 --> SQER["Session QER<br/>Session-AMBR限制<br/>UL MBR=100Mbps"]
ULPDR2 --> SQER
ULPDR2 --> GQER["GBR QER<br/>GBR=10Mbps, MBR=20Mbps<br/>QFI=2"]
ULPDR1 --> URR1["URR-1<br/>Volume + Duration<br/>Periodic上报"]
ULPDR2 --> URR1
end
subgraph "下行规则 (Source Interface = CORE)"
DLPDR1["DL PDR-1<br/>Precedence=100<br/>PDI: UE IP + QFI=1"]
DLPDR2["DL PDR-2<br/>Precedence=50<br/>PDI: UE IP + QFI=2 + SDF"]
DLPDR1 --> DLFAR["DL FAR<br/>Apply Action=FORW<br/>Outer Header Creation:<br/>N3接口 → gNB<br/>(GTP-U IP+TEID)"]
DLPDR2 --> DLFAR
DLPDR1 --> SQER2["Session QER<br/>Session-AMBR限制<br/>DL MBR=100Mbps"]
DLPDR2 --> SQER2
DLPDR2 --> GQER2["GBR QER<br/>QFI=2, RQI=0"]
DLPDR1 --> URR2["URR-2<br/>Volume + Duration"]
DLPDR2 --> URR2
end
style ULPDR1 fill:#e1f5fe
style ULPDR2 fill:#e1f5fe
style DLPDR1 fill:#fff3e0
style DLPDR2 fill:#fff3e0
这个配置揭示了几个关键点:
根据TS 29.244 Section 5.5.1,F-TEID只能由UPF分配(5GC强制要求)。SMF在Create PDR IE的Local F-TEID中设置CHOOSE标志,请求UPF分配:
| 步骤 | SMF行为 | UPF行为 |
|---|---|---|
| 1 | 在PDR的Local F-TEID IE中设置CHOOSE=1 | - |
| 2 | 可通过CHOOSE ID让多个PDR共享同一F-TEID | - |
| 3 | - | 收到请求后分配N3 UL F-TEID |
| 4 | - | 在Response的Created PDR IE中返回F-TEID |
TS 29.244 Section 5.5.3允许SMF请求UPF为多个PDR分配相同的F-TEID——通过设置相同的CHOOSE ID值。这在以下场景中节省资源:
但注意:共享F-TEID的PDR必须通过其他PDI字段(如QFI、SDF Filter)进行区分,否则会产生匹配冲突。
TS 29.244 Section 5.2.1A.2引入了PDI优化特性,允许SMF将多个PDR中重复的匹配字段抽取为Traffic Endpoint:
| 不使用PDI优化 | 使用PDI优化 |
|---|---|
| 每个PDR独立包含Local F-TEID、UE IP、Network Instance | 创建Traffic Endpoint(含共享字段),PDR通过ID引用 |
| 多个PDR中相同的IE重复传输 | 一次定义,多处引用 |
| 修改UE IP需更新所有PDR | 只需更新一个Traffic Endpoint |
实际收益:当一个PDU会话有10个PDR(多个SDF Filter),PDI优化可以将重复的Local F-TEID + UE IP + Network Instance从10次传输减至1次,信令开销减少约30-40%。对于大规模部署的运营商,这意味着SMF-UPF间的PFCP消息大小显著减小,处理延迟降低。
PFCP使用UDP端口8805。关键过滤表达式:
# 过滤所有PFCP消息
udp.port == 8805
# 仅过滤PFCP Session Establishment Request (消息类型50)
pfcp.msg_type == 50
# 仅过滤PFCP Session Establishment Response (消息类型51)
pfcp.msg_type == 51
# 过滤特定SEID的会话
pfcp.seid == 0x1234567890abcdef
| 故障现象 | 可能原因 | 排查方法 |
|---|---|---|
| PFCP Session Est Response Cause = "Rule creation/modification Failure" | PDR的PDI字段冲突或无效SDF Filter语法 | 检查Failed Rule ID IE,定位失败的规则 |
| 用户面不通,PFCP会话建立成功 | FAR的Outer Header Creation配置错误(IP/TEID错误) | 对比SMF下发的F-TEID与UPF分配的F-TEID |
| 上行正常但下行不通 | DL PDR的UE IP Address不匹配 | 检查DL PDR的PDI中UE IP是否正确 |
| QoS未生效 | QER未关联到PDR | 检查Create PDR中的QER ID是否正确 |
| 计费数据缺失 | URR的Reporting Triggers未正确配置 | 确认Volume Threshold和Periodic触发器 |
| PFCP Session Est Response Cause = "No resources available" | UPF资源耗尽(TEID池满、会话数超限) | 检查UPF负载和资源使用率 |
| Cause = "Conditional IE missing" | 缺少条件必选IE(如5GC场景缺少Create PDR) | 对照TS 29.244 Table 7.5.2-1检查 |
| ## 九、Cause值全解析 |
PFCP Session Establishment Response中的Cause值(TS 29.244 Section 8.2.1)是排错的核心入口:
| Cause值 | 含义 | SMF应采取的行动 |
|---|---|---|
| Request accepted (success) | 所有规则创建成功 | 继续PDU会话建立流程 |
| Request rejected (reason not specified) | 未知原因拒绝 | 日志记录,可选重试 |
| Session context not found | SEID不存在 | 检查CP F-SEID分配 |
| Mandatory IE missing | 缺少必选IE | 根据Offending IE定位缺失字段 |
| Conditional IE missing | 缺少条件IE | 检查场景相关条件 |
| Invalid length | IE长度无效 | 检查编码问题 |
| Mandatory IE incorrect | 必选IE值无效 | 检查IE取值范围 |
| Invalid F-TEID allocation option | SMF尝试自行分配F-TEID(5GC不允许) | 改为设置CHOOSE标志 |
| No resources available | UPF资源不足 | 选择其他UPF或等待资源释放 |
| Rule creation/modification Failure | 规则创建失败 | 检查Failed Rule ID定位具体规则 |
| Request partially accepted | 部分规则创建成功(PSUCC特性) | 检查哪些规则失败并修正 |
Q1: PFCP关联和PFCP会话是什么关系? A: PFCP关联(Association)是SMF和UPF之间的传输层连接,在会话之前建立,一对SMF-UPF之间只有一个关联。PFCP会话(Session)对应一个PDU会话,一个关联上可以建立多个会话。关联建立时交换功能特性(Feature flags),会话建立时下发具体规则。
Q2: 为什么5GC要求F-TEID必须由UPF分配? A: 这是TS 29.244 Section 5.5.1的强制要求。原因有三:(1) UPF是实际发送/接收GTP-U报文的节点,由它分配TEID可以保证本地唯一性;(2) 避免SMF和UPF的TEID池冲突;(3) 支持UPF故障恢复时重新分配F-TEID。在EPC中允许SMF侧分配,但5GC明确禁止。
Q3: PDR的Precedence值和4G中的precedence有什么区别? A: 4G EPC中precedence在PCC规则中定义,由PCRF下发。5GC中PDR的Precedence由SMF根据PCC规则中的precedence映射设置,作用域限于同一PFCP会话内。不同PFCP会话的PDR之间不应重叠(TS 29.244 Section 5.2.1的约束),因此Precedence只解决同一会话内的匹配优先级冲突。
Q4: 多个PDR能否共享同一个QER?共享时限速怎么算? A: 可以。TS 29.244 Section 5.2.1明确允许一个QER关联多个PDR。共享QER时,UPF将所有关联PDR匹配到的流量聚合计算。例如Session-AMBR QER关联了默认QoS Flow和IMS QoS Flow的PDR,UPF会将两者的带宽合并计算,确保总速率不超过Session-AMBR。
Q5: PFCP Session Modification和Session Establishment在规则处理上有什么核心区别? A: Session Establishment是全量下发,所有规则从头创建。Session Modification是增量修改——根据TS 29.244 Section 5.6.3,SMF只需下发变更部分,UPF保持未变更的参数不变。这极大降低了后续QoS调整、策略更新时的信令开销。删除IE时可通过设length=0或使用Remove IE。
本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。
[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。
