尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

通信协议中的超帧:从SDH S1字节到LTE H-SFN的周期嵌套设计

通信协议中的超帧:从SDH S1字节到LTE H-SFN的周期嵌套设计 做传输和无线接入的工程师对 frame 这个词再熟悉不过。但第一次在 SDH 分析仪上看到 Hyperframe 这个字段时不少人会愣一下帧之上有多帧多帧之上还有个超帧这层层套娃到底图什么后来在 LTE 的 eDRX 参数表里又遇到 H-SFN才意识到超帧不是某个厂商的私有名词而是通信协议里一种非常普遍的设计手法。这篇文章就把 hyperframe 这个概念讲透它到底解决什么问题、周期怎么算、调测时怎么判断它工作是否正常以及我在现场踩过哪些坑。适合刚接触传输网、核心网和无线接入的新人也适合那些一直会调设备但没仔细抠过开销字节的老工程师。1. 超帧是什么为什么协议非要层层嵌套1.1 用“年历”类比帧是日多帧是月超帧是年理解超帧最简单的方式是把它想象成日历。一帧数据就像一天125 微秒一帧一秒 8000 帧这是 SDH 世界里雷打不动的基本节拍。但有些信息一天传不完怎么办那就弄一个“月”把 16 天打包成一个多帧。还有的信息一个月都不够表达完整状态于是再把 16 个多帧打包成一年这就是超帧。这个类比不是强行套协议栈确实是这么设计的。以 SDH 为例STM-1 的一个帧是 125 微秒16 个帧组成一个多帧16 个多帧组成一个超帧。也就是说一个超帧就是 256 个基本帧周期 32 毫秒。很多刚接触开销字节的人不理解为什么一个 S1 字节要放在超帧里读才有意义单独抓一帧看不出来因为它的有效信息被故意分散在多帧和超帧的多个字节里单看一帧只是碎片。无线侧也有同样的思路。LTE 里 SFN 系统帧号取值范围是 0 到 1023循环一次 10.24 秒。但 eDRX 这种低功耗特性要把终端的监听周期拉长到几十秒甚至小时级10.24 秒的循环明显不够用于是引入 H-SFN 超帧号10 个比特把时间量程放大 1024 倍循环周期变成约 2.9 小时。这不就是“月”和“年”的关系吗。1.2 超帧要解决的核心矛盾开销有限状态却要持续传递为什么不能直接把帧做大一点或者单独开一条低速通道传这些状态信息这就是当时设计者面临的现实约束。帧结构是定死的开销字节就那么多每个字节都要精打细算。以 SDH 的 S1 字节为例它只有 4 个比特用于传递同步状态等级 SSM而同步状态等级在 ITU-T 标准里定义了从 PRC 到不可用等好多档还要带倒换状态、边沿指示这类附加信息单靠一个字节根本表达不完。超帧解决这个问题的方法不是扩字节而是扩时间。把 16 帧里同一个位置的字节串起来看每个帧贡献一部分信息合起来就组成一条完整消息。这很像老式电报的“字位复用”一次传不完就分多次传接收端凑齐一串之后再做完整性校验。状态信息不需要纳秒级实时它本来就是慢变量用几十毫秒的周期去更新完全够用所以把传输周期拉长把信息分摊到多个帧里是最划算的做法。这个思路在无线侧更明显。LTE 的 SFN 是 10 比特靠它寻址 1024 个无线帧这是保证 UE 和基站时间对齐的基础。真要支持几个小时的长周期 DRX就得把“帧号不够用”这个问题解决掉但为了一个寻呼周期去改物理层帧号长度改动太大。折中方案就是在 SFN 之上再造一层 H-SFNSFN 管 10.24 秒内的事H-SFN 管 2.9 小时内的事两层嵌套老协议不用动新特性照样跑。1.3 超帧在几个主流技术里的位置先看 SDH/SONET 这条线。SDH 里的超帧主要用于承载同步状态消息 SSM核心位置是再生段开销中的 S1 字节。需要注意的是SONET 里对应的结构叫扩展超帧帧数量是 SDH 的 4 倍做法细节有差异但设计哲学完全一致。很多支持 SDH/OTN 的测试仪表开销分析界面里都有专门的“S1/SSM”子页面选中超帧视图之后才能看到完整的 SSM 消息队列。再看 LTE/NR 这条线。LTE 里 H-SFN 最典型的使用场景是 eDRX 和某些定位技术。eDRX 引入之后终端可以配置很长的寻呼周期而寻呼超帧 PH 的计算就依赖 H-SFN 值不同运营商、不同小区之间的 H-SFN 如果没有对齐终端的寻呼窗口就会对不上网络侧实际下发寻呼的时刻。到了 5G NR 时代超帧思想被继承下来H-SFN 机制在 NB-IoT 和 LTE-M 这类低功耗场景里用得尤其多。还有一个容易混淆的名字要提前说清楚网络领域里有个叫“Jumbo Frame”的东西中文常被翻译成“巨型帧”它只是把以太网单帧从 1518 字节撑到 9000 字节跟超帧不是一回事。另外视频领域也有一个叫 HyperFrame 的商业产品做多视角视频拼接的名字一模一样但技术路线差异很大网上搜资料时注意区分。2. 核心细节超帧的字节级结构与周期计算2.1 SDH 超帧S1 字节和 SSM 是怎么装进 16 帧里的SDH 的帧结构分再生段开销 RSOH、复用段开销 MSOH 和管理单元指针。S1 字节位于 MSOH 区域具体位置是 STM-1 帧的第 11 行第 9 列这个位置在 STM-N 里会被重复 N 次每个 STM-1 对应一个 S1。S1 字节的低 4 位是 SSM 信息位高 4 位目前标准里没有强制统一多数厂家实现里保持固定填充。只看一帧的 S1你只能看到 4 个比特整个同步质量等级是装不下的。协议规定用 16 个连续帧的 S1 字节组成一个超帧结构在这个超帧周期里逐帧传递完整消息。用工程化语言说就是 16 个 S1 字节构成一组编解码序列接收端必须完整收取 16 个 S1 字节后才能正确解出 SSM 等级和附加状态。这个机制有一个很实际的影响如果链路误码导致某个 S1 字节坏了整个超帧的 SSM 消息就解不出来设备会判定同步质量恶化。所以排查 SSM 问题时不要只盯单个字节的误码率要看连续 16 个 S1 字节的完整性和一致性。这一点很多人容易忽略只看仪表上的“S1 字节计数”就以为没问题实际上超帧没有对齐。2.2 S1 超帧周期计算125 微秒 × 16 2 毫秒为什么选 16我们直接算一遍。SDH 基本帧周期是 125 微秒也就是 8000 帧/秒。16 个帧组成一个超帧所以超帧周期是[ 16 \times 125 \mu s 2000 \mu s 2 ms ]这样一个 SSM 消息每 2 毫秒完整传递一次。同步质量等级变化本质上是很慢的2 毫秒的刷新率已经非常奢侈完全满足生成树、同步链路状态倒换这类应用的需求。那为什么选 16 而不是 8 或者 32核心原因是 SSM 消息本身需要承载的状态组合数量决定的。SSM 的低 4 位可以表示 16 种状态而协议所需的同步质量等级加上保留状态、不可用状态正好落在这个量级范围内。把 16 个 S1 字节串成一个超帧每个字节贡献一次编码结果16 次采样足够接收端做多数判决和校验了。这里要提醒一点S1 字节的低 4 位编码和使用方式在 ITU-T G.781 里有明确定义不同厂家的设备实现上可能略有差异但超帧长度是标准的16 帧一循环调测时不要因为仪表显示“multi-frame”还是“hyperframe”产生疑惑本质上是一回事只是不同厂家对术语的叫法不同。2.3 LTE/NR 的 H-SFN10 比特超帧号怎么算出约 2.9 小时的循环周期LTE 里普通 SFN 是 10 比特取值 0 到 1023一个 SFN 循环是 1024 个无线帧每帧 10 毫秒所以[ 1024 \times 10 ms 10.24 s ]H-SFN 也是 10 比特取值 0 到 1023但它每一个单位对应一个完整的 SFN 循环也就是 10.24 秒。所以 H-SFN 的完整循环周期是[ 1024 \times 10.24 s 10485.76 s \approx 2.91 h ]这个 2.91 小时就是 LTE 超帧的循环量程。NB-IoT 里 eDRX 周期最大可以拉到接近这个量级的程度可以达到 2.91 小时附近终端的寻呼监听间隔可以做到非常省电代价是寻呼到达时延变长。实际组网中H-SFN 由 eNodeB 维护并通过系统消息或专用信令告知终端。在 eDRX 场景下核心网侧的移动性管理和寻呼协调逻辑也要能理解 H-SFN否则网络下发寻呼的时间点和终端醒来的时间点对不上。5G 系统里类似机制继续保留很多做物联网模块的人说“唤醒窗口对不上”查到最后往往是 H-SFN 的配置不一致而不是射频覆盖问题。2.4 其他容易见到的超帧形态除了 SDH 和 LTE业界还有几种“超帧”容易遇到。一种是 OTN 开销区的复帧结构OTN 里有些管理字节也是靠多次重复传递来凑齐完整消息。另一种是 DPDK 里处理高速网络抓包时遇到的“超大包”还有厂家交换芯片内部用“超帧”描述聚合调度周期这些本质上都是在一个基础周期上叠加长周期来承载慢变化信息。我在现场最常被问到的一个问题是既然超帧负责慢信息那快信息怎么办答案是快信息走专用字节或专用通道各干各的。SDH 里 D1-D3 字节用于 DCC 管理通道那是数据通道不受超帧约束LTE 里控制信息走物理下行控制信道 PDCCH也不需要等 H-SFN。超帧只服务于那些需要周期性更新但实时性要求不高的状态类信息这一点想清楚整个设计就顺了。3. 实操从仪表抓帧到配置参数一步步看懂超帧3.1 实操一SDH 分析仪上观测 S1 字节的超帧变化先说环境。我常用的做法是把 SDH 分析仪串接在线路侧设置仪表工作在开销监测模式锁定 STM-N 信号后进入开销字节页面找到 MSOH 区域的 S1 字节。第一步先把仪表视图切换到“超帧”或“扩展超帧”很多仪表默认显示的是单帧开销这时 S1 只会显示当前帧那个时刻的 4 个比特值意义不大。切成超帧视图后仪表会连续采集 16 帧把 S1 字节序列列出来。第二步看所有 16 个 S1 的低 4 位是否满足完整编码序列。正常锁定时你会看到一个稳定重复的序列就像一串按规则变化的码型。如果序列里有跳变、错位说明链路开销传输有问题。第三步在仪表上修改服务层信号或者用另一个仪表从对端注入一个不同的 SSM 等级观察当前超帧序列是否在 2 毫秒内刷新成新值。这个操作能验证超帧传的不是静态数据而是实时更新的状态消息。动图级的观察方式也能用用示波器探针配合足够带宽的采集把 S1 字节对应的接收使能信号和 8kHz 帧脉冲一起抓下来数到第 16 个帧脉冲时能看到一次序列归零这就是超帧边界。日常工程里不推荐这么干只有怀疑仪表本身对超帧边界判断有问题时才这么较真。3.2 实操二在端到端链路里追查 SSM 质量等级变化SSM 信息有个特点它要沿着同步链逐跳传递中间节点的处理方式会直接改变超帧里装的内容。我在一个项目里遇到的情况是上游设备下发的是 PRC 等级但下游网管里看到的 SSM 却显示“不可用”。排查方法是逐段断开。先把下游段与上游段断开用一个能产生标准 SSM 的仪表代替上游设备直接发给被测设备看设备能否正确解析。如果仪表发标准序列没问题说明问题在两台设备之间的开销字节处理上。再进一步要看中间设备有没有修改 S1 字节。有些老设备在时钟源降级时会自动把 SSM 等级改成“未知”然后在超帧的某个特定位置插入标记。这个行为单看一帧根本看不出来因为单帧里只有 4 位必须保存足够长的时间连续观察多个超帧周期的变化趋势才能判断是偶发跳变还是设备主动降质。我自己习惯用的方法是用分析仪的“开销捕获”功能记录 1 秒以上的 S1 字节历史。1 秒内有 500 个超帧周期足够看出现测点的问题模式如果是持续乱码多半是线路误码或光模块问题如果是规律性插入低等级值多半是设备逻辑判断问题如果只是上电瞬间有一次错位大概率是倒换或重启引起的短暂扰动。3.3 实操三LTE/NR 侧 H-SFN 与 eDRX 调度窗口计算无线侧的“实操”更多是配置理解和参数核对不像传输网那样拿仪表怼光口。最常见的场景某 NB-IoT 水表终端上报周期特别长每天只醒来几次但后台统计发现寻呼成功率偏低终端时不时漏听。第一步先从网管把小区配置拉出来查 eDRX 周期参数业界常用参数是 T_eDRX。比如配置为 2621.44 秒换算成无线帧就是 2621.44 / 0.01 262144 个射频帧。这个数值远超普通 SFN 的 1024 帧循环所以必须用超帧来标定。第二步查 PH 寻呼超帧偏移。终端计算自身寻呼时刻时会用到 H-SFN、PH、PF、PO 这四层信息。网上很多算法文章只讲 PF 和 PO把 H-SFN 维度漏掉结果算出来的寻呼窗口跟基站对不上。第三步确认基站与核心网侧对 H-SFN 的起始点理解一致。多数设备会把 H-SFN 0 对应到 SFN 循环开始的时刻协调逻辑由基站侧完成但如果你把终端日志打开看到“H-SFN mismatch”或者“PTW start outside”这类日志就要优先怀疑基站配置和 SIM 卡签约参数不一致。我还做过一个对比实验把终端固定在信号极好的位置分别配置 eDRX 周期 20.48 秒和 2621.44 秒用测试软件记录终端寻呼接收时刻。前者每 20.48 秒醒一次接收时间点固定后者如果按配置算好 PH理论上也固定但一旦基站侧 H-SFN 有累计偏移几天后就会发现终端醒来的时刻跟网络寻呼下发时刻漂开了。这种慢漂移最坑人因为单次测试根本测不出来必须拉长观察窗口。3.4 实操四用抓包软件解析超帧相关协议字段传输方向的 SSM 和无线方向的 H-SFN 都能用软件辅助分析。SDH 侧很多仪表能导出开销字节的历史记录到 CSV 文件我用脚本对 S1 字节做序列比对快速找出 16 帧周期的循环规律。无线侧更简单一些开终端日志抓 RRC 消息里面的 SystemInformationBlockType2 和 IdleModeMobilityControlInfo 字段里会带 eDRX 周期和寻呼时间窗参数。H-SFN 本身往往不直接出现在 RRC 消息里但终端醒来时会上报当前帧号差结合上报时间和漂移量能反推 H-SFN 的同步状态。常见的数据分析套路把终端每次醒来上报的时间点画成散点图正常情况下应该呈现等间距竖线如果在长时间范围内有明显斜率漂移高度怀疑超帧级时间基准失步。把 PTW 的起始位置与网络侧计算的理论值做差差值稳定在一个很小的范围内说明同步正常差值逐渐增大说明两端时间基准存在累计偏差。同时记录小区重选和 Ta 更新事件排除终端因为移动导致的小区时钟差异。这些方法不依赖昂贵仪表一台能开飞行日志的终端加一个数据分析脚本就能做适合在项目预研阶段或者现场割接前做快速健康度检查。4. 常见问题与排查技巧实录4.1 SSM 等级读不出来或反复跳变这个现象通常出在几条 SDH 链路级联的场合。网管上看到某网元的 SSM 状态在 PRC 和不可用之间来回跳频率大约几百毫秒一次。我当时的排查思路是先问一个问题是只有这一个网元跳还是整条链路上所有网元都在跳如果只有末端跳大概率是末端网元接收 S1 字节时超帧对齐丢失。如果整条链路都在跳问题往往出在源头或中间某台设备主动插入劣化等级。把仪表接到跳变网元的输入口观察 S1 字节序列。正常情况下应该看到一个稳定重复的 16 帧码型。我看到过一次序列在两组码型之间来回切换那是因为上游设备在两个时钟源之间频繁倒换每次倒换都修改 SSM 消息的附加状态位到达下游时超帧还没收满状态就变了。处理方案分两步先查上游时钟源配置消除倒换源如果只是下游设备敏感可以把 SSM 失效判决时间适当调长避免频繁上报。这类问题不属于射频问题属于状态机时序问题调测时要把观察窗口拉长到秒级不要只看瞬时值。4.2 H-SFN 不同步导致的寻呼时间窗偏移无线侧我遇到最多的是两类一是新开站和周边站 H-SFN 没有对齐二是核心网寻呼时延和基站寻呼时刻存在偏差导致终端醒来但寻呼消息还没到。排查第一步先看基站告警里有没有时间同步告警。如果基站开了1588v2或北斗时频同步但时间精度劣化H-SFN 的计数起点就会不一致。第二步对比同一 TA 下不同小区发给终端的寻呼时刻实际值用测试卡在小区边缘做寻呼测试记录 PTW 起点如果发现相邻小区间的 PTW 起点差异大于一个无线帧周期基本可以锁定超帧不同步。解决办法说简单也简单重新触发基站时间同步让 H-SFN 和绝对时间对齐即可。但现场更隐蔽的是那种“基站同步正常只有某个小区配置错误”的情况这时要检查小区级参数里有没有独立的 H-SFN 偏移配置有的设备支持在小区级加偏移用于错开寻呼高峰一旦配错就会导致该小区超帧基准异于邻区。4.3 eDRX 功耗没有下降反而上升这个现象很反直觉但确实有。配置了长 eDRX 周期后终端功耗反而涨了原因大概率是终端实际没有进入 eDRX 长周期而是在每个普通 DRX 周期都醒一次或者 PTW 窗口设置过长导致长时间保持接收机开启。我见过一份终端日志配置显示 eDRX 周期 655.36 秒但物理层每隔 1.28 秒就做一次寻呼检测。翻看 RRC 重配置消息发现 eDRX 参数确实下发成功但终端的寻呼时刻计算用错了 H-SFN 比例因子把超帧号按 SFN 号直接用了结果醒来周期比预期短了几百倍。这种问题靠网管很难看出来必须解码终端日志或者用协议分析仪抓空口。排查时先确认终端是否有正确读取系统消息里的 eDRX 参数再确认终端在计算寻呼窗口时使用的 H-SFN 值是否和网络一致。很多 NB-IoT 模组的日志接口都能打印醒来的原因和计算出来的 PH拿到这些日志比在网管上猜要高效得多。4.4 容易混淆的概念复帧、超帧、巨型帧、扩展超帧我整理了一张速查表适合贴工位上新人问的时候直接发给他名称出现位置周期/长度核心用途SDH 基本帧SDH/SONET125 微秒STM-1 2430 字节承载净荷与开销SDH 多帧SDH/SONET16 个基本帧2 毫秒SSM 消息的基础载体SDH 超帧SDH/SONET16 个多帧32 毫秒扩展 SSM 附加状态SONET 扩展超帧SONET64 帧8 毫秒对应承载 SSM 消息序列LTE H-SFNLTE/NB-IoT1024 个 SFN 循环约 10485.76 秒扩展长周期寻呼时间基准巨型帧 Jumbo FrameEthernet最大 9216 字节左右减少帧数、降低 CPU 开销视频 HyperFrame视频处理不固定与帧组相关多视角视频帧组编码这里要特别提醒千万不要把一个 SDH 多帧当成超帧。我有一个项目里仪表上显示“multiframe SSM”时 SSM 已经能正常读出但网管上却显示等级不对后来发现是我这边把 S1 字节的完整消息长度看错了SSM 的完整消息虽然在一个多帧周期内已经足够读取但某种附加状态必须要超帧长度才能读取。两个概念一字之差排查路径完全不同。5. 超帧思想在协议设计里的通用价值5.1 周期嵌套是一种“协议妥协”的工程智慧从 SDH 到 LTE超帧反复出现的根本原因是协议设计者在“不能动基础帧结构”和“需要更长周期”这对矛盾里做了妥协。基础帧结构被大量硬件实现绑定改一帧长度等于推倒重来成本极高。而超帧只是逻辑上的组合接收端把多个基础帧聚合起来解析即可硬件改动极小。这个思想值得所有做嵌入式协议或者软件通信架构的人认真领会。当你发现现有消息结构装不下更多状态信息时第一反应不应该是重新定义帧格式而是考虑能不能在现有帧之上加一层逻辑聚合周期。很多看似复杂的问题用“周期嵌套”都能优雅解决而且兼容性最好。我这些年观察下来设计通信协议时最容易犯的错误是“一次把所有事情都定义到单帧里”导致单帧结构无比臃肿处理性能下降。超帧思想恰恰提醒我们把快速变化的字段放在基本帧把慢速变化的字段放到多层聚合周期里各归其位系统的整体效率才最高。5.2 什么时候该设计超帧而不是直接加长单帧有一个判据可以帮助判断一个场景适不适合用超帧这个信息的传输实时性要求是不是大于一个基础帧周期如果信息允许在几十毫秒甚至秒级完成一次更新而且状态数量有限超帧几乎是首选方案。如果信息要求每个基础帧周期内都完整可见那就不能依赖超帧必须扩单帧字段或者增加专用通道。另外一个判据是接收端的处理能力。超帧要求接收端必须缓存多个基础帧才能还原完整消息这会增加一小块内存和状态跟踪逻辑。在一些极简硬件上如果连一个超帧周期的缓存都舍不得那就只能退而求其次用单帧里几个比特直接编码主要状态牺牲一点扩展性。从工程实现的角度超帧还有个好处天然抗突发误码。因为完整消息分布在多个帧里单帧损坏不一定导致整个消息失败接收端可以用多数判决恢复。这一点在设计长周期状态传输时很有用比如同步状态、设备健康状态、链路质量等级这类信息用超帧承载比单帧承载健壮得多。6. 再聊几句个人经验做了这么多年传输和无线网络优化我看超帧这种结构最大的体会是协议里没有一个字段是白白设计的那些看起来“重复”“冗余”的字节往往才是保证系统长时间稳定运行的关键。S1 字节单看一帧毫无意义但放到超帧的视角里它就是整条同步链路的“脉搏”。最后分享一个实用小技巧调测任何带超帧机制的协议时先抓一段足够长的原始数据再去数周期不要凭仪表默认显示下结论。仪表只会告诉你它认为的超帧边界在哪里而边界对不对必须回到原始码流里验证。我当时排查 SSM 问题就是靠把 1 秒内的 S1 字节历史导出来画成矩阵图自己找到了 16 帧的循环边界才确认仪表没有误判。另外一个经验是现场遇到“间歇性”“偶发性”状态类故障优先怀疑超帧层的完整性而不是基础帧的误码。误码率很低不代表超帧完整因为超帧要求的是连续多个帧开销字节保持一致只要中间有一帧的填充逻辑不同整条消息就废了。把这个思路记在脑子里能省下大量抓包和复位的时间。
返回列表