2. OLT与ONU的发现机制
大家好,我是老张。今天咱们聊聊ONU注册的第一步——发现机制。说白了,就是OLT怎么知道有新的ONU接上来了。
你想想看,一根光纤上可能挂着几十个ONU。OLT怎么找到新来的那个?总不能一个个去问吧。嗯,这里就要引入一个核心概念——发现窗口。
发现窗口的概念
发现窗口,我习惯叫它“开门迎客”的时间段。OLT平时忙着给已注册的ONU分配带宽、收发数据。但每隔一段时间,它会专门腾出一个时间片,对全网喊一嗓子:
“有没有新来的ONU?有的话,趁现在报个到!”
这个时间片,就是发现窗口。它本质上是一个时间区间,在这个区间内,OLT允许未注册的ONU发送注册请求。
核心要点:
- 发现窗口是OLT主动开启的
- 只有未注册的ONU才能在这个窗口内响应
- 已注册的ONU在这个窗口内保持沉默
我记得刚入行时,有个同事把发现窗口理解成“ONU自己找时间上报”。结果调试了三天,ONU死活注册不上。后来才发现,ONU只能被动等待OLT开门,自己不能主动敲门。
发现窗口的开启与关闭
OLT怎么控制这个窗口?说白了就是通过发送一种特殊的帧——发现GATE帧。
流程是这样的:
- OLT发送发现GATE帧:这个帧里包含了发现窗口的起始时间和长度
- ONU收到后判断:如果自己是未注册状态,就准备在窗口内发送注册请求
- ONU发送注册请求:在窗口内随机选择一个时间点,发送REGISTER_REQ帧
- OLT关闭窗口:窗口时间到,OLT停止接收新的注册请求
避坑指南:
我曾经遇到过一个案例:某个OLT的发现窗口开得太短,只有1毫秒。结果距离远的ONU因为光路延迟,还没等信号传到OLT,窗口就关了。后来我把窗口调到3毫秒,问题就解决了。
这里有个细节要注意:发现窗口不是一直开着的。OLT会周期性地开启,比如每100毫秒开一次。为什么?因为如果一直开着,新ONU随时都能发请求,那已注册的ONU就没法正常通信了。
发现窗口的时序参数
说到时序,就不得不提几个关键参数。我整理了一张表,大家看看:
| 参数名称 | 含义 | 典型值 | 我的建议 |
|---|---|---|---|
| 发现窗口长度 | 窗口持续的时间 | 2-5 ms | 根据最远ONU距离调整 |
| 发现窗口周期 | 两次窗口的间隔 | 50-200 ms | 别太短,影响正常业务 |
| 响应延迟 | ONU收到GATE到发送请求的延迟 | 35-50 μs | 留够余量,别卡太死 |
| 最大往返时间 | 最远ONU的光路延迟 | 取决于距离 | 20km约200μs |
为什么会关注这些参数?你想想看,如果窗口长度小于最远ONU的往返时间,那ONU的请求还没到OLT,窗口就关了。这就是我前面说的那个坑。
我个人习惯这样计算:
发现窗口长度 ≥ 2 × 最大往返时间 + ONU处理延迟 + 安全余量
举例:
- 最大距离:20km → 往返时间约200μs
- ONU处理延迟:约50μs
- 安全余量:100μs
- 窗口长度 ≥ 200 + 50 + 100 = 350μs
实际我一般设2ms,留足余量
注意:
窗口长度不是越大越好。窗口越大,正常业务被中断的时间就越长。我见过有人把窗口设到10ms,结果用户投诉上网卡顿。后来一查,发现窗口占用了太多带宽。
核心逻辑流程图
下面我用一张SVG图,把整个发现机制串起来。这张图我画了好几次,力求简洁明了:
这张图把整个流程串起来了。从OLT发GATE帧开始,到窗口开启、ONU响应、最后关闭窗口。嗯,其实还有后续的注册确认步骤,那个我们下一章再聊。
实际项目中的经验
最后分享一个我踩过的坑。有一次在现网调试,发现某个型号的ONU总是注册不上。查了半天,发现是OLT的发现窗口周期设成了500毫秒。这个ONU比较老,内部有个定时器,如果超过300毫秒没收到GATE帧,就认为自己不在线了。
结果就是:OLT每500毫秒开一次门,ONU每300毫秒超时一次。两个时钟永远对不上。后来我把周期改成100毫秒,问题立刻解决。
所以我的建议是:发现窗口周期不要超过100毫秒。除非你确认所有ONU都支持更长的间隔。
本章小结:
- 发现窗口是OLT为未注册ONU专门开辟的时间片
- 窗口由OLT通过发现GATE帧控制开启和关闭
- 窗口长度要大于2倍最大往返时间,一般设2-5ms
- 窗口周期建议不超过100ms,避免ONU超时
公众号:蓝海资料掘金营,微信deep3321