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