4. 测距与同步:RTT测量原理、同步时间戳机制、测距窗口管理

各位好,我是老张。今天咱们聊聊EPON里一个特别关键,也特别容易出问题的地方——测距与同步。

说实话,我刚入行那会儿,觉得EPON不就是个光纤以太网嘛,能有多复杂?直到第一次遇到ONU注册不上,抓包一看,全是时间戳错乱。嗯,从那以后,我再也不敢小看这个“测距”环节了。

4.1 为什么需要测距?

你想想看,EPON是一点对多点的结构。OLT在局端,ONU分布在几公里范围内。光信号在光纤里跑,1公里大概5微秒的延迟。

问题来了:如果两个ONU同时发送数据,OLT能区分吗?

答案是不能。因为光信号在光纤里会叠加,OLT根本分不清谁是谁。所以EPON采用了TDMA——时分多址。每个ONU只能在OLT分配的时间窗口里发送数据。

但这里有个坑:每个ONU距离OLT的物理距离不同,光信号来回的延迟也不同。如果不做测距,OLT分配的时隙就会错位。A ONU的数据还没到,B ONU就开始发了,冲突就发生了。

核心思想:测距的目的,就是让OLT知道每个ONU的往返延迟(RTT),从而精确补偿,让所有ONU在OLT看来“看起来”都在同一个距离上。

4.2 RTT测量原理

RTT,全称Round Trip Time,往返时间。说白了,就是从OLT发一个消息给ONU,ONU回一个响应,OLT计算这个来回花了多少时间。

具体怎么测?我习惯把它分成三步:

  1. OLT发送GATE消息:里面带一个时间戳,比如T1。
  2. ONU收到后,立即回复REPORT消息:REPORT里也带一个时间戳,是ONU本地收到GATE的时刻,比如T2。
  3. OLT收到REPORT:记录当前时间T3。

然后RTT的计算公式很简单:

RTT = (T3 - T1) - (T2 - T1_onu)

等等,这里有个细节。ONU回复REPORT时,并不是收到GATE立刻就能发出去的。ONU内部有处理延迟。所以实际计算时,需要减去ONU的响应时间。

我的经验:我在项目中遇到过,有些ONU芯片的响应时间不稳定,导致RTT测量值跳变。后来我们加了多次测量取平均的机制,才稳定下来。如果你也遇到RTT抖动,先别急着怀疑光纤,看看ONU的响应时间是不是有问题。

4.3 同步时间戳机制

RTT测量依赖时间戳。但OLT和ONU各自有独立的时钟,怎么保证时间戳是同步的?

EPON的做法是:OLT每隔2ms广播一个同步时间戳消息,叫MPCP Timestamp。ONU收到后,把自己的本地时钟调整到和OLT一致。

这里有个关键点:同步消息在光纤里传输也有延迟。所以ONU不能直接拿收到的值覆盖本地时钟,而是要加上传播延迟补偿。

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

OLT ONU 光纤(传播延迟) ① GATE (T1) ② REPORT (T2, T3) OLT时间轴 ONU时间轴 T1 T3 T2 传播延迟 传播延迟 RTT = T3 - T1 - 处理延迟

你看,OLT在T1时刻发出GATE,ONU在T2时刻收到,然后ONU在T3时刻回复REPORT。OLT收到REPORT的时刻是T4。RTT就是(T4 - T1)减去ONU的处理时间(T3 - T2)。

注意:ONU的处理时间必须精确已知,否则RTT测量会不准。我曾经遇到过一款ONU芯片,它的处理时间随温度变化,夏天和冬天差了好几个微秒。后来我们加了温度补偿算法才解决。

4.4 测距窗口管理

测距不是一次性的。ONU在运行过程中,温度变化、光纤老化、甚至风吹导致光纤微弯,都会改变传播延迟。所以EPON需要周期性地重新测距。

但问题来了:测距需要OLT和ONU交互,这会占用带宽。怎么平衡精度和效率?

EPON的做法是:

  • 初始测距:ONU刚注册时,做一次完整测距,得到初始RTT。
  • 周期测距:每隔几秒到几十秒,做一次快速测距,只更新RTT的微小变化。
  • 事件触发测距:如果OLT发现某个ONU的接收功率突然变化,或者误码率升高,会主动触发一次完整测距。

这里有个概念叫“测距窗口”。OLT会为每个ONU维护一个时间窗口,在这个窗口内,ONU可以发送数据。窗口的起始位置,就是根据RTT计算出来的。

测距类型 触发条件 精度要求 频率
初始测距 ONU注册 ±1μs 一次
周期测距 定时器 ±0.1μs 每5-30秒
事件测距 链路异常 ±0.5μs 按需

我的建议:周期测距的频率不要设得太高。我见过有人设成每秒一次,结果OLT的CPU占用率飙升,反而影响了正常业务。一般来说,10秒一次就足够了。如果环境温度变化大,可以缩短到5秒。

4.5 避坑指南

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

  • RTT跳变:如果RTT突然跳变几十微秒,先检查光纤连接器是不是松了。我有一次排查了三天,最后发现是ODF架上的法兰盘没拧紧。
  • 时间戳溢出:MPCP时间戳是32位的,单位是纳秒。大约4.3秒会溢出一次。OLT和ONU都要正确处理溢出,否则时间会倒流。嗯,这个坑我踩过。
  • 多ONU同时测距:如果多个ONU同时发起测距,OLT可能处理不过来。建议在OLT侧做测距队列管理,避免并发冲突。

好了,测距与同步就讲到这里。记住一句话:没有精确的测距,就没有可靠的EPON。下次遇到ONU掉线,先查RTT,八成能发现问题。

总结:RTT测量是EPON的基石,同步时间戳是保证测量精度的关键,测距窗口管理则是平衡性能和效率的艺术。三者缺一不可。


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