tag結(jié)構(gòu)如圖3所示。 2 pppoe協(xié)議分析 pppoe協(xié)議分為發(fā)現(xiàn)(discovery)階段和會話(session)階段。發(fā)現(xiàn)階段是一個無狀態(tài)的階段,該階段主要選擇訪問集中器,確定所要建立的ppp會話標(biāo)識符session id,同時獲得對方點(diǎn)到點(diǎn)的連接信息;ppp會話階段執(zhí)行標(biāo)準(zhǔn)的ppp過程。 (1)發(fā)現(xiàn)階段 一個典型的發(fā)現(xiàn)階段分為四個步驟,當(dāng)整個發(fā)現(xiàn)階段結(jié)束后,通信雙方分別獲取對方的mac地址,并且共用一個session id,這兩個參數(shù)共同確定一個pppoe會話。 第一步,發(fā)送padi(pppoe active discovery initiation)幀。在pppoe的以太幀結(jié)構(gòu)中,編碼域的值為0x09,會話id域的值設(shè)為0x0000。在這個步驟中,以太網(wǎng)目的地址為廣播并且在包中必須包含一個確切的服務(wù)名。 第二步,接收pado(pppoe active discovery offer)幀。這一過程就是當(dāng)isp的pppoe訪問集中器收到padi幀后,若能夠滿足padi提出的服務(wù)請求,可以發(fā)送pado幀回應(yīng)。pado幀中的目的地址為發(fā)送padi幀的客戶端的mac地址,源地址為
成ppp鏈路的協(xié)商(lcp),以及網(wǎng)絡(luò)層的控制協(xié)商(ipcp)等。 傳統(tǒng)的pppoe先會用raw socket讀取數(shù)據(jù),然后采用用戶態(tài)程序?qū)ζ浞獍獍?,然后再發(fā)送給內(nèi)核。但是這種方法會引起大量的內(nèi)核空間與用戶空間的上下文切換,從而帶來不必要的開銷。而對于實(shí)現(xiàn)于內(nèi)核態(tài)的pppoe,它會把所有的封包以及解包實(shí)現(xiàn)于內(nèi)核,這樣就大大提高pppoe的效率。 1 pppoe協(xié)議概述 1. 1 pppoe discovery階段 在pppoe discovery階段,客戶機(jī)首先廣播一個padi(0x09)幀。收到padi幀的一個或多個服務(wù)器會發(fā)送pado(0x07)幀,這個包中包含了服務(wù)器的各種標(biāo)識。然后,客戶機(jī)會選擇其中一個服務(wù)器發(fā)送padr(0x19),表明主機(jī)選擇了這個服務(wù)器。最終,收到padr(0x65)幀的服務(wù)器會為新的會話分配資源并向客戶機(jī)發(fā)送pads(0x65)。當(dāng)此階段完成,這兩次的對話完成了session_id以及雙方物理地址,為后續(xù)數(shù)據(jù)會話打好基礎(chǔ)。 同時ppp協(xié)議還提供了一個padt請求,該請求用于結(jié)束這次pppoe會話。這個請求可以由任何一方發(fā)出,同時代