PPPoE會話解析
從PPPoE會話的內(nèi)容中,我們可以了解到PPPoE應(yīng)用的不同情況。那么我們在之前的文章中,也講解了有關(guān)的內(nèi)容。那么這里我們針對PPPoE會話,以及PPPoE協(xié)議的一些應(yīng)用該內(nèi)容再來進(jìn)行一下具體的分析。PPP在撥號介入網(wǎng)絡(luò)中的應(yīng)用場景,先看一幅PPPoE接入場景圖:
PPPoE場景1
用戶在自己的PC上撥號以建立到達(dá)圖中SSG設(shè)備的PPPoE通道.
下圖和上圖結(jié)構(gòu)相同,在細(xì)節(jié)上畫的更清晰了一些:
PPPoE場景2
從用戶PC到modem,從modem到DSLAM,從DSLAM到PPPoE Server的鏈路和協(xié)議棧進(jìn)本上在前文中都介紹了,讀者可以在本場景圖中自己回味一下.不清楚或者有疑問的地方歡迎和Hans做深入探討.
下面介紹PPPoE協(xié)議的細(xì)節(jié):
上圖***行為Ethernet frame的格式,當(dāng)ethernet type類型為0×8863時,表示payload承載的是PPPoE協(xié)商報文,當(dāng)類型為0×8864時,表示承載的是PPPoE的會話數(shù)據(jù)報文.Payload部分就是PPPoE報文的內(nèi)容了.
第二行中是PPPoE的報文頭,版本、類型字段的數(shù)值恒為0×01.Code字段在各種報文中的數(shù)值不同,在后面會一一介紹.會話ID表示此報文為 哪個PPPoE會話的報文.長度字段表示后面Payload字段的長度.在這個層次上的Payload是一組的PPPoE標(biāo)記(Tag).
第三行就顯示了PPPoE Tag的組織格式,是以一串常見的TLV(類型、長度、值)三元組組成的.
標(biāo)記(Tag)對照表:
標(biāo)記類型 |
標(biāo)記說明 |
0×0000 |
表示PPPOE報文數(shù)據(jù)域中一串標(biāo)記的結(jié)束,為了保證版本的兼容性而保留,在有些報文中有應(yīng)用。 |
0×0101 |
服務(wù)名,主要用來表明網(wǎng)絡(luò)側(cè)所能提供給用戶的一些服務(wù)。 |
0×0102 |
訪問集中器名,當(dāng)用戶側(cè)接收到了AC的回應(yīng)的PADO報文時,就可獲從所攜帶的標(biāo)記中獲知訪問集中器的名子,而且還可以據(jù)此來選擇相應(yīng)的訪問集中器。 |
0×0103 |
主機***標(biāo)識,類似于PPP數(shù)據(jù)報文中的標(biāo)識域,主要是用來匹配發(fā)送和接收端的,因為對于廣播式的網(wǎng)絡(luò)中會同時存在很多個PPPOE的數(shù)據(jù)報文。 |
0×0104 |
AC-Cookies,主要被用來防止惡意性DOS功擊。 |
0×0105 |
銷售商的標(biāo)識符。 |
0×0110 |
中繼會話ID,對于PPPOE的數(shù)據(jù)報文也同樣可以像DHCP報文一樣被中斷到另外的AC上終結(jié),這個字段則是用來維護另一個連接的。 |
0×0201 |
服務(wù)名錯誤,當(dāng)請求的服務(wù)名不被對端所接受時,會在響應(yīng)的報文中攜帶這個標(biāo)記。 |
0×0202 |
訪問集中器名出錯。 |
0×0203 |
一般性錯誤。 |
PPPoE的協(xié)商流程:
1、PADI(PPPOE Active Discovery Initiation)報文
這是用戶主機發(fā)起(廣播方式)的一個PPPoE服務(wù)器探測報文.code字段為0×09,會話ID為0×0000(此時還沒有會話session),必須需要包含0×0101標(biāo)記,這個標(biāo)記表示主機需要的服務(wù).有時還會帶上0×0103這個tag,表示主機的***標(biāo)識.
2、PADO(PPPOE Active Discovery Offer)報文
這是PPPoE服務(wù)器收到PADI報文之后的回應(yīng)報文(目的MAC地址為客戶端主機的MAC地址).當(dāng)PPPoE報文受到PADI報文后,如果此服 務(wù)器可以回應(yīng)主機0×0101標(biāo)記請求的服務(wù),則可以回應(yīng)PADO報文.PADO的code字段為0×07,會話ID為0×0000.此報文必須包含 0×0102標(biāo)記以及一些針對收到的PADI報文的確認(rèn)標(biāo)記.
3、PADR(PPPOE Active Discovery Request)報文
這是用戶主機收到PPPoE服務(wù)器回應(yīng)的PADO報文后,單播(目的地址為此用戶選定的那個PPPoE主機的MAC)發(fā)起的請求報文.code字段為0×19,session ID為0×0000.包含了0×0101標(biāo)識.
4、PADS(PPPOE Active Discovery Session-confirmation)報文
PPPoE服務(wù)器會為在這個會話分配一個***的會話進(jìn)程ID,并在發(fā)送給主機的PADS報文中攜帶上這個會話ID.當(dāng)然如果PPPoE服務(wù)器不滿足 用戶所申請的服務(wù)的話,則會向用戶發(fā)送一個PADS報文,而其中攜帶一個服務(wù)名錯誤的標(biāo)記,而且此時該PADS報文中的會話ID填充0×0000. code為0×65.至此,一個PPPoE會話就建立成功了,用戶和服務(wù)器兩點之間可以進(jìn)行會話,也就是可以發(fā)送PPP報文了.
5、PADT(PPPOE Active Discovery Terminate)報文
當(dāng)用戶或者服務(wù)器需要終止會話時,可以發(fā)送這種PADT報文.code字段為0xA7.session ID為希望終止的會話ID.此報文不需要附加任何的tag標(biāo)識.
PPPoE的會話數(shù)據(jù)報文:
一旦經(jīng)過前面介紹的協(xié)商之后,PPPoE的會話就建立成功了,客戶端和服務(wù)器獲得了會話ID,也就是建立了一條點對點的隧道(tunnel).此時 兩端之間就可以發(fā)送會話報文,也就是PPP報文了.此時ethernet報文頭的type字段為0×8864.PPPoE頭的code字段為0×00.此 時PPPoE承載的payload就是PPP報文了.
總結(jié):PPPoE為非點對點鏈路的以太網(wǎng)物理鏈路上承載PPP報文提供了一種創(chuàng)建虛擬點對點隧道鏈路的協(xié)商方式和封裝方式.