十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

用Wireshark拆解CPRI与eCPRI帧结构:5G前传协议实战

用Wireshark拆解CPRI与eCPRI帧结构:5G前传协议实战 在基站前传接口上抓包分析帧结构是网规网优、基带研发和协议测试工程师都绕不开的活。CPRI这个老协议从3G时代一路扛到5G早期把BBU和RRU之间的IQ数据原封不动地搬来搬去到了5G大带宽、大规模天线普及之后它的问题越来越明显。eCPRI的出现本质是把前传从专用物理链路改成通用的以太网承载这带来了带宽利用率、前传设备生态的巨大变化。这篇文章我就用Wireshark这个工具把CPRI和eCPRI两套帧结构从字段级拆开看明白适合正在调前传接口的工程师、做协议栈测试的测试人员以及刚转入无线通信领域想搞懂“前传到底在传什么”的同学。1. 前传协议演进为什么CPRI会变成eCPRI1.1 CPRI的诞生背景与设计逻辑CPRICommon Public Radio Interface是2003年前后由几大通信设备商联合定义的接口规范核心目的是把基站拆成BBU基带单元和RRU射频远端两个物理实体。基带侧完成调制、编码、层映射射频侧完成数模转换、滤波、放大和天线发射中间通过光纤拉远连接。这个拆分带来两个问题一是BBU到RRU之间的IQ采样数据怎么传二是两端的时钟同步怎么做。CPRI的设计思路就是在物理层建立一条确定性时延的专用链路把用户面、控制面、同步面和管理面全部映射到一套固定帧结构里。早期CPRI能占住主导地位靠的是“简单”和“确定”。简单体现在协议栈只有物理层和数据链路层没有任何三层路由和分包的概念确定体现在时延完全固定采样点从BBU到RRU的时延不随负载变化这对物理层处理非常重要。RRU侧恢复出时钟BBU侧按帧号对齐采样数据整个系统就像一根“数字同轴电缆”在传输。1.2 eCPRI出现的根本原因以太网化的前传LTE时代CPRI还算够用但到了5G NR载波带宽从20MHz增到100MHz甚至200MHz天线通道从2T2R增到64T64R。如果还按CPRI那种“IQ整搬”的方式前传带宽会爆炸。CPRI Option 7/8对应10G光口再往上的Option 9/10需要25G甚至更高但真正的问题不在单条链路速率而在于它占用了大量光纤资源、一套天线就得一对纤网络扩容非常笨拙。eCPRI把前传数据打包成以太网消息借用现成的以太网交换机和IP网络基础设施带宽需求下降部署灵活度提高。更重要的是它把前传接口从一个“物理层专属接口”变成了“应用层协议”这让RU和DU的厂家解耦成为可能。你可以用A厂家的DU对接B厂家的RU只要双方都遵循eCPRI的消息格式和Split点定义。这个生态变化才是eCPRI真正颠覆CPRI的地方。2. Wireshark环境准备与前传抓包入口2.1 抓包硬件与拓扑方案对于刚接触前传抓包的人来说最直接的疑问是“前传口是光口我电脑上的Wireshark怎么接上去”答案是Wireshark只是解包软件关键在抓包入口。实验室里常用SFP口的服务器或工控机选支持10G/25G的网卡如Intel X710、Mellanox ConnectX-4配合分光器optical splitter或TAP设备旁路监听。分光器是最常见的接入方式它把一路光信号按比例分成两路一路继续给远端RRU另一路送到抓包机的光口。分光器是无源器件不会影响主链路但它会引入1到3dB的插损长距离链路要提前检查光功率余量否则可能直接把业务光信号“分没了”。真实外场环境下往往直接使用厂商的运维口或通过基站的调试探针把前传接口的流量镜像到抓包机这种方式不依赖现场拔插光纤但需要设备侧开放调试权限。2.2 Wireshark安装、版本选择与协议支持Wireshark跨平台支持Windows、Linux、macOS。Windows下安装时要注意驱动选项新版安装包默认推荐Npcap这个要选上否则后面抓不了实时流量只能打开离线pcap文件。Linux直接用发行版自带的包管理器安装即可底层libcap驱动通常已经就绪。macOS用户用Homebrew装也行但如果你主要是做前传分析我建议直接用Linux环境处理大流量pcap文件时效率更高。版本选择上eCPRI解析器在Wireshark 3.2以后已经内置但4.x版本对eCPRI的时戳显示、VLAN嵌套、PTP协议协同解析支持更好建议直接用4.0以上版本。至于CPRI情况比较特殊Wireshark没有官方CPRI协议解析器因为CPRI本身不是以太网协议标准pcap格式里没有对应的数据链路类型。你抓到的裸光口bit流需要先做格式转换或者用第三方离线分析脚本这个在下一章重点展开。3. CPRI帧结构逐层拆解3.1 基本帧、超帧与无线帧的三角关系CPRI的帧结构是固定的三层基本帧、超帧、无线帧。基本帧时长260ns对应3.84MHz采样时钟包含16字节第1字节是控制字后面15字节是IQ数据区。256个基本帧组成一个超帧时长66.56us150个超帧组成一个无线帧时长正好10ms。这套层级关系和LTE/NR的无线帧结构对齐目的就是让前传的采样数据能精确对应到时域资源上。为什么三个层级都对齐无线帧因为前传承载的是物理层采样数据接收端必须知道每个IQ数据对应无线帧的哪个时隙、哪个符号。控制字里携带的超帧号HFN和基本帧号BFN就是这个“地址索引”。理解了这个三角关系后面看Z字段就很容易了Z.0是同步字Z.1.x是慢速CM信道Z.2是快速CM信道Z.3是L1带内协议还有厂商自定义区。3.2 控制字与IQ数据的比特级映射基本帧的第一个字节就是控制字这是CPRI解析的关键入口。所有控制字按超帧顺序排列256个基本帧的控制字合起来构成一个250字节的控制字块里面的每个子字段都有固定地址。Z.0是同步字节固定是0x50接收端靠它实现帧头锁定Z.1.0到Z.1.3传输慢速CM链路信令用于设备管理和OAMZ.2是快速CM链路用于对时延敏感的控制信令Z.194、Z.195等厂商区可以自定义传递私有信息。IQ数据区的基本单位是“基本帧的后15字节”也就是120bit。这些bit怎么转化成IQ采样取决于天线数、采样率和IQ位宽。以LTE 20MHz、2T2R、16bit IQ为例每个天线每载波每采样需要32bit一个基本帧的IQ区被划分成多个时隙按天线和载波复用排列。实际做解析时如果能把某个采样点对应的天线号、载波号解出来那基本就把CPRI的静态映射规则吃透了。3.3 用Wireshark看CPRI没有官方解析器怎么办因为CPRI不是以太网协议Wireshark主界面不会自动识别。你得到的pcap文件内容看起来就是一堆“Unknown”数据。实操中一般两种路径解决第一种是离线数据提取。抓包后导出原始字节用Python脚本按“16字节基本帧”遍历找到0x50同步字后对齐超帧边界再把控制字和IQ数据字段解出来。这种方式适合做离线深度分析比如验证IQ数据是否正确映射、检查同步字是否周期出现。核心代码思路很简单读文件、逐字节滑动找0x50、以16字节对齐帧、再按控制字地址解析。第二种是在Wireshark里用Lua写自定义解析器挂在数据链路层上。Lua脚本根据以太网类型字段或者光口探针附加的元数据把CPRI帧拆出控制字和IQ数据。这种方式好处是能直接在Wireshark的协议树里看到解析结果配合过滤器使用很方便但需要对Lua API有一定了解。我的建议是先跑通Python离线解析把字段语义搞明白再写Lua挂在Wireshark上这样调试成本最低。4. eCPRI消息类型与帧结构实操4.1 eCPRI通用头部8字节里藏着什么eCPRI最基本的头部固定8字节拆开来看包含这些字段字段比特数说明Protocol Version4 bit协议版本当前固定为0Reserved3 bit保留字段发送端填0Concatenation1 bit串联标志1表示后面还有PC_id和Sequence_idMessage Type8 bit消息类型决定负载内容Payload Size16 bit负载字节数不含头部Concatenation标志是抓包分析时特别容易忽略的点。当某条上层消息过大、被拆成多个eCPRI消息传输时每个切片都要带串联信息头部会从8字节扩展到12字节多出PC_id和Sequence_id各16bit。PC_id标识物理通道Sequence_id标识同一通道内的消息序号。在Wireshark里看到ecpri.concat 1的包时要注意按这两个字段把逻辑上属于同一条消息的切片分组重组否则统计出来的消息条数会是错的。4.2 常见消息类型与Split选项的关系eCPRI定义了多种消息类型最常用的是前几个类型0是IQ Data承载实际的采样数据占前传流量绝大多数类型1是Bit Sequence承载比特级数据流类型2是实时控制数据用于RU和DU之间低时延信令类型3是通用数据传输类型4是远端内存访问用于设备调试和配置。类型5是单向时延测量类型8是IO时延测量这两个专门服务于同步和时延校准在纯以太网承载的前传网络里必不可少。IQ数据到底怎么传关键看Split点。Split 8就是传统CPRI方式RU侧完成全部物理层功能eCPRI只把IQ数据换个以太网容器搬过去带宽没有本质下降。Split 7.2则把部分物理层功能留在RUIQ数据在频域传输带宽大减。你在Wireshark里看到载荷大小、消息间隔都符合预期但带宽始终降不下来大概率是Split点配置偏向了物理层下移。4.3 Wireshark中eCPRI解析与过滤实战用Wireshark 4.0打开前传pcap文件正确识别后直接能在协议树里看到ecpri字段。常用的显示过滤条件我整理了一下ecpri.message_type 0只看IQ Data消息排除所有控制类消息快速评估用户面占比。ecpri.payload_size 1000筛出大负载包前传IQ消息通常都是大包。ecpri.concat 1找到所有串联消息配合PC_id、Sequence_id分析切片重组。ecpri.protocol_version ! 0过滤协议版本异常的消息一般出现这个就要怀疑对端设备版本是否匹配。实际操作中抓包时建议同时开启微秒级时间戳精度显示View - Time Display Format - Seconds Since Previous Captured Packet / Seconds Since Beginning of Capture观察消息到达间隔和时延抖动。这个习惯在排查时延类问题时非常关键很多前传异常是“包都到了只是间隔不均匀”导致的光看平均值根本发现不了。5. 从CPRI到eCPRI迁移的关键考量5.1 带宽需求量化对比一组看得见的数字用一个典型例子量化对比。LTE 20MHz、2T2R场景单天线采样率30.72Msps16bit IQ数据每天线数据率约983.04Mbps两根天线接近1.97Gbps加上控制字和8b/10b线路编码正好落在CPRI Option 3也就是2.458Gbps这个档位。到了NR 100MHz、64T64R如果按CPRI整搬IQ的思路光裸数据就在100Gbps量级直接超过常规光模块承载范围这种场景下CPRI模式基本不可行。再看eCPRI在Split 7.2x下的效果。同样的100MHz、64T64R场景RU侧先完成FFT和资源映射前传只需要传输频域资源数据典型带宽能控制在10到25Gbps。如果再叠加IQ采样压缩比如8bit或更低位宽带宽还可以进一步降低。这就是为什么5G中后期的前传方案几乎一边倒选择了eCPRI——不是CPRI实现不了是它的物理层确定性换来的带宽代价在高维度MIMO下太奢侈了。5.2 同步机制与时延预算差异两者的同步机制完全不同。CPRI一路有专用物理时钟接收端从线路码流恢复参考时钟天然就能拿到频率和相位时延固定且不依赖网络协议。eCPRI跑在以太网上频率同步必须靠SyncE同步以太网时间/相位同步必须靠IEEE 1588 PTP精确时间协议并且eCPRI专门定义了单向时延测量消息用于测量前传网络段的传播时延。这个差异带来一个很现实的问题eCPRI前传网络里的每个网元都必须同时支持SyncE和1588如果中间接的是不支持边界时钟或透明时钟的普通交换机整个前传网络的时间同步就会崩溃。排查这类问题时Wireshark里看PTP协议族的 Announce、Sync、Follow_Up 报文是否周期性到达是判断同步链路健康度的第一手段。看到PTP Sync报文跳变超过100ns基本可以断定中间设备时钟处理有问题了。5.3 部署迁移中的选型建议规划新建前传网络时我的建议是“按Split点反推设备选型”。如果RU和DU之间是点对点光纤带宽预算也充足保守方案可以继续跑传统CPRI并升级高线速光模块如果前传网络有汇聚、需要接入现网以太网基础设施或者多个RU要共享承载资源就选eCPRI。另一个容易被忽略的点是版本匹配。eCPRI协议本身版本目前维持在0但各家设备对消息类型、Split能力的支持差异很大。实验室验证时提前和后端确认RU侧的eCPRI协议版本、时延测量报文是否周期发送、支持哪些消息类型很多现场故障都出在版本匹配上而不是协议理解上。6. 常见问题与排查技巧实录6.1 Wireshark分析前传协议的高频问题速查现象可能原因排查建议Wireshark里看不到ecpri协议树版本过低、报文在VLAN内、以太网类型未识别升级到4.x用vlan过滤条件检查抓包网卡是否配置了正确的VLAN offload抓到eCPRI包但CRC错误多分光器插损大、光纤链路误码、光模块灵敏度不足检查光功率和误码率替换光模块验证IQ Data消息占比异常低Split点配置错位、消息类型判断有误统计全部消息类型分布确认RU和DU两侧Split配置一致eCPRI串联消息顺序错乱跨链路抓包、PC_id/Sequence_id丢失、交换机对eCPRI切片配置了多路径转发用ecpri.pc_id和ecpri.seq_id过滤重组抓包点尽量收敛到单台设备上CPRI同步字节0x50抓不到抓包入口不是物理层、分光位置错误、光电转换后bit流被截断确认探针输出的是完整bit流而不是已经解码或降速的数据pcap里每个包只能看到前面几百字节抓包时snaplen设置太小报文被截断抓包时把抓包长度设成0全量捕获或至少大于最大帧长回放时也需要确认pcap保留的是完整帧6.2 几个实操中的避坑细节抓前传包不要用USB转千兆网卡前传口速率高网卡本身必须支持10G/25G以上否则丢包会非常严重。特别是25G eCPRI流量很多号称“万兆”的消费级网卡实际只能跑到线速的60%到70%抓到包的数量比实际流量少一个数量级只是你不知道而已。使用分光器时会引入插入损耗短距离传输问题不大长距离链路要提前用光功率计验证。另外一个经验是长时间抓包之前先设置好Wireshark的环形缓冲Capture Options - Ring Buffer比如每2GB一个文件、最多保留20个文件。前传接口的流量极高100Gbps峰值流量下几秒钟就能写满几十GB磁盘不做约束很容易把抓包机的磁盘写爆导致后续分析文件损坏。还有一个我踩过几次的坑eCPRI前传里同一对源目MAC地址下可能同时跑着多个逻辑通道PC_id不同。如果你只按源目IP或MAC过滤统计出来的吞吐量可能是正确的但按消息类型或按通道统计时会把几个逻辑通道混在一起。稳妥的做法是同时用ecpri.pc_id字段做过滤把每个物理通道拆开看。另外分析时别只盯着平均值建议用Wireshark的IO Graph按时间粒度观察吞吐曲线和消息到达频率。前传故障很多是间歇性的平均带宽正常但每几毫秒就会出现一次大的时延尖峰或丢包这种问题只有看时间曲线才能发现。在消息长度分析上也要留个心眼。有些设备为了对齐128字节边界会在eCPRI负载后面填充一段无效数据Wireshark解析时会把填充字段算进报文长度导致你看到的Payload Size和实际有效数据不一致。对比多个RU的数据格式后才能判断是填充还是真正的业务数据。用这套流程我调过好几个前传故障最大的体会是CPRI的帧结构虽然老但理解了它之后再回头读eCPRI会省力很多因为eCPRI只是换了承载容器IQ数据的语义并没有发生根本性变化。刚开始接触的朋友建议先从离线pcap文件练手用脚本把CPRI同步字和eCPRI消息类型统计一遍再上真实抓包环境。踩过几次分辨率不够、过滤条件不对的坑之后你会发现前传协议分析并没有想象中那么难关键是把帧结构、消息类型和Split点这三个概念串起来Wireshark的协议树只是帮你把那层窗户纸捅破而已。
返回列表