了解PPPoE協(xié)議的發(fā)現(xiàn)階段
這里我們來對PPPoE協(xié)議的一些內(nèi)容進(jìn)行一下具體的分析。我們以前也曾學(xué)習(xí)過PPP協(xié)議,想必大家在學(xué)習(xí)PPPoE的時候也會更容易理解。這次我們也會涉及到PPPoE的發(fā)現(xiàn)階段的講述。PPPoE協(xié)議的數(shù)據(jù)報文是被封裝在以太網(wǎng)幀的數(shù)據(jù)域內(nèi)的。
以太網(wǎng)幀頭包括:
1. 目的MAC地址(該階段為ffffffffffff的廣播地址)
2. 源MAC地址(客戶端MAC地址)
3. 以太網(wǎng)協(xié)議類型(該階段為0x8863,表示為發(fā)現(xiàn)階段)。
PPPoE數(shù)據(jù)報文的格式:
1. PPPoE數(shù)據(jù)報文最開始的4位為版本域(Version),協(xié)議中給出了明確的規(guī)定,這個域填充的內(nèi)容為0x01.
2. 版本域后是4位的類型域(Type),根據(jù)協(xié)議規(guī)定,這個域填充的內(nèi)容也是0x01.
3. 代碼域(Code)占用一個字節(jié),對于PPPoE的不同階段這個域內(nèi)容也不一樣。
4. 會話ID(Session ID)占用兩個字節(jié),當(dāng)訪問集中器(Access Concentrator)還沒有分配唯一的會話ID給用戶主機(jī)的話,改域的內(nèi)容必須填充為0x0000;一旦主機(jī)獲取了會話ID后,那么在后續(xù)的所有報文里面必須填充那個唯一的會話ID。
5. PPPoE協(xié)議的Payload長度(Length)占兩個字節(jié)。PPPoE的Payload可以由多個TLV組成,每個包括Tag_Type,Tag_Length,Tag_Vlaue。
發(fā)現(xiàn)階段
PPPoE的發(fā)現(xiàn)階段一共分為4步,分別是:PADI(PPPoE Active Discovery Initiation),PADO(PPPoE Active Discovery Offer),PADR(PPPoE Active Discovery Request),PADS(PPPoE Active Discovery Session-confirmation)。當(dāng)完成這四步之后,用戶主機(jī)(PC)和訪問集中器(AC)雙方就能獲知對方唯一的MAC地址和唯一的會話ID。MAC地址和會話ID 共同定義了唯一的PPPoE會話。PPPoE Discovery的以太網(wǎng)類型域為0x8863。
1. PADI:PPPoE發(fā)現(xiàn)階段的第一步。用戶主機(jī)以廣播的方式發(fā)送PADI數(shù)報包,請求建立鏈路。Code域置為0x09,會話ID域必須置為0x0000。
2. PADO:PPPoE發(fā)現(xiàn)階段的第二步。訪問集中器(AC)以單播的方式發(fā)送一個PADO數(shù)據(jù)包對主機(jī)的請求做出應(yīng)答。目的地址為主機(jī)的MAC地址,Code域置為0x07,會話ID域必須置為0x0000。PADO數(shù)據(jù)包必須包含一個類型為AC-Name的Tag(包含了訪問集中器的名字)。
3. PADR:PPPoE發(fā)現(xiàn)階段的第三步。因為PADI數(shù)據(jù)包是廣播的,所以主機(jī)可能收到不止一個的PADO報文。主機(jī)在收到報文后,會根據(jù)AC-Name或者PADO所提供的服務(wù)來選擇一個AC,然后主機(jī)向選中的AC單播一個PADR數(shù)據(jù)包。目的地址域為AC的MAC地址,Code域置為0x19,會話ID域必須置為0x0000。PADR報文必須且只能包含一個Tag_Type為Service-Name的Tag,表明主機(jī)請求的服務(wù)。
4. PADS:PPPoE發(fā)現(xiàn)階段最后一步。當(dāng)AC在收到PADR報文時,就準(zhǔn)備開始一個PPP的會話了。它為PPPoE會話創(chuàng)建一個唯一的會話ID并用單播一個PADS數(shù)據(jù)包來給主機(jī)做出響應(yīng)。目的地址域為主機(jī)的MAC地址,Code域置為0x65,會話ID必須設(shè)置為所創(chuàng)建好的會話ID。
注意:
1. Host-Uniq
在PPPoE協(xié)議的發(fā)現(xiàn)階段的四個步驟中,PPPoE頭的Payload中始終含有這樣一個TLV:
Tag_Type = 0103 (表示為Host-Uniq)
Tag_Length = 8 (8個字節(jié)的長度)
Tag_Value = 0500000008000000
Host-Uniq為主機(jī)唯一標(biāo)識,類似于PPP數(shù)據(jù)報文中的標(biāo)識域,主要是用來匹配發(fā)送和接收端的。因為對于廣播式的網(wǎng)絡(luò)中會同時存在很多個PPPoE的數(shù)據(jù)報文。
2. AC-Cookie
PADO和PADR數(shù)據(jù)包里面都含有Tag_Type為AC-Cookie的Tag,16Bytes。Ac-Cookie是為了防止拒絕服務(wù)攻擊(Denial of Service,簡稱DOS)。訪問集中器(AC)能夠根據(jù)PADR的源地址來重新產(chǎn)生唯一的Tag_Value。使用這種方法,AC可以確保PADI的源地址是可達(dá)的,并對該地址的并行會話數(shù)進(jìn)行限制。