资讯详情

资讯详情

5G核心网CUPS架构:SMF与UPF数据转发机制全解析

做5G核心网的人迟早都会碰到这样一个问题信令一切正常用户面却一个包都传不过去。我第一次在现网排查这种故障时在SMF、UPF、gNB三头跑了半天最后才发现自己对控制面怎么管用户面这件事的理解还停留在4G那套网元内部一把抓的思路上。这篇帖子想聊的正是5G核心网CUPS架构下控制面SMF通过N4接口管理用户面UPF、以及数据包在UPF内部完成转发的完整机制。适合刚接触5GC、准备做核心网维护或项目交付的读者把这套机制看完很多现网疑难问题都能少走弯路。1. 为什么5G要把控制面和用户面拆开CUPS的来龙去脉1.1 4G时代一体化网元留下的卡脖子问题4G EPC时代SGW和PGW虽然逻辑上是独立的网元但物理上经常做成一体机控制面和用户面跑在同一台设备里。好处是集成度高、部署简单坏处也很明显当数据流量增长你想扩用户面转发能力就得连控制面的会话处理板卡一起扩反过来说控制面信令处理压力不大、但用户面带宽瓶颈明显的场景一体化架构根本没法单独优化某一块。更麻烦的是部署灵活性。4G的SGW/PGW一般在省公司核心机房集中部署用户数据不管业务在哪、用户在哪都要通过长途回传到中心节点处理时延高、传输成本大。到了5G大带宽业务、边缘计算、低时延要求的场景大量出现如果继续让数据面跟着控制面跑MEC根本无从谈起。我当年做项目时听过一句话4G的核心网是数据围着控制面转5G必须改成控制面围着数据面转。1.2 CUPS架构下SMF和UPF各自干什么5G核心网从标准定义上就把控制面和用户面分开了。控制面里的核心是SMFSession Management Function负责PDU会话的建立、修改、删除给终端分配IP地址根据策略决定走哪条数据路径以及和PCRF/PCF配合完成策略执行。SMF基本不碰真正的用户数据它处理的都是信令级别的决策。用户面的主角是UPFUser Plane Function它负责真正搬运用户的IP包按照SMF下发的规则做包匹配、转发、缓存、丢弃做QoS门控和速率限制做用量统计上报把数据从RAN侧通过N3转到外部网络N6或者在不同的UPF之间通过N9流转。UPF可以理解成一台被外部规则驱动的转发设备——它本身不决策只执行。这种脑子和手脚的分离让运营商可以做到控制面集中部署统一管理用户面按流量需求下沉到地市甚至园区边缘。1.3 先记住一个关键认知UPF不是高级路由器很多刚从数通转过来的朋友会把UPF当成一台高级路由器觉得它有路由表、能做路由转发就完事了。这个理解会害死人。路由器是自己参与路由计算、自己选路的UPF完全不是这个逻辑。UPF的每一套转发行为都由SMF通过N4接口下发规则规则没下发UPF对某个PDU会话的流量就是看不见、摸不着的哪怕物理链路全通数据照样丢。打个比方快递分拣中心里分拣员UPF自己决定不了这个包裹是该上华东线还是华北线每个班次拿到的操作手册PDR/FAR规则才是决定包裹怎么走的核心。分拣员只需要按手册执行手册错了或者没发到包裹就积压甚至被销毁。理解CUPS数据包转发本质上就是理解手册怎么组织、分拣员怎么执行。2. N4接口与PFCP协议控制面给用户面发号施令的通道2.1 PFCP跑在UDP 8805上为什么不是TCPN4接口的协议叫PFCPPacket Forwarding Control Protocol采用UDP承载默认端口8805。很多人会问控制面下发规则这么重要的事为什么不用TCP保证可靠性反而选UDP答案是为了性能和解耦。PFCP并不完全依赖UDP本身的特性它在协议内部实现了自己的可靠性机制每条请求消息都需要对端回Response如果定时器超时没有收到会重传同时它做了心跳检测。也就是说可靠性靠PFCP协议自己保证而不是交给TCP那种通用机制。这样设计的好处是控制面下发规则的处理开销低、时延小而且当PFCP拓扑变化时比如在SMF或UPF故障切换场景协议行为可以更精确地控制不受TCP连接状态机的干扰。2.2 两类PFCP消息管节点的和管会话的PFCP消息分两大块这个分类是理解N4交互的基础。第一类叫节点管理消息Node Related Messages管的是SMF和UPF之间这俩网元活没活着、能不能配合这类事。最常用的是Heartbeat Request/Response心跳和Association Setup Request/Response关联建立。SMF和UPF在正式开始管理PDU会话之前必须先完成PFCP Association——简单说就是建立起节点级的信任关系互相通告支持的特性、IP地址、接口类型等信息。第二类叫会话管理消息Session Related Messages管的是具体某个PDU会话。典型的有Session Establishment建立会话、Session Modification修改会话、Session Deletion删除会话。SMF通过这类消息把某个PDU会话的规则集下发给UPF或者更新里面的部分规则。这里有个容易搞混的点PFCP Association是节点的一个SMF和一个UPF之间只需要建立一次PFCP Session是PDU会话粒度的每个终端每建一个PDU会话UPF上就对应一个独立的PFCP会话。我在现网就见过有人把这两个概念混在一起排查问题时对着关联都正常的现象纠结半天其实要看的是会话级建立成没成功。2.3 F-SEID识别一个PFCP会话的身份证在一个UPF上可能同时跑着成千上万个PFCP会话SMF和UPF怎么准确找到某一个会话靠的是F-SEIDFully Qualified Session ID。F-SEID由节点IP地址加64位会话ID组成SMF和UPF各自维护一个自己的F-SEID在Session Establishment消息里互相交换。之后双方发消息修改会话时报头里会带上接收方那个F-SEID来指定操作的是哪个会话。实际调试中如果在信令跟踪工具里看到一个Session Establishment请求可以关注它携带的两个F-SEID值——一个SEID是SMF的CP F-SEID一个是UPF的UP F-SEID。后续的Modification消息里UP F-SEID用于SMF发给UPF的请求CP F-SEID用于UPF给SMF回的响应。这个细节在抓包分析时非常有用。2.4 一个让新手困惑的点为什么连上行规则都是SMF下发的刚开始接触PFCP的人经常会问上行数据包是先经过UPF的UPF自己根据报文特征判断该往哪走不就行了吗为什么还要SMF专门下发规则原因在于CUPS的设计理念——用户面必须是哑管道所有智能都在控制面。如果让UPF自己决定转发行为了那每个UPF上的策略可能就是厂家私有实现的不同厂商UPF行为不一致运维没法统一管理而且策略频繁变化时你要逐台登录UPF去改配置根本不现实。所以CUPS明确规定即便是上行PDR包检测规则也由SMF通过N4下发UPF只负责在本地索引和匹配。这种集中式规则下发加上标准化协议让运营商可以用一套策略框架管理全网所有厂商的UPF。3. 数据包转发全流程一条上行数据是怎么从UE走到DN的3.1 先梳理5G用户面的四个关键参考点5G SA架构下用户面数据路径上会碰到四个关键节点/接口UE到gNB空口承载的是无线侧协议栈处理后的用户IP包gNB到UPFN3接口数据封装在GTP-U隧道里目的IP是UPF的N3地址UPF到外部网络N6接口UPF去掉GTP-U封装把原始IP包发给数据网络DNUPF与UPF之间N9接口通常也是GTP-U隧道用于ULCL或中间UPF把流量导向锚点UPF这段路径搞清楚了你才能明白转发在不同位置的含义完全不同。N3到N6的转发是解隧道封装、换接口出去N3到N9的转发是解封装、再封装、往另一个UPF送N6到N3的转发是收到裸IP包、按规则封装进GTP-U隧道发给gNB。3.2 上行数据在UPF内部的三步判断从一个上行GTP-U包到达UPF的N3口开始UPF内部要做三步处理。我用大白话拆开讲第一步识别PDU会话。GTP-U头里带有TEIDUPF根据TEID加上源IP、网络实例等信息判断这个包属于哪个PDU会话也就是找到这个会话对应的PFCP会话上下文。第二步匹配PDR。在这个会话上下文中按优先级逐个检查PDR看包的源接口、TEID、网络实例、QFI等特征是否和某个PDR的PDI匹配。匹配成功就拿到这个PDR关联的FAR ID、QER ID、URR ID。第三步执行FAR动作。根据FAR里的转发参数决定这个包是发往N6去外部网络、发往N9去另一个UPF、丢弃还是做缓存。如果需要QoS执行和用量统计再调用QER和URR的处理逻辑。这三步里最容易出问题的是第一步和第二步的衔接包能进来但PDR没匹配上UPF就会把这个包默默丢弃抓包能看到GTP-U报文进来但N6口死活看不到对应IP包出去。3.3 必不可少的细节TEID到底是谁分配的GTP-U隧道是双向的但收发两个方向的TEID各自独立、由不同节点分配。往gNB方向发的下行数据用的TEID由gNB在PDU会话建立时分配通过N2信令告知AMFAMF再通知SMFSMF在PFCP会话里把它作为下行FAR的转发参数下发到UPF。往UPF方向发的上行数据gNB用的TEID由UPF分配SMF在下发上行PDR时把它写进PDI里。我遇到过不少同行排查下行不通时先怀疑UPF和gNB之间路由断了结果路由没问题回头查配置才发现SMF下发到UPF的下行FAR里指向gNB的TEID还是旧值gNB侧PDU会话重建后TEID早就变了。所以一定要记住TEID不是随便配置的静态值它是会话生命周期内由端侧动态分配、靠信令同步的。3.4 下行数据反向走一遍用UE IP找隧道下行链路从DN过来的数据是普通IP包不带GTP-U头UPF没法靠TEID识别会话。这时靠的是下行PDR里的PDI配置——最典型的就是UE的IP地址。UPF拿到DN来的IP包查目的IP匹配到某个PDU会话的下行PDR然后按关联的FAR把报文封装成GTP-U目的TEID填gNB分配的隧道ID从N3口发给gNB再由gNB通过空口发给UE。这里有个常见误区有人觉得既然下行按UE IP匹配那是不是所有下行流量都只匹配一个PDR就完了实际上一个PDU会话可能配置多个下行PDR比如按目的端口区分不同QoS Flow走不同的QER和URR。规则越多优先级排错的重要性就越高。4. 规则引擎拆解PDR、FAR、QER、URR怎么协同4.1 四类规则各自负责什么把规则比作一个岗位分工明确的团队规则类型全称干什么关键内容PDRPacket Detection Rule检测和分类报文是整个规则链的入口PDR ID、优先级Precedence、PDI匹配条件、关联的FAR/QER/URR IDFARForwarding Action Rule决定命中的报文怎么处理FAR ID、Apply Action、转发目标参数网络实例、TEID、目的接口QERQoS Enforcement Rule对流量做QoS门控和速率限制QER ID、QFI、GBR/MBR、Gate StatusURRUsage Reporting Rule统计流量用量按条件上报给SMFURR ID、测量方法、上报触发条件、测量周期这几类规则都是独立编号、独立配置的然后通过ID互相挂钩。一个PDR可以同时关联一个FAR、多个QER、多个URR反过来多个PDR也可以复用同一个FAR或QER。这种解耦设计就是为了让SMF在修改某个QoS参数时不用把所有PDR都重发一遍只更新对应的QER就行。4.2 PDR匹配的优先级是个隐形炸弹一个PDU会话里通常有多个PDRUPF匹配的时候按Precedence值从小到大检查数值越小优先级越高。这个设计本意是让SFM可以灵活排序让更精确的规则排在前面。但实际配置中很多故障就是优先级排错引起的。举个例子一个会话里有两个下行PDR一个精确匹配某个服务器的IP端口另一个宽泛匹配整个网段。如果宽泛那条的Precedence数值更小UPF会先命中它精确匹配那条永远没机会执行结果就是特定业务该走的QoS通道没走到计费也按错规则统计了。排查这种问题时不要只看规则有没有下发要看规则匹配的顺序对不对。厂商的UPF一般在命令行或网管上有报文命中规则的统计计数这是定位优先级问题的利器。4.3 FAR的Apply Action不只是转发和丢弃FAR里最关键的是Apply Action字段可取值有FORW转发、DROP丢弃、BUFF缓存、NOCP不向CP上报、DUPL复制。新手往往只关注FORW忽略其他取值。特别注意DROP和BUFF这两个动作。SMF在某些场景会故意下发DROP规则比如策略调整期间临时拦截某类流量BUFF则常见于终端处于Idle态时UPF临时缓存下行数据等终端恢复连接后再转发。如果你在现网遇到某类业务突然不通先别急着怀疑链路登录UPF查一下这个会话的PDR命中了哪条FAR那条FAR的Action是什么——有可能规则本身就是为了实现某个策略而故意DROPPING。另外还有DUPL。这个动作会把一个报文复制成多份转发用在不影响主链路的情况下把流量镜像到探针或分析系统。我们做故障分析抓不到镜像流量时会检查是否有人改过FAR动作把DUPL摘掉了。4.4 QER和URR转发链路上的监督员和记账员QER负责执行QoS门控和速率限制。门控就是Gate StatusOPEN放行CLOSED拦截速率限制就是GBR保证速率和MBR最大速率UPF会做令牌桶之类的限速处理。Troubleshooting时如果发现某个业务能通但速度被卡死十有八九是QER的MBR配小了而不是传输链路的问题。URR做用量统计支持按流量体积、按时长、按事件等维度测量还可以设置阈值达到阈值后主动上报给SMF用于计费或用量监控。调URR时要注意测量周期和上报触发的配置配得太频繁会把N4接口打成瓶颈配得太粗又会影响计费精度。这是一个需要在现网反复权衡的点。5. 复杂转发场景ULCL本地分流与多锚点拓扑5.1 为什么需要ULCLMEC和本地分流的需求5G的MEC场景有个很现实的需求用户流量要在尽可能靠近终端的地方处理不能动不动就绕回中心UPF。如果整个PDU会话只有一个锚点UPF那无论终端在哪业务流量都得通过N9或N6绕到那个锚点上去边缘时延优势就没了。上行分类器Uplink ClassifierULCL就是来解决这个问题的。ULCL是一个部署在用户面路径上、靠近接入侧的特殊UPF角色它会把上行流量分成两路一路通过N9转发给本地的锚点UPFPSA用于访问边缘应用另一路继续往中心锚点UPF送用于访问中心网络的公网业务。终端和SMF不需要为ULCL做感知——终端拿到的IP地址不变它只知道自己有个PDU会话但实际数据面在靠近本地的地方就被分流了。5.2 分流靠什么实现规则里的分水岭ULCL的分流逻辑完全体现在SMF下发的PDR/FAR里。SMF会根据策略在ULCL上配置多条上行PDR如果目的IP是本地MEC应用服务器的地址段命中PDR-A关联的FAR把它从N9转发到本地PSA如果目的IP是公网地址段命中PDR-B关联的FAR把它从N9转发到中心PSA或直接从N6出去。这里有个关键点PDR的匹配不能只看目的IP还要看报文到达时用的隧道。我做过一个多切片项目同一个ULCL上承载不同切片的PDU会话区分依据是GTP-U扩展头里的QFI和隧道TEIDPDR的PDI里同时配置了源接口、TEID、IP前缀。所以在设计规则时想清楚你的分水岭是IP还是隧道信息直接决定规则能配多简单。5.3 锚点切换时SMF如何动态调整规则终端移动后如果ULCL的位置已经不适合继续做本地分流SMF会通过PFCP Session Modification消息在旧的ULCL上删除相关PDR/FAR在合适的UPF上建立新的ULCL与新的N9转发路径。这个过程中ULCL到PSA的N9 GTP-U隧道会重建锚点也可能从本地PSA换成新的PSA。这个过程里最容易出故障的环节是规则切换顺序。如果SMF先删了旧规则、再建新规则中间会出现一个窗口期从N3上来的流量匹配不到任何PDR直接被丢。好的实现通常先在新路径上建立规则、再删旧规则或者做短暂的缓冲。但我见过某些版本的产品在这方面做得不够细切换窗口丢包明显。做核心网项目的兄弟要对这种场景有预期别一看丢包就怀疑无线侧。5.4 先别急着啃完整PFCP规范很多新人跑来问我是不是得把TS 29.244从头啃完才能干CUPS项目。我的建议是没必要。最有效的学习路径是先把一次完整的PFCP Session Establishment抓下来在Wireshark里逐个IE对照文档看一遍弄清F-SEID、PDR、FAR、QER、URR这些核心对象然后找一个真实的PDU会话从UE拨号开始跟踪规则下发和数据转发的对应关系。这个过程走完你对CUPS的理解会比啃十遍规范都扎实。6. 转发异常的排查链路从现象反推到根因6.1 五个最常见的现网问题速查我在交付和支撑中遇到的上行/下行转发问题基本逃不出下面这五类附上对应的排查方向现象优先排查点业务完全不通PFCP关联是否建立、PFCP会话是否建立成功、N3/N6口物理链路是否正常上行通、下行不通下行PDR的UE IP是否匹配、gNB分配的TEID是否同步到UPF下行通、上行不通上行PDR的TEID是否匹配、gNB是否在往UPF分配的上行TEID发数据部分业务被丢或走错路径PDR优先级顺序、FAR动作是否被配置为DROP/BUFF、QER门控状态时通时断SMF与UPF之间的网络质量、PFCP心跳超时、UPF表项老化或资源不足现场处理时先用这个表快速锁定范围能少走很多弯路。6.2 一套可以照抄的排查步骤我个人的排查套路是固定的分享出来给大家参考第一步确认PFCP关联。在SMF或UPF侧查看关联状态并确认管理面可达。可以简单地在UPF上ping SMF的N4地址再确认UDP 8805端口连通必要时抓包看Heartbeat是否正常。第二步确认PFCP会话建立。在SMF侧看PDU会话的N4会话状态查Session Establishment有没有返回成功。很多情况下业务不可用问题就出在这一步PFCP会话建失败了后面所有转发规则都无从谈起。第三步抓包对比。在UPF的N3口、N6口分别抓包N3口过滤GTP-UUDP 2152N6口按UE IP过滤。如果N3有包、N6没包问题在UPF内部规则匹配或FAR动作如果N3没包问题在gNB到UPF的传输或无线侧。第四步进UPF查规则命中。在UPF上查看该PDU会话对应的PDR/FAR列表检查匹配计数。如果命中数为0看PDR的PDI字段是否写错了比如UE IP有变动没同步、TEID方向搞反了。第五步反向验证。从DN侧向UE IP发起探测看UPF是否收到N6请求、是否封装成GTP-U发给gNB、gNB是否有回应。这条闭环走完基本能定位到具体断点。6.3 抓包分析时值得注意的几个过滤技巧做N4和用户面抓包我用得最多的过滤条件就三条udp.port 8805 抓PFCPudp.port 2152 抓GTP-U再加上UE的IP过滤。值得留意的是GTP-U报文在Wireshark里默认显示为GTP-U协议但有时候由于端口识别不准会被解析成普通UDP可以强制解码为GTP-U。另外提醒一点UPF和SMF之间如果有NAT或者隧道封装PFCP报文的源/目的IP可能被改写用F-SEID里的内部IP去看会话关联会更准。我碰到过一次现网排查抓包里IP地址和网管上看到的地址完全对不上就是因为中间隔了一层网络转换。6.4 不要忽视UPF自身状态规则配置没问题、链路也没问题但转发还是不正常的时候要把目光放到UPF自身运行状态上。常见的有PFCP会话表项超过规格导致新建会话失败、转发引擎表项老化导致部分TEID匹配不到、N3口工作模式不对导致GTP-U处理异常、以及UPF和SMF之间时间不同步导致PFCP消息时序判断出错。处理这类问题重启能临时恢复但根因还是要从收集诊断信息入手。在重启之前把UPF的诊断快照、日志、抓包都留一份否则恢复后线索全没了下次再犯你都不知道怎么犯的。最后聊两句实际体会说句掏心窝的话CUPS这套机制本身并不复杂——就是控制面下发规则、用户面按规则执行。真正复杂的是规则之间的关联关系以及规则与实际报文的对应关系。我每次排查转发问题最有效的动作就是打开一次完整的PFCP Session Establishment抓包一个IE一个IE地核核对PDR的PDI、FAR的转发参数、TEID的方向归属十次里有八次能直接找到问题。另一个建议是入行初期有条件的话一定要在测试环境里亲手抓一次终端拨号—会话建立—上行数据转发—下行数据转发的完整报文然后配合Wireshark的Follow和过滤功能把每个报文的每个关键字段都搞明白。这个过程会很枯燥但它是让你真正从能用网管变成懂网络的分水岭。核心网这行没有捷径多抓包、多对照、多复盘比囤一堆文档有用得多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →