OLT以先到先处理为原则处理从ONU发来的请求。OLT有一个信息表,记录了每个ONU的缓冲区和RTT(round-trip time)大小。若某一时刻OLT收到ONUi发来的请求,则即时处理,根据请求的信息更新信息表,并立即向ONUi发送一个应答信号,准许其在指定时刻发送一定大小的数据。
为简便说明,假设一个系统只有3个ONU。如图1所示,在t0时刻,OLT收到ONU1发来的请求,则立即处理并向ONU1发送一个应答信号G1,准许其在t1时刻发送6 000 bit的数据。收到G1后,ONU1在t1时刻开始发送数据。该数据由6 000 bit的数据和ONU1新的请求R1组成。ONU1通过R1告诉OLT在请求产生时刻ONU缓冲区里的剩余比特数。若一个ONU清空了缓冲区,就向OLT报告0字节。相应地,OLT向其发送0字节的应答,允许发送一个新的没有数据的请求。因请求和应答时间只消耗很小一部分带宽,OLT接收信道的利用率接近100%。在一段时间后,ONU1的数据到达了OLT,OLT用R1中的信息以及通过发送G1和收到数据的时间来更新信息表。因为已知ONU1发送的数据大小,OLT又知ONU1发送的最后一个比特到来的时间,从而可以合理安排ONU2发送数据的时间,使ONU2的第一个比特能紧接着ONU1的最后一个比特的到来,其间只隔保护间隔B,用同样方法可处理ONU3的数据及R3。
图1 DBA算法的流程
冷启动
冷启动开始时,OLT按顺序每隔300 μs向一个ONU发送0字节的应答作为测距信息,依次处理收到的请求,先根据收到的请求信息将状态表更新,再根据状态表生成新的应答信息并发送给相应的ONU。若隔了300 μs未收到请求,则将该ONU的RTT标志为TIMEOUT。若有N个ONU,则冷启动全过程历时300N μs。
启动结束后RTT[i]=TIMEOUT的ONU被标记为未激活的ONU。OLT以1 s的间隔向ONU发送测距应答信息。若连续向某个ONU发送3次应答,其状态表表项都未更新,则将该ONU标记为未连接的ONU,每隔1 min向该ONU发送一次应答,其断开的ONU只占用很少的带宽。