开源项目
free5gc/free5gc avatar
free5gc/free5gc

free5GC:用 Go 重构的 3GPP R17 5G 核心网,离生产还有多远

基于3GPP R17的开源5G核心网。什么是 free5GC free5GC(Linux 基金会项目)是第五代 (5G) 移动核心网络的开源项目。

2,357 个 Star755 个 ForkGoApache-2.0

秒懂

它是什么?
free5GC 是 Linux Foundation 旗下的开源 5G 核心网实现,基于 3GPP R15 及后续版本,当前主线对应 R17。本文剖析其架构、部署方式、真实局限与替代方案,帮你判断它是否适合你的实验或预研项目。
适合谁用?
free5GC 适合需要快速搭建 5G 核心网实验环境的研究人员、教育机构,以及希望验证 5G 协议栈的开发者。它不适合需要电信级稳定性、完整 R17 特性或商业支持的运营商级部署。
能商用吗?
可以。Apache-2.0 是宽松许可证:你可以使用、修改并销售基于它的软件,只需保留版权和许可证声明。
还在维护吗?
在维护。仓库最近一次提交在 6 天前。
用什么语言写的?
主要是 Go(依据 GitHub 的语言统计)。

以上回答依据项目的 GitHub 数据(最近同步于 2026年9月15日)和我们的分析,不构成法律意见。

开源项目深度解析

一个用 Go 写的 5G 核心网,解决谁的什么问题

free5GC 是一个开源 5G 核心网(5GC)实现,目标是对齐 3GPP Release 15 及之后的规范,当前主线基于 R17。它解决的问题很具体:5G 核心网通常由昂贵的专有设备或闭源软件构成,研究者、教育者和小型设备商难以获得可修改的参考实现。free5GC 用 Go 语言编写,这意味着它天然适合容器化部署,也降低了阅读和修改的门槛。它的目标用户是那些需要在自己的实验室里跑通 UE、基站与核心网之间信令流程的人,而不是打算直接上运营商的工程团队。

核心网由哪些网元组成,数据流怎么走

free5GC 实现了 3GPP 定义的 5G 核心网服务化架构(SBA)。核心网包含多个网络功能(NF),例如 AMF(接入和移动性管理)、SMF(会话管理)、UPF(用户平面功能)、AUSF(认证服务器功能)、UDM(统一数据管理)等。这些网元通过基于 HTTP/2 的服务化接口(如 Namf、Nsmf)互相通信。用户数据面的路径是 UE 到基站(gNB),再到 UPF,最后到达外部网络。控制面信令则通过 AMF 和 SMF 协调。根据 README 的项目结构,这些网元在仓库中各自有独立的模块,可以单独构建和运行。具体的数据流细节需要查阅官方文档,但架构上它遵循 3GPP 标准,这意味着任何熟悉 5G 规范的人都能快速定位到对应网元的代码。

从源码到运行:构建和部署的真实路径

free5GC 的部署通常涉及编译 Go 代码和配置各网元的配置文件。虽然 README 没有给出具体命令,但官方指南(free5gc.org/guide/)提供了详细的步骤。典型流程是:克隆仓库到本地,安装 Go 环境(版本要求取决于当前主线),然后使用 make 或 go build 编译各个网元。部署时,你需要为每个网元准备配置文件(通常是 YAML 格式),指定监听地址、数据库连接(如 MongoDB)和相邻网元的地址。例如,AMF 的配置文件需要知道 NRF(网络功能仓库功能)的地址,SMF 需要知道 UPF 的地址。你可以选择在本地进程运行,或使用 Docker 容器编排。由于 free5GC 是模块化的,你可以只启动需要的网元,比如只运行 AMF 和 SMF 来测试注册流程,而不必启动完整的核心网。建议先阅读官方指南中的快速开始部分,那里有具体的命令示例。

R17 支持的实际边界:不是所有特性都可用

free5GC 的目标是实现 3GPP R15 及之后版本,但这不是一个一蹴而就的过程。README 明确说“ultimate goal is to implement 5GC defined in R15 and beyond”,这意味着对 R16 和 R17 的支持是逐步添加的。例如,R17 引入的 NSSF(网络切片选择功能)和 NEF(网络开放功能)在 free5GC 中可能已经存在,但具体实现程度取决于版本。从发布节奏看,v4.2.3 在 2026 年 6 月发布,距离 v4.2.2 仅两个月,说明项目活跃,但这也可能意味着某些特性还在完善中。一个明显的局限是,free5GC 主要面向实验室环境,其性能优化和故障恢复机制不如商业实现。例如,UPF 的数据转发能力可能无法满足高吞吐量场景。如果你需要测试 R17 的特定特性,如网络切片增强或边缘计算,你需要确认对应网元的实现状态,而不是假设所有规范都已被完整实现。

与 Open5GS 的差异:两种设计哲学

提到免费 5G 核心网,Open5GS 是另一个常见选择。两者的核心差异在于编程语言和架构风格。Open5GS 主要用 C 语言编写,更接近传统电信软件,其性能调优和协议栈成熟度可能更高,但代码可读性和扩展性不如 Go。free5GC 用 Go,天然支持并发和容器化,更适合云原生部署。此外,free5GC 是 Linux Foundation 项目,有更规范的项目治理,而 Open5GS 是个人主导的开源项目。在功能上,两者都支持基本的 5G 核心网网元,但 free5GC 的 R17 支持可能更及时,因为其发布频率较高。选择哪个取决于你的技术栈偏好:如果你熟悉 C 和传统电信环境,Open5GS 可能更顺手;如果你希望快速集成到 Kubernetes 或做二次开发,free5GC 的 Go 代码库可能更友好。

维护成本与许可:Apache-2.0 带来的自由与责任

free5GC 采用 Apache-2.0 许可,这意味着你可以自由使用、修改和分发,甚至用于商业目的,只要保留版权声明并注明修改。这比 GPL 类许可更宽松,适合企业集成。但维护成本不容忽视。由于是开源项目,没有 SLA 保证,你需要自己处理 bug 和版本升级。项目提供了官方论坛(forum.free5gc.org)用于问题讨论,但 issue 列表仅限于 bug 报告和功能请求,这意味着你需要自行排查问题。从发布频率看,v4.2.1 到 v4.2.3 间隔约三个月,说明项目维护活跃,但每次升级可能引入破坏性变更,你需要关注 release notes。此外,部署 5G 核心网涉及多个网元的协同,配置复杂度高,你需要投入时间学习各网元的配置项。如果你没有 Go 或 5G 协议背景,学习曲线会相当陡峭。

谁该用,谁不该用:一个诚实的判断

free5GC 最适合三类人:一是高校或研究机构,需要可定制的 5G 核心网来验证论文中的算法;二是设备商,需要快速搭建原型来测试 UE 或基站;三是开发者,想在 5G 领域学习 Go 和协议实现。它不适合需要电信级可靠性的运营商,也不适合没有技术团队的小公司,因为部署和运维成本高。如果你只是需要一个能跑通的 demo,free5GC 可以做到,但如果你需要支持大量用户或高吞吐量,它可能力不从心。在采用前,你应该先检查官方指南中的系统要求,确认你的硬件和 Go 版本是否满足。然后,在论坛中搜索是否有你计划使用的特性的已知问题。最后,尝试在一个隔离的虚拟机或容器环境中运行最小的核心网(如 AMF + SMF + UPF),验证基本流程是否顺畅。这样你可以在投入大量时间前,对项目的实际状态有一个直观感受。

编辑结论

free5GC 适合需要快速搭建 5G 核心网实验环境的研究人员、教育机构,以及希望验证 5G 协议栈的开发者。它不适合需要电信级稳定性、完整 R17 特性或商业支持的运营商级部署。采用前,你应验证你需要的网元(如 NSSF、NEF)是否在 v4.2.3 中可用,并检查 Go 版本兼容性。同时,Apache-2.0 许可允许商业使用,但需自行承担集成与维护成本。若你的场景要求生产级可靠性,应考虑商业方案或 Open5GS 等更成熟的替代品。

官方来源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
社区笔记

社区笔记