第4章 传输汇聚(TC)层核心:GTC帧结构详解

各位同学,今天我们来啃一块硬骨头——GTC帧结构。

说实话,当年我第一次接触GPON协议栈时,最头疼的就是这个帧结构。一堆缩写:PCBd、PSBd、DBRu……看着就头大。但后来我发现,只要搞懂了这三个东西,TC层基本就通了八成。

4.1 什么是GTC帧?

GTC帧,全称GPON Transmission Convergence帧。说白了,它就是GPON系统里数据搬运的“集装箱”。

OLT和ONT之间要通信,总得有个规矩吧?这个规矩就是GTC帧。它规定了:

  • 什么时候发数据
  • 数据长什么样
  • 谁该在什么时候收

我习惯把GTC帧比作一列火车。火车有车头(帧头)和车厢(净荷)。车头告诉车站“我来了”,车厢里装的是真正的货物——用户数据。

核心要点:GTC帧分为下行和上行两个方向,结构完全不同。下行是“广播”,上行是“时分复用”。

4.2 下行帧结构:PSBd + 净荷

下行帧,就是OLT发给所有ONT的数据包。注意,是所有ONT都能收到,但只有匹配的ONT才会处理。

4.2.1 PSBd(Physical Synchronization Block downstream)

PSBd是下行帧的“火车头”。它包含以下关键字段:

字段 长度(字节) 说明
Psync 4 物理同步序列,固定值0xB6AB31E0
Ident 4 超帧标识,用于帧计数
PLOAMd 13 下行PLOAM消息,用于管理
BIP 1 比特间插奇偶校验
Plend 4 净荷长度指示
US BW Map N*8 上行带宽映射,核心调度信息

嗯,这里要注意:Psync是ONT用来锁定下行帧的“钥匙”。ONT上电后第一件事就是找Psync。我在项目中遇到过,有些ONT因为晶振偏差大,Psync老是锁不住,最后发现是硬件设计问题。

4.2.2 下行净荷

PSBd后面跟着的就是净荷。净荷里装的是:

  • GEM帧:真正的用户数据,比如你的上网包、IPTV流
  • OMCI消息:ONT管理控制接口,用于配置ONT

下行帧长度固定为125微秒。不管有没有数据要发,OLT都会按时发送。这就像广播电台,24小时不停播。

避坑指南:我曾经在调试时发现,如果US BW Map分配不合理,某些ONT会一直拿不到上行时隙。后来我改用了动态带宽分配(DBA),问题才解决。

4.3 上行帧结构:DBRu + 净荷

上行帧是ONT发给OLT的数据。注意,多个ONT共享同一个上行通道,所以必须“排队”发。

4.3.1 DBRu(Dynamic Bandwidth Report upstream)

DBRu是上行帧的“小票”。它告诉OLT:

  • 我(ONT)还有多少数据要发
  • 我的缓存快满了,快给我分配时隙

DBRu结构很简单:

字段 长度(bit) 说明
DBRu 8 动态带宽报告,0-255
CRC 8 校验码

你想想看,如果ONT不报告自己的缓存状态,OLT就只能“盲猜”该给多少带宽。猜错了,要么浪费带宽,要么丢包。所以DBRu是上行调度的“眼睛”。

4.3.2 上行净荷

上行净荷包含:

  • GEM帧:用户上行数据
  • PLOAMu:上行PLOAM消息
  • 静默段:用于ONT之间的保护间隔

上行帧长度也是125微秒。但注意,每个ONT只能在自己被分配的时隙内发送。这就像学校食堂打饭,每个班级有固定的时间段。

重要提醒:上行帧的静默段不能忽略。如果两个ONT的时隙挨得太近,信号会碰撞。我见过一个案例,就是因为静默段设置太短,导致上行误码率飙升。

4.4 帧结构对比:下行 vs 上行

为了让你看得更清楚,我画了个对比表:

特性 下行帧 上行帧
发送方 OLT ONT
接收方 所有ONT OLT
帧头 PSBd(固定长度) DBRu(可选)
净荷 GEM帧 + OMCI GEM帧 + PLOAMu
调度方式 广播 时分复用(TDMA)
帧长 125微秒 125微秒

4.5 核心逻辑:GTC帧的“心跳”

为什么帧长固定为125微秒?因为GPON的时钟频率是8kHz,125微秒正好是一个周期。这就像人的心跳,稳定、规律。

我画了一张图,帮你理解整个流程:

GTC帧结构核心逻辑 OLT 下行帧 PSBd + 净荷(GEM + OMCI) ONT 1 ONT 2 ONT 3 上行帧(TDMA) DBRu + 净荷(GEM + PLOAMu) 时间轴(125微秒周期) 帧 n 帧 n+1 帧 n+2 帧 n+3

从这张图你可以看到:

  • OLT通过下行帧广播PSBd和净荷
  • 所有ONT都收到下行帧,但只处理属于自己的数据
  • ONT通过上行帧(带DBRu)向OLT发送数据
  • 每个ONT只能在分配的时隙内发送,避免冲突

4.6 实战中的坑

最后,分享几个我踩过的坑:

  1. Psync锁定问题:ONT上电后如果长时间锁不住Psync,先检查硬件时钟,再检查软件同步算法。我遇到过因为中断优先级设置不对,导致Psync检测超时。
  2. US BW Map解析错误:OLT下发的带宽映射,ONT必须严格按照协议解析。字节序、位偏移,一个都不能错。我曾经因为一个位偏移搞反了,导致ONT一直拿不到上行时隙。
  3. DBRu上报不及时:如果ONT的DBRu上报太慢,OLT会认为它没有数据要发,就不分配带宽。结果就是上行卡死。解决办法是缩短DBRu上报周期。

总结一下:GTC帧结构是GPON协议的基石。下行靠PSBd同步,上行靠DBRu调度。搞懂了这两个帧头,TC层你就掌握了80%。剩下的20%,就是各种细节和异常处理,这些我们后面章节会慢慢展开。


公众号:蓝海资料掘金营,微信deep3321