OmniUPF 操作指南
目录
概述
OmniUPF(基于 eBPF 的用户平面功能)是一种高性能的 5G/LTE 用户平面功能,提供运营商级的数据包转发、QoS 执行和移动网络的流量管理。基于 Linux eBPF(扩展伯克利数据包过滤器)技术构建,并增强了全面的管理能力,OmniUPF 提供了 5G SA、5G NSA 和 LTE 网络所需的核心数据包处理基础设施。
什么���用户平面功能?
用户平面功能(UPF)是 3GPP 标准化的网络元素,负责 5G 和 LTE 网络中的数据包处理和转发。它提供:
- 高速数据包转发 在移动设备和数据网络之间
- 服务质量(QoS) 执行不同流量类型
- 基于数据包过滤器和规则的流量检测和路由
- 用量报告 用于计费和分析
- 数据包缓冲 用于移动性和会话管理场景
- 合法拦截 支持以符合监管要求
OmniUPF 实现了 3GPP TS 23.501(5G)和 TS 23.401(LTE)中定义的完整 UPF 功能,提供了一个完整的、可投入生产的用户平面解决方案,使用 Linux 内核 eBPF 技术以实现最大性能。
OmniUPF 关键能力
数据包处理:
- 完全符合 3GPP 标准的用户平面数据包处理
- 基于 eBPF 的数据路径以实现内核级性能
- GTP-U(GPRS 隧道协议)封装和解封装
- 对访问和数据网络的 IPv4 和 IPv6 支持
- XDP(快速数据路径)以实现超低延迟处理
- 多线程数据包处理
QoS 和流量管理:
- 带宽管理的 QoS 执行规则(QER)
- 流量分类的包检测规则(PDR)
- 路由决策的转发动作规则(FAR)
- 应用特定路由的服务数据流(SDF)过滤
- 用量跟踪和计费的用量报告规则(URR)
控制和管���:
- PFCP(数据包转发控制协议)接口到 SMF/PGW-C
- 用于监控和诊断的 RESTful API
- 实时统计和指标
- eBPF 映射容量监控
- 基于 Web 的控制面板
性能特性:
- 通过 eBPF 实现零拷贝数据包处理
- 内核级数据包转发(无用户空间开销)
- 多核可扩展性
- 支持硬件加速的卸载
- 针对云原生部署进行了优化
有关详细的控制面板使用,请参见 Web UI 操作。
理解用户平面架构
OmniUPF 是一个统一的用户平面解决方案,为 5G 独立(SA)、5G NSA 和 4G LTE/EPC 网络提供运营商级的数据包转发。OmniUPF 是一个单一产品,可以同时作为:
- UPF(用户平面功能) - 5G/NSA 用户平面(通过 N4/PFCP 由 OmniSMF 控制)
- PGW-U(PDN 网关用户平面) - 4G EPC 网关到外部网络(通过 Sxc/PFCP 由 OmniPGW-C 控制)
- SGW-U(服务网关用户平面) - 4G EPC 服务网关(通过 Sxb/PFCP 由 OmniSGW-C 控制)
OmniUPF 可以在 任何组合 的这些模式下运行:
- 仅 UPF:纯 5G 部署
- PGW-U + SGW-U:组合 4G 网关(典型的 EPC 部署)
- UPF + PGW-U + SGW-U:同时支持 4G 和 5G(迁移场景)
所有模式都使用相同的基于 eBPF 的数据包处理引擎和 PFCP 协议,���论作为 UPF、PGW-U、SGW-U 还是同时作为三者,都提供一致的高性能。
5G 网络架构(SA 模式)
OmniUPF 解决方案位于 5G 网络的数据平面,提供连接移动设备与数据网络和服务的高速数据包转发层。
4G LTE/EPC 网络架构
OmniUPF 还支持 4G LTE 和 EPC(演进分组核心)部署,根据网络架构的不同,作为 OmniPGW-U 或 OmniSGW-U 运行。
组合 PGW-U/SGW-U 模式(典型的 4G 部署)
在此模式下,OmniUPF 同时作为 SGW-U 和 PGW-U,由不同的控制平面功能控制。
分离的 SGW-U 和 PGW-U 模式(漫游/多站点)
在漫游或多站点部署中,可以部署两个独立的 OmniUPF 实例 - 一个作为 SGW-U,一个作为 PGW-U。
用户平面功能在网络中的工作原理
用户平面功能(OmniUPF、OmniPGW-U 或 OmniSGW-U)作为转发平面,由相应的控制平面控制:
-
会话建立
- 5G:OmniSMF 通过 N4 接口与 OmniUPF 建立 PFCP 关联
- 4G:OmniPGW-C 或 OmniSGW-C 通过 Sxb/Sxc 与 OmniPGW-U/OmniSGW-U 建立 PFCP 关联
- 控制平面为每个 UE PDU 会话(5G)或 PDP 上下文(4G)创建 PFCP 会话
- 用户平面通过 PFCP 接收 PDR、FAR、QER 和 URR 规则
- eBPF 映射填��转发规则
-
上行数据包处理(UE → 数据网络)
- 5G:数据包通过 N3 接口从 gNB 到达,带有 GTP-U 封装
- 4G:数据包通过 S1-U 接口(SGW-U)或 S5/S8 接口(PGW-U)从 eNodeB 到达,带有 GTP-U 封装
- 用户平面根据 TEID 将数据包与上行 PDR 匹配
- eBPF 程序应用 QER(速率限制、标记)
- FAR 确定转发动作(转发、丢弃、缓冲、重复)
- 移除 GTP-U 隧道,数据包转发到 N6(5G)或 SGi(4G)接口
- URR 跟踪数据包和字节计数以进行计费
-
下行数据包处理(数据网络 → UE)
- 5G:数据包通过 N6 接口作为原生 IP 到达
- 4G:数据包通过 SGi 接口作为原生 IP 到达
- 用户平面根据 UE IP 地址将数据包与下行 PDR 匹配
- SDF 过滤器可能进一步按端口、协议或应用分类流量
- FAR 确定 GTP-U 隧道和转发参数
- 添加适当 TEID 的 GTP-U 封装
- 5G:数据包转发到 N3 接口朝向 gNB
- 4G:数据包转发到 S1-U(SGW-U)或 S5/S8(PGW-U)朝向 eNodeB
-
移动性和切换
- 5G:OmniSMF 在切换场景中更新 PDR/FAR 规则
- 4G:OmniSGW-C/OmniPGW-C 在 eNodeB 之间切换或 TAU(跟踪区域更新)期间更新规则
- 用户平面在路径��换期间可能缓冲数据包
- 在基站之间无缝过渡,无数据包丢失
与控制平面的集成(4G 和 5G)
OmniUPF 通过标准的 3GPP 接口与 5G 和 4G 控制平面功能集成:
5G 接口
| 接口 | 从 → 到 | 目的 | 3GPP 规范 |
|---|---|---|---|
| N4 | OmniSMF ↔ OmniUPF | PFCP 会话建立、修改、删除 | TS 29.244 |
| N3 | gNB → OmniUPF | 来自 RAN 的用户平面流量(GTP-U) | TS 29.281 |
| N6 | OmniUPF → 数据网络 | 向 DN 的用户平面流量(原生 IP) | TS 23.501 |
| N9 | OmniUPF ↔ OmniUPF | 漫游/边缘的互 UPF 通信 | TS 23.501 |
4G/EPC 接口
| 接口 | 从 → 到 | 目的 | 3GPP 规范 |
|---|---|---|---|
| Sxb | OmniSGW-C ↔ OmniUPF(SGW-U 模式) | 服务网关的 PFCP 会话控制 | TS 29.244 |
| Sxc | OmniPGW-C ↔ OmniUPF(PGW-U 模式) | PDN 网关的 PFCP 会话控制 | TS 29.244 |
| S1-U | eNodeB → OmniUPF(SGW-U 模式) | 来自 RAN 的用户平面流量(GTP-U) | TS 29.281 |
| S5/S8 | OmniUPF(SGW-U)↔ OmniUPF(PGW-U) | 网关间用户平面(GTP-U) | TS 29.281 |
| SGi | OmniUPF(PGW-U 模式)→ PDN | 向数据网络的用户平面流量(原生 IP) | TS 23.401 |
注意:所有 PFCP 接��(N4、Sxb、Sxc)使用 TS 29.244 中定义的相同 PFCP 协议。接口名称不同,但协议和消息格式是相同的。
UPF 组件
eBPF 数据路径
eBPF 数据路径是运行在 Linux 内核中的核心数据包处理引擎,以实现最大性能。
核心功能:
- GTP-U 处理:GTP-U 隧道的封装和解封装
- 数据包分类:使用 TEID、UE IP 或 SDF 过滤器将数据包与 PDR 规则匹配
- QoS 执行:根据 QER 规则应用速率限制和数据包标记
- 转发决策:执行 FAR 动作(转发、丢弃、缓冲、重复、通知)
- 用量跟踪:为基于流量的计费递增 URR 计数器
eBPF 映射: 数据路径使用 eBPF 映射(内核内存中的哈希表)进行规则存储:
| 映射名称 | 目的 | 键 | 值 |
|---|---|---|---|
uplink_pdr_map | 上行 PDR | TEID(32 位) | PDR 信息(FAR ID、QER ID、URR IDs) |
downlink_pdr_map | 下行 PDR(IPv4) | UE IP 地址 | PDR 信息 |
downlink_pdr_map_ip6 | 下行 PDR(IPv6) | UE IPv6 地址 | PDR 信息 |
far_map | 转发规则 | FAR ID | 转发参数(动作、隧道信息) |
qer_map | QoS 规则 | QER ID | QoS 参数(MBR、GBR、标记) |
urr_map | 用量跟踪 | URR ID | 流量计数器(上行、下行、总计) |
sdf_filter_map | SDF 过滤器 | PDR ID | 应用过滤器(端口、协议) |
性能特征:
- 零拷贝:数据包完全在内核空间处理
- XDP 支持:在网络驱动程序级别附加以实现亚微秒延迟
- 多核:跨 CPU 核心扩展,支持每 CPU 映射
- 容量:eBPF 映射中可容纳数百万个 PDR/FAR(受限于内核内存)
有关容量监控,请参见 容量管理。
PFCP 接口处理程序
PFCP 接口实现 3GPP TS 29.244,用于与 SMF 或 PGW-C 通信。
核心功能:
- 关联管理:PFCP 心跳和关联设置/释放
- 会话生命周期:创建、修改和删除 PFCP 会话
- 规则安装:将 PFCP 信息元素转换为 eBPF 映射条目
- 事件报告:通知 SMF 用量阈值、错误或会话事件
PFCP 消息支持:
| 消息类型 | 方向 | 目的 |
|---|---|---|
| 关联设置 | SMF → UPF | 建立 PFCP 控制关联 |
| 关联释放 | SMF → UPF | 拆除 PFCP 关联 |
| 心跳 | 双向 | 保持关联活跃 |
| 会话建立 | SMF → UPF | 创建新的 PDU 会话,带有 PDR/FAR/QER/URR |
| 会话修改 | SMF → UPF | 更新移动性、QoS 变化的规则 |
| 会话删除 | SMF → UPF | 删除会话��所有关联规则 |
| 会话报告 | UPF → SMF | 报告用量、错误或事件 |
支持的信息元素(IE):
- 创建 PDR、FAR、QER、URR
- 更新 PDR、FAR、QER、URR
- 删除 PDR、FAR、QER、URR
- 数据包检测信息(UE IP、F-TEID、SDF 过滤器)
- 转发参数(网络实例、外部头部创建)
- QoS 参数(MBR、GBR、QFI)
- 用量报告触发器(流量阈值、时间阈值)
REST API 服务器
REST API 提供对 UPF 状态和操作的编程访问。
核心功能:
- 会话监控:查询活动的 PFCP 会话和关联
- 规则检查:查看 PDR、FAR、QER、URR 配置
- 统计信息:检索数据包计数器、路由统计、XDP 统计
- 缓冲管理:查看和控制数据包缓冲
- 映射信息:监控 eBPF 映射的使用和容量
API 端点:(共 34 个端点)
| 类别 | 端点 | 描述 |
|---|---|---|
| 健康 | /health | 健康检查和状态 |
| 配置 | /config | UPF 配置 |
| 会话 | /pfcp_sessions, /pfcp_associations | PFCP 会话/关联数据 |
| PDRs | /uplink_pdr_map, /downlink_pdr_map, /downlink_pdr_map_ip6, /uplink_pdr_map_ip6 | 数据包检测规则 |
| FARs | /far_map | 转发动作规则 |
| QERs | /qer_map | QoS 执行规�� |
| URRs | /urr_map | 用量报告规则 |
| 缓冲 | /buffer | 数据包缓冲状态和控制 |
| 统计 | /packet_stats, /route_stats, /xdp_stats, /n3n6_stats | 性能指标 |
| 容量 | /map_info | eBPF 映射容量和使用 |
| 数据平面 | /dataplane_config | N3/N9 接口地址 |
有关 API 详细信息和使用,请参见 监控指南。
Web 控制面板
Web 控制面板提供 UPF 监控和管理的实时仪表板。
功能:
- 会话视图:浏览活动的 PFCP 会话,显示 UE IP、TEID 和规则计数
- 规则管理:查看和管理所有会话中的 PDR、FAR、QER 和 URR
- 缓冲监控:跟踪缓冲的数据包并根据 FAR 控制缓冲
- 统计仪表板:实时数据包、路由、XDP 和 N3/N6 接口统计
- 容量监控:eBPF 映射使用情况,带有颜色编码的容量指示器
- 配置视图:显示 UPF 配置和数据平面地址
- 日志查看器:实时日志流以进行故障排除
有关详细的 UI 操作,请参见 Web UI 操作指南。
PFCP 协议和 SMF 集成
PFCP 关联
在创建会话之前,SMF 必须与 UPF 建立 PFCP 关联。
关联生命周期:
关键点:
- 每个 SMF 与 UPF 建立一个关联
- UPF 通过节点 ID(FQDN 或 IP 地址)跟踪关联
- 心跳消息保持关联的活跃性
- 如果释放关联,则删除该关联下的所有会话
有关查看关联的信息,请参见 会话视图。
SMF 重启检测和孤立会话清理
OmniUPF 自动检测 SMF 重启,并根据 3GPP TS 29.244 规范清理孤立会话。
工作原理:
当 SMF 建立 PFCP 关联时,它提供一个 恢复时间戳,指示其启动时间。OmniUPF 为每个关联存储此时间戳。如果 SMF 重启:
- SMF 丢失内存中的所有会话状态
- SMF 重新与 UPF 建立 PFCP 关联
- SMF 发送 新的恢复时间戳(与之前不同)
- UPF 检测到时间戳变化 = SMF 重启
- UPF 自动删除 所有孤立会话 来自旧 SMF 实例
- SMF 为活动用户创建新的会话
重启检测流程:
日志示例:
当 SMF 重启时,您会看到:
WARN: 与 NodeID: smf-1 和地址: 192.168.1.10 的关联已存在
WARN: SMF 恢复时间戳已更改(旧: 2025-01-15T10:00:00Z,新: 2025-01-15T10:30:15Z) - SMF 重启,删除 245 个孤立会话
INFO: 由于 SMF 重启,删除孤立会话 2(LocalSEID)
INFO: 由于 SMF 重启,删除孤立会话 3(LocalSEID)
...
INFO: 由于 SMF 重启,删除孤立会话 246(LocalSEID)
重要说明:
-
隔离:仅删除重启的 SMF 的会话。其他 SMF 关联及其会话 不受影响。
-
时间戳比较:如果恢复时间戳是相同的,会话将被保留(SMF重新连接而不重启)。
-
3GPP合规性:此行为由3GPP TS 29.244第5.22.2节规定:
“如果CP功能的恢复时间戳自上次关联设置以来发生了变化,则UP功能应认为CP功能已重新启动,并应删除与该CP功能相关的所有PFCP会话。”
有关孤立会话的故障排除,请参见故障排除指南。
GTP-U错误指示处理
OmniUPF根据3GPP TS 29.281规范处理来自下游对等方(PGW-U、SGW-U、eNodeB、gNodeB)的GTP-U错误指示消息。
什么是错误指示:
当OmniUPF将GTP-U数据包转发到远程对等方(例如,在SGW-U部署中的PGW-U)时,如果对等方不识别TEID(隧道端点标识符),则可能会发送错误指示。这表明:
- 远程对等方已重新启动并丢失隧道状态
- 远程端未创建隧道(配置不匹配)
- 远程端已删除隧道
工作原理:
- UPF转发数据包 → 将带有TEID X的GTP-U数��包发送到远程对等方(端口2152)
- 远程对等方不识别TEID X → 在其隧道表中查找TEID,未找到
- 远程对等方发送错误指示 → GTP-U消息类型26,IE包含错误的TEID
- UPF接收错误指示 → 解析消息以提取TEID X
- UPF找到受影响的会话 → 搜索所有会话以查找转发到TEID X的FAR
- UPF删除会话 → 从eBPF映射和PFCP状态中移除会话
- UPF更新指标 → 增加用于监控的Prometheus计数器
错误指示流程:
数据包格式(3GPP TS 29.281第7.3.1节):
GTP-U错误指示:
┌─────────────────────────────────────────┐
│ GTP-U头部(12字节) │
├─────────────────────────────────────────┤
│ 版本,PT,标志 │ 0x32 │
│ 消息类型 │ 26 (0x1A) │
│ 长度 │ 9字节 │
│ TEID │ 0 (始终) │
│ 序列号 │ 变化 │
│ N-PDU编号 │ 0 │
│ 下一个扩展头部 │ 0 │
├─────────────────────────────────────────┤
│ IE: TEID数据I(5字节) │
├─────────────────────────────────────────┤
│ 类型 │ 16 (0x10) │
│ 错误TEID │ 4字节 │
└─────────────────────────────────────────┘
何时重要:
场景1:S5/S8 GTP架构中的PGW-U重启
- SGW-U(OmniUPF)将S5/S8流量转发到PGW-U
- PGW-U重启并丢失所有S5/S8隧道状态
- SGW-U继续转发到旧TEID
- PGW-U发送错误指示
- SGW-U自动停止使用死隧道
场景2:N9架构中的对等UPF重启
- UPF-1(OmniUPF)将N9流量转发到UPF-2
- UPF-2重启
- UPF-1接收错误指示
- UPF-1清理会话
日志示例:
接收错误指示时:
WARN: 从192.168.50.10:2152接收到GTP-U错误指示,TEID 0x12345678 - 远程对等方不识别此TEID
WARN: 找到会话LocalSEID=42,FAR GlobalId=1,转发到错误TEID 0x12345678,来自对等方192.168.50.10
INFO: 删除会话LocalSEID=42,因来自192.168.50.10的TEID 0x12345678的GTP-U错误指示
WARN: 因来自192.168.50.10的TEID 0x12345678的GTP-U错误指示删除了1个会话
Prometheus指标:
监控每个对等方和每个节点的错误指示活动:
# 从对等方接收到的总错误指示
upf_buffer_listener_error_indications_received_total{node_id="pgw-u-1",peer_address="192.168.50.10"}
# 因错误指示而删除的会话
upf_buffer_listener_error_indication_sessions_deleted_total{node_id="pgw-u-1",peer_address="192.168.50.10"}
# 发送的错误指示(对于未知的入站TEID)
upf_buffer_listener_error_indications_sent_total{node_id="enodeb-1",peer_address="10.60.0.1"}
指标标签:
node_id:来自关联的PFCP节点ID(如果没有关联,则为“未知”)peer_address:远程对等方的IP地址
这些指标有助于识别有问题的对等方,并跟踪每个控制平面节点的错误指示模式。
重要说明:
-
自动清理:无需操作员干预 - 会话会自动删除
-
TEID匹配:仅删除转发到确切错误TEID的会话
-
每对等方隔离:来自一个对等方的错误指示仅影响转发到该对等方的会话
-
多个会话:如果多个会话转发到同一死TEID,全部会被删除
-
与恢复时间戳互补:
- 恢复时间戳检测 = 主动(在关联设置期间检测到重启)
- 错误指示处理 = 被动(在流量流动时检测到死隧道)
-
无效数据包处理:无效的错误指示会被记录并忽略(不会删除会话)
有关错误指示的故障排除,请参见故障排除指南。
PFCP会话创建
当UE建立PDU会话(5G)或PDP上下文(LTE)时,SMF会在UPF处创建PFCP会话。
会话建立流程:
典型会话内容:
- 上行PDR:匹配N3 TEID,通过FAR转发到N6
- 下行PDR:匹配UE IP地址,通过GTP-U封装的FAR转发到N3
- FAR:转发参数(外部头部创建、网络实例)
- QER:QoS限制(MBR、GBR)和数据包标记(QFI)
- URR:用于计费的流量报告(可选)
PFCP会话修改
SMF可以修改会话以应对移动事件(切换)、QoS变化或服务更新。
常见修改场景:
-
切换(基于N2)
- 使用新的gNB隧道端点(F-TEID)更新上行FAR
- 可选地在路径切换期间缓冲数据包
- 当准备好时将缓冲区刷新到新路径
-
QoS变化
- 使用新的MBR/GBR值更新QER
- 可在PDR中添加/删除SDF过滤器以实现特定应用的QoS
-
服务更新
- 为附加流量流添加新的PDR
- 修改FAR以进行路由更改
会话修改流程:
有关规则管理,请参见规则管理指南。
PFCP会话删除
当PDU会话被释放时,SMF会在UPF处删除PFCP会话。
会话删除流程:
执行的清理:
- 移除所有PDR(上行和下行)
- 移除所有FAR、QER、URR
- 清除数据包缓冲区
- 向SMF发送最终使用报告以进行计费
常见操作
OmniUPF通过其基于Web的控制面板和REST API提供全面的操作能力。本节涵盖常见操作任务及其重要性。
会话监控
理解PFCP会话:
PFCP会话代表活动的UE PDU会话(5G)或PDP上下文(LTE)。每个会话包含:
- 本地和远程SEID(会话端点标识符)
- 用于数据包分类的PDR
- 用于转发决策的FAR
- 用于QoS强制的QER(可选)
- 用于使用跟踪的URR(可选)
关键会话操作:
- 查看所有会话,包括UE IP地址、TEID和规则计数
- 按IP地址或TEID过滤会话
- 检查会话详细信息,包括完整的PDR/FAR/QER/URR配置
- 监控每个PFCP关联的会话计数
有关详细的会话程序,请参见会话视图。
规则管理
数据包检测规则(PDR):
PDR确定哪些数据包匹配特定的流量流。操作员可以:
- 查看上行PDR,按N3���口的TEID键入
- 查看下行PDR,按UE IP地址(IPv4和IPv6)键入
- 检查SDF过滤器以进行特定应用的分类
- 监控PDR计数和容量使用情况
转发操作规则(FAR):
FAR定义对匹配数据包的处理。操作员可以:
- 查看FAR操作(转发、丢弃、缓冲、复制、通知)
- 检查转发参数(外部头部创建、目标)
- 监控每个FAR的缓冲状态
- 在故障排除期间切换特定FAR的缓冲
QoS强制规则(QER):
QER应用带宽限制和数据包标记。操作员可以:
- 查看QoS参数(MBR、GBR、数据包延迟预算)
- 监控每个会话的活动QER
- 检查5G QoS流的QFI标记
使用报告规则(URR):
URR跟踪计费的数据量。操作员可以:
- 查看流量计数器(上行、下行、总字节)
- 监控使用阈值和报告触发器
- 检查所有会话的活动URR
有关规则操作,请参见规则管理指南。
数据包缓冲
为什么缓冲对UPF至关重要
数据包缓冲是UPF最重要的功能之一,因为它防止在移动事件和会话重新配置期间的数据包丢失。如果没有缓冲,移动用户在每次从一个基站移动到另一个基站或网络条件变化时都���经历掉线、下载中断和实时通信失败。
问题:移动期间的数据包丢失
在移动网络中,用户不断移动。当设备从一个基站移动到另一个基站(切换)时,或者当网络需要重新配置数据路径时,会有一个关键窗口,在此期间数据包正在传输,但新路径尚未准备好:
没有缓冲:在此关键窗口期间到达的数据包将被丢弃,导致:
- TCP连接停滞或重置(网页浏览、下载中断)
- 视频通话冻结或掉线(Zoom、Teams、WhatsApp通话失败)
- 游戏会话断开(在线游戏、实时应用失败)
- **VoIP通话出现间���**或完全掉线(电话通话中断)
- 下载失败并需要重新启动
有缓冲:OmniUPF暂时保存数据包,直到新路径建立,然后无缝转发。用户体验到零中断。
缓冲发生的时机
OmniUPF在以下关键场景中缓冲数据包:
1. 基于N2的切换(5G)/基于X2的切换(4G)
当UE在基站之间移动时:
时间线:
- T+0ms:旧路径仍然有效
- T+10ms:SMF告诉UPF缓冲(旧路���关闭,新路径未准备好)
- T+10-50ms:关键缓冲窗口 - 数据包到达但无法转发
- T+50ms:新路径准备就绪,SMF告诉UPF转发
- T+50ms+:UPF通过新路径刷新缓冲的数据包,然后立即转发新数据包
没有缓冲:~40ms的数据包(可能是数千个)将被丢失。 有缓冲:零数据包丢失,无缝切换。
2. 会话修改(QoS变化、路径更新)
当网络需要更改会话参数时:
- QoS升级/降级:用户从4G移动到5G覆盖(NSA模式)
- 策略变化:企业用户进入公司校园(流量引导变化)
- 网络优化:核心网络将流量重新路由到更靠近的UPF(ULCL更新)
在修改过程中,控制平面可能需要原子地更新多个规则。缓冲确保数据包不会在部分/不一致的规则集下转发。
3. 下行数据通知(空闲模式恢复)
当UE处于空闲模式(屏幕关闭,省电)并且下行数据到达时:
没有缓冲:触发通知的初始数据包将被丢失,需要发送方重新传输(增加延迟)。 有缓冲:唤醒UE时立即交付触发通知的数据包。
4. 跨RAT切换(4G ↔ 5G)
当UE在4G和5G覆盖之间移动时:
- 架构变化(eNodeB ↔ gNB)
- 隧道端点变化(不同的TEID分配)
- 缓冲确保在RAT类型之间平稳过渡
OmniUPF中的缓冲工作原理
技术机制:
OmniUPF使用两阶段缓冲架构:
- eBPF阶段(内核):根据FAR操作标志检测需要缓冲的数据包
- 用户空间阶段:在内存中存储和管理缓冲的数据包
缓冲过程:
关键细节:
- 缓冲端口:UDP端口22152(数据包从eBPF发送到用户空间)
- 封装:数据包用GTP-U封装,FAR ID作为TEID
- 存储:按FAR ID、时间戳、方向存储的内存缓冲区
- 限制:
- 每FAR限制:10,000个数据包(默认)
- 全局限制:所有FAR总共100,000个数据包
- TTL:30秒(默认) - 超过TTL的数据包将被丢弃
- 清理:后台进程每60秒删除过期的数据包
缓冲生命周期:
- 启用缓冲:SMF通过PFCP会话修改设置FAR操作BUFF=1(第2位)
- 缓冲数据包:eBPF检测到BUFF标志,封装数据包,发送��端口22152
- 用户空间存储:缓冲管理器按FAR ID、时间戳、方向存储数据包
- 禁用缓冲:SMF使用新转发参数设置FAR操作FORW=1,BUFF=0
- 刷新缓冲区:用户空间通过新FAR规则(新隧道端点)重放缓冲的数据包
- 恢复正常:新数据包立即通过新路径转发
这对用户体验的重要性
现实世界影响:
| 场景 | 没有缓冲 | 有缓冲 |
|---|---|---|
| 切换期间的视频通话 | 通话冻结1-2秒,可能掉线 | 无缝,无中断 |
| 基站边缘的文件下载 | 下载失败,必须重新启动 | 下载继续,无中断 |
| 移动中的在线游戏 | 连接掉线,踢出游戏 | 平稳游戏,无断开 |
| 车载VoIP通话 | 通话在每次切换时掉线 | 清晰无掉线 |
| 火车上的视频流 | 视频缓冲,质量下降 | 流畅播放 |
| 笔记本电脑的移动热点 | SSH会话掉线,视频通话失败 | 所有连接保持 |
网络运营商的好处:
- 降低呼叫掉线率 (CDR):网络质量的关键绩效指标
- 更高的客户满意度:用户不会注意到切换
- 降低支持成本:关于掉线连接的投诉更少
- 竞争优势:“覆盖最佳网络”的营销
缓冲管理操作
运营商可以通过 Web UI 和 API 监控和控制缓冲:
监控:
- 查看每个 FAR ID 的缓冲数据包(计数、字节、年龄)
- 跟踪缓冲使用情况与限制(每个 FAR、全局)
- 缓冲溢出或过度缓冲持续时间的警报
- 识别卡住的缓冲区(缓冲的数据包 > TTL 阈值)
控制操作:
- 刷新缓冲区:手动触发缓冲重放(故障排除)
- 清除缓冲区:丢弃缓冲的数据包(清理卡住的缓冲区)
- 调整 TTL:更改数据包过期时间
- 修改限制:增加每个 FAR 或全局缓冲容量
故障排除:
- 缓冲未刷新:检查 SMF 是否发送了 FAR 更新以禁用缓冲
- 缓冲溢出:增加限制或调查为何缓冲持续���间过长
- 缓冲中的旧数据包:TTL 可能过高,或 FAR 更新延迟
- 过度缓冲:可能表明移动性问题或 SMF 问题
有关详细的缓冲操作,请参见 缓冲管理指南。
缓冲配置
在 /etc/omniupf/runtime.exs 中配置缓冲行为:
# 缓冲设置
buffer_port = 22152 # 缓冲数据包的 UDP 端口(默认)
建议:
- 高移动性网络(高速公路、火车):将
buffer_max_packets增加到 20,000+ - 密集城市区域(频繁切换):将
buffer_packet_ttl降低到 15 秒 - 低延迟应用:将
buffer_packet_ttl设置为 10 秒以防止过时数据 - 物联网网络:降低限制(物联网设备在切换期间产生的流量较少)
有关完整的配置选项,请参见 配置指南。
统计和监控
数据包统计:
实时数据包处理指标,包括:
- RX 数据包:从所有接口接收的总数
- TX 数据包:发送到所有接口的总数
- 丢弃的数据包:因错误或策略而丢弃的数据包
- GTP-U 数据包:隧道数据包计数
路由统计:
每条路由的转发指标:
- 路由命中:每条路由匹配的数据包
- 转发��数:每个目的地的成功/失败
- 错误计数器:无效的 TEID、未知的 UE IP
XDP 统计:
eXpress 数据路径性能指标:
- XDP 处理:在 XDP 层处理的数据包
- XDP 通过:发送到网络堆栈的数据包
- XDP 丢弃:在 XDP 层丢弃的数据包
- XDP 中止:处理错误
N3/N6 接口统计:
每个接口的流量计数:
- N3 RX/TX:与 RAN(gNB/eNodeB)的流量
- N6 RX/TX:与数据网络的流量
- 总数据包计数:汇总的接口统计
有关监控详细信息,请参见 监控指南。
容量管理
eBPF 映射容量监控:
UPF 性能取决于 eBPF 映射容量。运营商可以:
- 实时监控映射使用情况,显示百分比指标
- 查看每个 eBPF 映射的容量限制
- 颜色编码的警报:
- 绿色(<50%):正常
- 黄色(50-70%):注意
- 琥珀色(70-90%):警告
- 红色(>90%):危急
需要监控的关键映射:
uplink_pdr_map:上行流量分类downlink_pdr_map:下行 IPv4 流量分类far_map:转发规则qer_map:QoS 规则urr_map:使用跟踪
容量规划:
- 每个 PDR 消耗一个映射条目(键大小 + 值大小)
- 映射容量在 UPF 启动时配置(���核内存限制)
- 超过容量会导致会话建立失败
有关容量监控,请参见 容量管理。
配置管理
UPF 配置:
查看和验证 UPF 操作参数:
- N3 接口:用于 RAN 连接的 IP 地址(GTP-U)
- N6 接口:用于数据网络连接的 IP 地址
- N9 接口:用于 UPF 之间通信的 IP 地址(可选)
- PFCP 接口:用于 SMF 连接的 IP 地址
- API 端口:REST API 监听端口
- 指标端点:Prometheus 指标端口
数据平面配置:
活动的 eBPF 数据路径参数:
- 活动 N3 地址:运行时 N3 接口绑定
- 活动 N9 地址:运行时 N9 接口绑定(如果启用)
有关配置查看,请参见 配置视图。
故障排除
本节涵盖常见操作问题及其解决策略。
会话建立失败
症状:PFCP 会话无法创建,UE 无法建立数据连接
常见根本原因:
-
PFCP 关联未建立
- 验证 SMF 是否可以访问 UPF PFCP 接口(端口 8805)
- 检查会话视图中的 PFCP 关联状态
- 验证 SMF 和 UPF 之间的节点 ID 配置是否匹配
-
eBPF 映射容量耗尽
- 检查容量视图中红色(>90%)的映射使用情况
- 在 UPF 配置中增加 eBPF 映射大小
- 如果映射已满,删除过期会话
-
无效的 PDR/FAR 配置
- 验证 UE IP 地址是否唯一且有效
- 检查 TEID 分配是否冲突
- 确保 FAR 引用有效的网络实例
-
接口配置问题
- 验证 N3 接口 IP 是否可以从 gNB 访问
- 检查路由表以确保 N6 与数据网络的连接
- 确认 GTP-U 流量未被防火墙阻止
有关详细故障排除,请参见 故障排除指南。
数据包丢失或转发问题
症状:UE 有连接但经历数据包丢失或没有流量
常见根本原因:
-
PDR 配置错误
- 验证上行 PDR TEID 是否与 gNB 分配的 TEID 匹配
- 检查下行 PDR UE IP 是否与分配的 IP 匹配
- 检查 SDF 过滤器是否过于严格
-
FAR 操作问题
- 验证 FAR 操作是否为 FORWARD(而不是 DROP 或 BUFFER)
- 检查 GTP-U 的外部头创建参数
- 确保目标端点正确
-
QoS 限制超出
- 检查 QER MBR(最大比特率)设置
- 验证 GBR(保证比特率)分配
- 监控因速率限制而导致的数据包丢失
-
接口 MTU 问题
- 验证 GTP-U 开销(40-50 字节)是否导致分片
- 检查 N3/N6 接口的 MTU 配置
- 监控 ICMP 分片需要消息
缓冲相关问题
症状:数据包无限期缓冲,缓冲溢出
常见根本原因:
-
切换后未禁用缓冲
- 检查 FAR 缓冲标志(位 2)
- 验证 SMF 是否发送了会话修改以禁用缓冲
- 如果卡住,通过控制面板手动禁用缓冲
-
缓冲 TTL 过期
- 检查缓冲视图中的数据包年龄
- 验证缓冲 TTL 配置(默认可能过长)
- 手动清除过期的缓冲
-
缓冲容量耗尽
- 监控总缓冲使用情况和每个 FAR 限制
- 检查是否存在配置错误的规则导致过度缓冲
- 调整 max_per_far 和 max_total 缓冲限制
有关缓冲故障排除,请参见 缓冲操作。
统计异常
症状:意外的数据包计数,缺失的统计信息
常见根本原因:
-
计数器溢出
- eBPF 映射使用 64 位计数器(不应溢出)
- 检查日志中的计数器重置事件
- 验证 URR 报告是否正常工作
-
路由统计未更新
- 验证 eBPF 程序是否附加到接口
- 检查内核版本是否支持所需的 eBPF 特性
- 查看 XDP 统计以查找处理错误
-
接口统计不匹配
- 将 N3/N6 统计与内核接口计数进行比较
- ���查是否有流量绕��� eBPF(例如,本地路由)
- 验证所有流量是否通过 XDP 钩子流动
性能下降
症状:高延迟,低吞吐量,CPU 饱和
诊断:
- 监控 XDP 统计:检查 XDP 丢弃或中止
- 检查 eBPF 映射访问时间:哈希查找应在微秒级
- 查看 CPU 利用率:eBPF 应在核心之间分配
- 分析网络接口:验证 NIC 是否支持 XDP 卸载
可扩展性考虑:
- XDP 性能:每个核心每秒 10M+ 数据包
- PDR 容量:数百万 PDR,仅受内核内存限制
- 会话计数:每个 UPF 实例数千个并发会话
- 吞吐量:在适当的 NIC 卸载下实现多千兆吞吐量
有关性能调优,请参见 架构指南。
附加文档
组件特定操作指南
有关每个 UPF 组件的详细操作和故障排除:
配置指南
完整的配置参考,包括:
- 配置参数(YAML、环境变量、CLI)
- 操作模式(UPF/PGW-U/SGW-U)
- XDP 附加模式概述
- 虚拟化兼容性(Proxmox、VMware、KVM、Hyper-V、VirtualBox)
- NIC 兼容性和 XDP 驱动支持
- 不同场景的配置示例
- 映射大小和容量规划
XDP 模式指南
详细的 XDP 配置和优化,包括:
- XDP 附加模式解释(通用/本地/卸载)
- 性能比较和基准测试
- Proxmox VE 本地 XDP 设置的逐步指南
- 多队列配置以实现最佳性能
- VMware ESXi、KVM 和 Hyper-V XDP 设置
- XDP 验证和故障排除
- XDP 性能的硬件选择
架构指南
深入的技术探讨,包括:
- eBPF 技术基础和程序生命周期
- 带尾调用的 XDP 数据包处理管道
- PFCP 协议实现
- 缓冲架构(GTP-U 封装到端口 22152)
- QoS 滑动窗口速率限制(5ms 窗口)
- 性能特征(3.5μs 延迟,10 Mpps/core)
规则管理指南
PFCP 规则参考,包括:
- 数据包检测规则 (PDR) - 流量分类
- 转发操作规则 (FAR) - 带操作标志的路由决策
- QoS 执行规则 (QER) - 带宽管理 (MBR/GBR)
- 使用报告规则 (URR) - 流量跟踪和报告
- 上行和下行数据包流图
- 规则处理逻辑和优先级
监控指南
统计和容量管理,包括:
- N3/N6 接口统计和流量分布
- XDP 处理统计(通过/丢弃/重定向/中止)
- 带颜色编码区域的 eBPF 映射容量监控
- 性能指标(数据包速率、吞吐量、丢包率)
- 容量规划公式和会话估算
- 警报阈值和最佳实践
Web UI 操作指南
控制面板使用,包括:
- 仪表板概述和导航
- 会话监控(健康/不健康状态)
- 规则检查(PDR、FAR、QER、URR 详细信息)
- 缓冲监控和数据包缓冲状态
- 实时统计仪表板
- eBPF 映射容量可视化
- 配置查看
API 文档
完整的 REST API 参考,包括:
- OpenAPI/Swagger 交互式文档
- API 分页(基于页面和基于偏移)
- PFCP 会话和关联端点
- 数据包检测规则 (PDR) - IPv4 和 IPv6
- 转发操作规则 (FAR)
- QoS 执行规则 (QER)
- 使用报告规则 (URR)
- 数据包缓冲管理
- 统计和监控端点
- 路由管理和 FRR 集成
- eBPF 映射信息
- 配置管理
- 认证和安全指南
- 常见 API 工作流和示例
指标参考
Prometheus 指标文档,包括:
- PFCP 消息指标(每个对等体的计数、延迟、错误)
- XDP 操作指标(数据平面裁决)
- 数据包指标(带数据包类型标签的协议级计数)
- PFCP 会话和关联指标(每个控制平面节点)
- URR 指标(每个 PFCP 对等体的流量)
- 数据包缓冲指标(缓冲状态、容量、吞吐量)
- 下行数据报告通知指标(DLDR 跟踪)
- eBPF 映射容量指标(资源利用)
- Prometheus 配置示例
- Grafana 仪表板建议
PFCP 原因代码参考
PFCP 错误代码文档,包括:
- 原因代码定义和 3GPP 合规性(TS 129.244)
- 每个原因代码发生的情况(成功、客户端错误、服务器错误)
- 常见故障场景及解决方案
- 使用 Prometheus 指标进行故障排除
- 关联设置和会话生命周期失败
- 高拒绝率的调试步骤
- 原因代码的警报建议
UE 路由管理指南
FRR 路由集成,包括:
- FRR(自由范围路由)概述和架构
- UE 路由同步生命周期
- 自动路由同步到路由守护进程
- 通过 OSPF 和 BGP 的路由广告
- OSPF 邻居监控
- OSPF 外部 LSA 数据库验证
- BGP 对等会话管理
- Web UI 路由监控界面
- 手动路由同步操作
- 路由流和架构的 Mermaid 图
IPv6 / 双栈指南
用户平面 IPv6 操作用于 IPv6 和 IPv4v6 PDN 会话:
- 内核前提条件(启用 IPv6 和转发)
- UE IPv6 地址池配置
- UE
/128主机路由的 OSPFv3 广告 - IPv6 下行/上行数据平面行为
- 故障排除 IPv6 转发和路由广告
故障排除指南
全面的问题诊断,包括:
- 快速诊断检查表和工具
- 安装和配置问题
- PFCP 关联失败
- 数据包处理问题
- XDP 和 eBPF 错误
- 性能下降
- 特定于虚拟化的故障(Proxmox、VMware、VirtualBox)
- NIC 和驱动程序问题
- 逐步解决程序
按用例的文档
安装和配置 OmniUPF
在 Proxmox 上部署
优化性能
- XDP 模式指南 - 启用本地 XDP 以获得 5-10 倍的性能提升
- 架构指南 - 性能优化
- 配置指南 - XDP 模式
- 监控指南 - 性能指标
- 故障排除 - 性能问题
理解数据包处理
规划容量
管理 UE 路由和 FRR 集成
- UE 路由管理指南 - 完整的路由集成指南
- API 文档 - 路由管理 - 路由 API 端点
- Web UI 指南 - 路由页面操作
- UE 路由管理 - FRR 验证 - OSPF LSA 验证
使用 REST API
- API 文档 - 完整的 API 参考
- API 文档 - Swagger UI - 交互式 API 探索器
- API 文档 - API 特性 - API 使用示例
- Web UI 指南 - Web 界面作为 API 客户端示例
故障排除问题
快速参考
常见 API 端点
OmniUPF 提供用于监控和管理的 REST API:
# 状态和健康
GET http://localhost:8080/api/v1/upf_status
# PFCP 关联
GET http://localhost:8080/api/v1/upf_pipeline
# 会话
GET http://localhost:8080/api/v1/sessions
# 统计
GET http://localhost:8080/api/v1/packet_stats
GET http://localhost:8080/api/v1/xdp_stats
# 容量监控
GET http://localhost:8080/api/v1/map_info
# 缓冲统计
GET http://localhost:8080/api/v1/upf_buffer_info
有关完整的 API 文档,请访问 Swagger UI,地址为 http://<upf-ip>:8080/swagger/index.html
重要配置参数
# /etc/omniupf/runtime.exs
xdp_interfaces = "eth0" # N3/N6/N9 流量的接口
xdp_attach_mode = "native" # "generic" | "native" | "offload"
n3_address = "10.100.50.233" # N3 接口 IP
pfcp_address = "10.100.50.241" # PFCP 监听地址
pfcp_port = 8805 # PFCP 端口
node_id = "10.100.50.241" # PFCP 节点 ID
# 容量
max_sessions = 100_000 # 最大并发会话数
# API
api_port = 8080 # REST API 端口
重要监控阈值
- eBPF 映射容量 < 70%:正常操作
- eBPF 映射容量 70-90%:计划在 1 周内增加容量
- eBPF 映射容量 > 90%:危急 - 需要立即采取行动
- 数据包丢失率 < 0.1%:优秀
- 数据包丢失率 0.1-1%:良好 - 小问题
- 数据包丢失率 > 5%:危急 - 立即调查
- XDP 中止 > 0:eBPF 程序存在严重问题
3GPP 标准参考
OmniUPF 实现以下 3GPP 规范:
| 规范 | 标题 | 相关性 |
|---|---|---|
| TS 23.501 | 5G 系统 (5GS) 的系统架构 | 5G UPF 架构和接口 |
| TS 23.401 | E-UTRAN 接入的通用分组无线服务 (GPRS) 增强 | LTE UPF (PGW-U) 架构 |
| TS 29.244 | 控制平面与用户平面节点之间的接口 (PFCP) | N4 PFCP 协议 |
| TS 29.281 | 通用分组无线系统 (GPRS) 隧道协议用户平面 (GTPv1-U) | GTP-U 封装 |
| TS 23.503 | 5G 系统 (5GS) 的策略和计费控制框架 | QoS 和计费 |
| TS 29.212 | 策略和计费控制 (PCC) | QoS 执行 |
术语表
5G 架构术语
- 3GPP:第三代合作伙伴计划 - 移动通信标准机构
- AMF:接入和移动管理功能 - 5G 核心网络元素,用于接入控制
- CHF:计费功能 - 5G 计费系统
- DN:数据网络 - 外部网络(互联网、IMS、企业)
- eNodeB:演进节点 B - LTE 基站
- F-TEID:完全合格的隧道端点标识符 - 带 IP 地址的 GTP-U 隧道 ID
- gNB:下一代节点 B - 5G 基站
- GTP-U:通用分组无线服务隧道协议用户平面 - 用户数据的隧道协议
- MBR:最大比特率 - QoS 参数,最大允许带宽
- GBR:保证比特率 - QoS 参数,保证的最小带宽
- N3:RAN 和 UPF 之间的接口(用户平面流量)
- N4:SMF 和 UPF 之间的接口(PFCP 控制)
- N6:UPF 和数据网络之间的接口(用户平面流量)
- N9:两个 UPF 之间的接口(UPF 之间的用户平面流量)
- PCF:策略控制功能 - 5G 策略服务器
- PDU:协议数据单元 - 5G 中的数据会话
- PGW-C:PDN 网关控制平面 - LTE 控制平面,相当于 SMF
- PGW-U:PDN 网关用户平面 - LTE 用户平面(UPF 相当于)
- QFI:QoS 流标识符 - 5G QoS 流标记
- QoS:服务质量 - 流量优先级和带宽管理
- RAN:无线接入网络 - 基站网络(gNB/eNodeB)
- SEID:会话端点标识符 - PFCP 会话 ID
- SMF:会话管理功能 - 5G 核心网络元素,用于会话控制
- TEID:隧道端点标识符 - GTP-U 隧道 ID
- UE:用户设备 - 移动设备
- UPF:用户平面功能 - 5G 数据包转发网络元素
PFCP 协议术语
- Association: SMF 和 UPF 之间的控制关系
- FAR: 转发动作规则 - 决定数据包转发行为
- IE: 信息元素 - PFCP 消息组件
- Node ID: UPF 或 SMF 标识符 (FQDN 或 IP 地址)
- PDR: 数据包检测规则 - 将数据包分类到流中
- PFCP: 数据包转发控制协议 - N4 控制协议
- QER: QoS 执行规则 - 应用带宽限制和标记
- SDF: 服务数据流 - 应用特定的流量过滤器
- Session: 表示 UE PDU 会话或 PDP 上下文的 PFCP 会话
- URR: 使用报告规则 - 跟踪计费的数据量
eBPF 和 Linux 内核术语
- BPF: 伯克利数据包过滤器 - 内核数据包过滤技术
- eBPF: 扩展 BPF - 可编程内核数据路径
- Hash Map: eBPF 键值存储,用于快速查找
- XDP: eXpress 数据路径 - 驱动级别的内核数据包处理
- Verifier: 验证 eBPF 程序安全性的内核组件
- Map: 内核和用户空间之间共享的 eBPF 数据结构
- Zero-copy: 无需复制到用户空间的数据包处理
OmniUPF 产品术语
- OmniUPF: 基于 eBPF 的用户面功能(此产品)
- Datapath: 数据包处理引擎(eBPF 程序)
- Control Plane: PFCP 处理程序和会话管理
- REST API: 用于监控和管理的 HTTP API
- Web UI: 基于浏览器的控制面板