PPPOE的实现分为两个阶段:发现阶段和会话阶段。
当一个主机想开始一个PPPOE会话,它必须首先进行发现阶段以识别对端的以太网MAC地址,并建立一个PPPOE SESSION_ID。
在发现阶段,基于网络的拓扑,主机可以发现多个接入集中器。发现阶段允许主机发现所有的接入集中器,然后选择一个。
当发现阶段成功完成,主机和选择的接入集中器利用它们在Ethernet已建好的PPP连接进行通信。发现阶段一直保持无状态的状态,一旦PPP会话建立,主机和接入集中器都必须为PPP虚接口分配资源。图1显示了PPPOE通信流程。
图 1 PPPOE通信流程
1. 发现阶段建立连接的过程
第一步:用户端主机发送一个PADI帧(PPPOE启动初始化)。这个帧将通过以太网进行广播,表示寻找接入集中器;
第二步:一个或多个接入集中器回复一个PADO帧(PPPOE启动响应)。这个帧将以太网地址发送给用户端主机,表示接入集中器正在响应,是否要建立连接;当主机在指定的时间内没有接收到PADO,它应该重新发送它的PADI分组,并且加倍等待时间,这个过程会被重复期望的次数。
第三步:用户端主机选择一个接入集中器,并发送单播PADR帧(PPPOE连接请求)给该响应的接入集中器,表示希望建立连接;
第四步:接入集中器发送PADS帧(PPPOE连接确认),表示可以建立连接并分配连接号。该连接号连同源和目的的以太网地址,将唯一标识一个PPPOE会话。当主机接收到确认分组,它可以开始进行PPP会话阶段。当接入集中器发送出确认分组,它可以开始进行PPP会话阶段。
PPPOE还有一个PADT分组,它可以在会话建立后的任何时候发送,来终止PPPOE会话。它可以由主机或者接入集中器发送。当接收到一个PADT,不再允许使用这个会话来发送PPP业务。在发送或接收PADT后,即使正常的PPP终止分组也不必发送。PPP对端应该使用PPP协议自身来终止PPPOE会话,但是当PPP不能使用时,可以使用PADT。
2. PPP会话阶段
一旦PPPOE会话开始,PPP数据就可以以任何其它的PPP封装形式发送。会话阶段具有PPP会话的一般性质,而且还具有如下特点:
a.在以太网传输的是数据包,而不是一般的数据流;
b.不需要PPP的FCS域,因为以太网的帧已具有自己的CRC;
c.所有的以太网帧都是单播的;
d.PPPOE会话的 SESSION_ID一定不能改变,并且必须是发现阶段分配的值。