4. MPCP协议基础:MPCP帧结构、MPCP协议在注册中的作用、GATE与REPORT消息
各位同学,咱们今天聊聊MPCP协议。说实话,我刚入行那会儿,觉得这玩意儿就是个黑盒子——光猫插上就能用,管它里面怎么折腾?直到有一次,一个局点批量ONU注册不上,我抓包一看,GATE消息发出去,REPORT就是回不来。嗯,从那以后,我再也不敢小看MPCP了。
MPCP,全称是Multi-Point Control Protocol,多点控制协议。它工作在MAC层之上,是EPON系统里ONU注册和带宽分配的核心。说白了,OLT和ONU之间怎么打招呼、怎么分配时隙、怎么保证不冲突,全靠它。
4.1 MPCP帧结构
MPCP帧其实就是在标准以太网帧的基础上,加了一个MAC Control字段。我习惯把它的结构拆成三块来看:
- 前导码和帧定界符:和普通以太帧一样,8个字节,没啥特别的。
- 目的MAC和源MAC:注意,MPCP帧的目的MAC地址是组播地址
01-80-C2-00-00-01,这是IEEE给MAC Control预留的。源MAC就是ONU自己的MAC。 - MAC Control字段:这才是关键。它包含2字节的Opcode(操作码)和若干字节的Data/Parameters。
你想想看,OLT怎么知道这个帧是GATE还是REPORT?就是靠Opcode。IEEE 802.3ah标准里定义了几个:
| Opcode | 消息类型 | 作用 |
|---|---|---|
| 0x0002 | GATE | OLT发给ONU,授权发送窗口 |
| 0x0003 | REPORT | ONU发给OLT,报告队列状态 |
| 0x0004 | REGISTER_REQ | ONU请求注册 |
| 0x0005 | REGISTER | OLT确认注册 |
| 0x0006 | REGISTER_ACK | ONU确认注册完成 |
这里有个细节——MPCP帧的Length/Type字段固定为 0x8808,这是MAC Control的专属标识。我在抓包时经常先过滤这个值,能快速定位到MPCP报文。
核心要点:MPCP帧本质是MAC Control帧,通过Opcode区分消息类型。所有MPCP帧都是64字节的最小以太帧,没有FCS之前是60字节,加上4字节FCS正好64。这是为了保证在PON系统里传输效率最高。
4.2 MPCP协议在注册中的作用
ONU注册,说白了就是OLT给新来的ONU发个“身份证”。整个过程分五步,我画了个流程图,你一看就明白:
这五步里,我最想强调的是第一步——发现GATE。OLT每隔一段时间就会广播一个发现GATE消息,里面带了一个“发现窗口”。这个窗口是个时间范围,新ONU只能在这个窗口内发送REGISTER_REQ。为什么?因为ONU还没注册,OLT不知道它的往返时间,如果不限制窗口,多个ONU同时发就会冲突。
我曾经遇到过一个案例:某个厂家的ONU注册成功率只有60%,抓包发现发现窗口设置得太小,只有500微秒。ONU收到发现GATE时,可能已经错过了窗口起始时间,导致发不出REGISTER_REQ。后来我把窗口调到2毫秒,问题就解决了。
实战技巧:发现窗口的大小要根据PON口下的距离来调。如果ONU距离OLT超过20公里,往返时延就接近200微秒,窗口至少得留1毫秒以上。我一般建议设成2毫秒,兼容性最好。
4.3 GATE与REPORT消息
注册完成后,OLT和ONU之间的日常通信就靠GATE和REPORT了。这两个消息是MPCP里最频繁出现的,说白了就是OLT问ONU“你要发多少数据?”,ONU回答“我这里有这么多”。
GATE消息:OLT发给ONU,授权它在某个时间点开始发送数据,持续多长时间。GATE消息里包含:
- 授权起始时间:相对于OLT本地时钟的时间戳,ONU收到后要加上自己的往返时间补偿。
- 授权长度:允许ONU发送的字节数,单位是时间量子(TQ),1 TQ = 16 ns。
- Flag位:指示这个GATE是发现GATE还是普通GATE,以及是否要求REPORT。
REPORT消息:ONU发给OLT,报告自己各个队列的缓存状态。REPORT里最关键的是:
- 队列报告集:最多支持8个队列,每个队列报告当前缓存的数据量。
- 报告位图:指示哪些队列有数据要发。
你想想看,OLT怎么知道给每个ONU分配多少带宽?就是根据REPORT里的队列长度。如果ONU的队列是空的,OLT就少给点时间;如果队列满了,就多给点。这就是动态带宽分配(DBA)的基础。
避坑指南:我曾经遇到一个情况,ONU的REPORT消息里队列长度总是0,但实际业务流量很大。查了半天,发现是ONU的队列映射配置错了——业务流量被映射到了队列7,但REPORT只报告了队列0-3。所以,做ONU开发时,一定要确认队列映射和REPORT报告的范围一致。
GATE和REPORT的交互频率,取决于DBA算法。我见过最快的每125微秒交互一次,慢的每2毫秒一次。频率越高,带宽分配的实时性越好,但CPU开销也大。一般商用设备默认是1毫秒一次,算是个平衡点。
注意事项:GATE消息里的授权起始时间,ONU必须严格遵循。如果ONU提前发送,就会和别的ONU冲突,导致数据损坏。我见过一个ONU因为时钟同步不准,总是提前几十纳秒发送,结果整个PON口的误码率飙升。最后发现是ONU的时钟恢复电路有问题,换了晶振才解决。
好了,MPCP的基础就这些。记住三个关键点:帧结构靠Opcode区分、注册靠五步握手、日常通信靠GATE和REPORT。下次咱们聊DBA的时候,你会发现自己已经能看懂大部分抓包了。