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