PPPOE的實現(xiàn)分為兩個階段:發(fā)現(xiàn)階段和會話階段。
當(dāng)一個主機想開始一個PPPOE會話,它必須首先進(jìn)行發(fā)現(xiàn)階段以識別對端的以太網(wǎng)MAC地址,并建立一個PPPOE SESSION_ID。
在發(fā)現(xiàn)階段,基于網(wǎng)絡(luò)的拓?fù)?,主機可以發(fā)現(xiàn)多個接入集中器。發(fā)現(xiàn)階段允許主機發(fā)現(xiàn)所有的接入集中器,然后選擇一個。
當(dāng)發(fā)現(xiàn)階段成功完成,主機和選擇的接入集中器利用它們在Ethernet已建好的PPP連接進(jìn)行通信。發(fā)現(xiàn)階段一直保持無狀態(tài)的狀態(tài),一旦PPP會話建立,主機和接入集中器都必須為PPP虛接口分配資源。圖1顯示了PPPOE通信流程。
圖 1 PPPOE通信流程
1. 發(fā)現(xiàn)階段建立連接的過程
第一步:用戶端主機發(fā)送一個PADI幀(PPPOE啟動初始化)。這個幀將通過以太網(wǎng)進(jìn)行廣播,表示尋找接入集中器;
第二步:一個或多個接入集中器回復(fù)一個PADO幀(PPPOE啟動響應(yīng))。這個幀將以太網(wǎng)地址發(fā)送給用戶端主機,表示接入集中器正在響應(yīng),是否要建立連接;當(dāng)主機在指定的時間內(nèi)沒有接收到PADO,它應(yīng)該重新發(fā)送它的PADI分組,并且加倍等待時間,這個過程會被重復(fù)期望的次數(shù)。
第三步:用戶端主機選擇一個接入集中器,并發(fā)送單播PADR幀(PPPOE連接請求)給該響應(yīng)的接入集中器,表示希望建立連接;
第四步:接入集中器發(fā)送PADS幀(PPPOE連接確認(rèn)),表示可以建立連接并分配連接號。該連接號連同源和目的的以太網(wǎng)地址,將唯一標(biāo)識一個PPPOE會話。當(dāng)主機接收到確認(rèn)分組,它可以開始進(jìn)行PPP會話階段。當(dāng)接入集中器發(fā)送出確認(rèn)分組,它可以開始進(jìn)行PPP會話階段。
PPPOE還有一個PADT分組,它可以在會話建立后的任何時候發(fā)送,來終止PPPOE會話。它可以由主機或者接入集中器發(fā)送。當(dāng)接收到一個PADT,不再允許使用這個會話來發(fā)送PPP業(yè)務(wù)。在發(fā)送或接收PADT后,即使正常的PPP終止分組也不必發(fā)送。PPP對端應(yīng)該使用PPP協(xié)議自身來終止PPPOE會話,但是當(dāng)PPP不能使用時,可以使用PADT。
2. PPP會話階段
一旦PPPOE會話開始,PPP數(shù)據(jù)就可以以任何其它的PPP封裝形式發(fā)送。會話階段具有PPP會話的一般性質(zhì),而且還具有如下特點:
a.在以太網(wǎng)傳輸?shù)氖菙?shù)據(jù)包,而不是一般的數(shù)據(jù)流;
b.不需要PPP的FCS域,因為以太網(wǎng)的幀已具有自己的CRC;
c.所有的以太網(wǎng)幀都是單播的;
d.PPPOE會話的 SESSION_ID一定不能改變,并且必須是發(fā)現(xiàn)階段分配的值。