hello world

          隨筆 - 2, 文章 - 63, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          PPPoE撥號(hào)流程

          PPPoE (Point to Point Protocol over Ethernet,基于以太網(wǎng)的點(diǎn)對(duì)點(diǎn)協(xié)議)的工作流程包含發(fā)現(xiàn)(Discovery)會(huì)話(Session)兩個(gè)階段,發(fā)現(xiàn)階段是無(wú)狀態(tài)的,目的是獲得PPPoE終端(在局端的ADSL設(shè)備上)的以太網(wǎng)MAC地址,并建立一個(gè)惟一的PPPoE SESSION-ID。發(fā)現(xiàn)階段結(jié)束后,就進(jìn)入標(biāo)準(zhǔn)的PPP會(huì)話階段。

          1.發(fā)現(xiàn)階段(PPPoED:PPPoE Discovery)

          1.1 PADI(PPPoE Active Discovery Initiation

          主機(jī)廣播發(fā)起分組,分組的目的地址為以太網(wǎng)的廣播地址 0xffffffffffff,CODE(代碼)字段值為0×09(PADI Code),SESSION-ID(會(huì)話ID)字段值為0x0000。PADI分組必須至少包含一個(gè)服務(wù)名稱類型的標(biāo)簽(Service Name Tag,字段值為0x0101),向接入集中器提出所要求提供的服務(wù)。

          1.2 PADO(PPPoE Active Discovery Offer

          接入集中器收到在服務(wù)范圍內(nèi)的PADI分組,發(fā)送PPPoE有效發(fā)現(xiàn)提供包分組,以響應(yīng)請(qǐng)求。其中CODE字段值為0×07(PADO Code),SESSION-ID字段值仍為0x0000。PADO分組必須包含一個(gè)接入集中器名稱類型的標(biāo)簽(Access Concentrator Name Tag,字段值為0x0102),以及一個(gè)或多個(gè)服務(wù)名稱類型標(biāo)簽,表明可向主機(jī)提供的服務(wù)種類。PADO和PADI的Host-Uniq Tag值相同

          1.3 PADR(PPPoE Active Discovery Request

          主機(jī)在可能收到的多個(gè)PADO分組中選擇一個(gè)合適的PADO分組,然后向所選擇的接入集中器發(fā)送PPPoE有效發(fā)現(xiàn)請(qǐng)求分組。其中CODE字段為0x19(PADR Code),SESSION_ID字段值仍為0x0000。PADR分組必須包含一個(gè)服務(wù)名稱類型標(biāo)簽,確定向接入集線器(或交換機(jī))請(qǐng)求的服務(wù)種類。當(dāng)主機(jī)在指定的時(shí)間內(nèi)沒(méi)有接收到PADO,它應(yīng)該重新發(fā)送它的PADI分組,并且加倍等待時(shí)間,這個(gè)過(guò)程會(huì)被重復(fù)期望的次數(shù)。

          1.4 PADS(PPPoE Active Discovery Session-confirmation)

          接入集中器收到PADR分組后準(zhǔn)備開(kāi)始PPP會(huì)話,它發(fā)送一個(gè)PPPoE有效發(fā)現(xiàn)會(huì)話確認(rèn)PADS分組。其中CODE字段值為0×65(PADS Code),SESSION-ID字段值為接入集中器所產(chǎn)生的一個(gè)惟一的PPPoE會(huì)話標(biāo)識(shí)號(hào)碼。PADS分組也必須包含一個(gè)接入集中器名稱類型的標(biāo)簽以確認(rèn)向主機(jī)提供的服務(wù)。當(dāng)主機(jī)收到PADS 分組確認(rèn)后,雙方就進(jìn)入PPP會(huì)話階段。PADS和PADR的Host-Uniq Tag值相同


          圖1 PPPoE的協(xié)商流程

          2.會(huì)話階段(PPPoES:PPPoE Session)

          PPP會(huì)話的建立,需要兩端的設(shè)備都發(fā)送LCP數(shù)據(jù)包來(lái)配置和測(cè)試數(shù)據(jù)通信鏈路。

          用戶主機(jī)與接入集中器根據(jù)在發(fā)現(xiàn)階段所協(xié)商的PPP會(huì)話連接參數(shù)進(jìn)行PPP會(huì)話。一旦PPPoE會(huì)話開(kāi)始,PPP數(shù)據(jù)就可以以任何其他的PPP封裝形式發(fā)送。所有的以太網(wǎng)幀都是單播的。PPPoE會(huì)話的SESSION-ID一定不能改變,并且必須是發(fā)現(xiàn)階段分配的值。

          2.1 LCP協(xié)商階段LCP:Link Control Protocol

          LCP的Request主機(jī)和AC都要給對(duì)方發(fā)送,LCP協(xié)商階段完成最大傳輸單元(MTU),是否進(jìn)行認(rèn)證和采用何種認(rèn)證方式(Authentication Type)的協(xié)商。

          (1)LCP協(xié)議數(shù)據(jù)報(bào)文分類

          鏈路配置報(bào)文:用來(lái)建立和配置一條鏈路,主要包括Configure-Request、Configure-Ack、Configure-Nak和Configure-Reject報(bào)文

          鏈路維護(hù)報(bào)文:用來(lái)管理和調(diào)試鏈路,主要包括Code-Reject、Protocol-Reject、Echo-Request、Echo-Reply和Discard-Request報(bào)文

          鏈路終止報(bào)文:用來(lái)終止一條鏈路,主要包括Terminate-Request和Terminate-Reply報(bào)文

          (2)LCP協(xié)商過(guò)程

          LCP協(xié)商的過(guò)程如下:協(xié)商雙方互相發(fā)送一個(gè)LCP Config-Request報(bào)文,確認(rèn)收到的Config-Request報(bào)文中的協(xié)商選項(xiàng),根據(jù)這些選項(xiàng)的支持與接受情況,做出適當(dāng)?shù)幕貞?yīng)。若兩端都回應(yīng)了Config-ACK,則標(biāo)志LCP鏈路建立成功,否則會(huì)繼續(xù)發(fā)送Request報(bào)文,直到對(duì)端回應(yīng)了ACK報(bào)文為止。


          圖2 LCP協(xié)商的基本過(guò)程

          說(shuō)明:

          (1)Config-ACK:若完全支持對(duì)端的LCP選項(xiàng),則回應(yīng)Config-ACK報(bào)文,報(bào)文中必須完全協(xié)帶對(duì)端Request報(bào)文中的選項(xiàng)。

          (2)Config-NAK:若支持對(duì)端的協(xié)商選項(xiàng),但不認(rèn)可該項(xiàng)協(xié)商的內(nèi)容,則回應(yīng)Config-NAK報(bào)文,在Config-NAK的選項(xiàng)中填上自己期望的內(nèi)容,如:對(duì)端MRU值為1500,而自己期望MRU值為1492,則在Config-NAK報(bào)文中埴上自己的期望值1492。

          (3)Config-Reject:若不能支持對(duì)端的協(xié)商選項(xiàng),則回應(yīng)Config-Reject報(bào)文,報(bào)文中帶上不能支持的選項(xiàng),如Windows撥號(hào)器會(huì)協(xié)商CBCP(被叫回呼),而ME60不支持CBCP功能,則回將此選項(xiàng)拒絕掉。

          2.2 認(rèn)證階段PPP Authentication:PAP/CHAP)

          會(huì)話雙方通過(guò)LCP協(xié)商好的認(rèn)證方法進(jìn)行認(rèn)證,如果認(rèn)證通過(guò)了,才可以進(jìn)行下面的網(wǎng)絡(luò)層的協(xié)商。認(rèn)證過(guò)程在鏈路協(xié)商結(jié)束后就進(jìn)行。

           PAP(Password Authentication Protocol,口令認(rèn)證協(xié)議)認(rèn)證

          PAP為兩次握手協(xié)議,它通過(guò)用戶名及口令來(lái)對(duì)用戶進(jìn)行驗(yàn)證。PAP驗(yàn)證過(guò)程如下:

          當(dāng)兩端鏈路可相互傳輸數(shù)據(jù)時(shí),被驗(yàn)證方發(fā)送本端的用戶名及口令到驗(yàn)證方,驗(yàn)證方根據(jù)本端的用戶表(或Radius服務(wù)器)查看是否有此用戶,口令是否正確。如正確則會(huì)給對(duì)端發(fā)送Authenticate-ACK報(bào)文,通告對(duì)端已被允許進(jìn)入下一階段協(xié)商;否則發(fā)送NAK報(bào)文,通告對(duì)端驗(yàn)證失敗。此時(shí),并不會(huì)直接將鏈路關(guān)閉。只有當(dāng)驗(yàn)證不過(guò)次數(shù)達(dá)到一定值(缺省為10)時(shí),才會(huì)關(guān)閉鏈路。

          PAP的特點(diǎn)是在網(wǎng)絡(luò)上以明文的方式傳遞用戶名及口令,如在傳輸過(guò)程中被截獲,便有可能對(duì)網(wǎng)絡(luò)安全造成極大的威脅。因此,它適用于對(duì)網(wǎng)絡(luò)安全要求相對(duì)較低的環(huán)境。


          圖3 PAP認(rèn)證流程

           CHAP(Challenge Handshake Authentication Protocol,質(zhì)詢握手認(rèn)證協(xié)議)認(rèn)證

          CHAP為三次握手協(xié)議。只在網(wǎng)絡(luò)上傳輸用戶名,并不傳輸用戶口令,因此它的安全性要比PAP高。CHAP的驗(yàn)證過(guò)程為:

          首先由驗(yàn)證方(Server)向被驗(yàn)證方(Client)發(fā)送一些隨機(jī)產(chǎn)生的報(bào)文,并同時(shí)將本端的主機(jī)名附帶上一起發(fā)送給被驗(yàn)證方。被驗(yàn)證方接到對(duì)端對(duì)本端的驗(yàn)證請(qǐng)求(Challenge)時(shí),便根據(jù)此報(bào)文中驗(yàn)證方的主機(jī)名和本端的用戶表查找用戶口令字,如找到用戶表中與驗(yàn)證方主機(jī)名相同的用戶,便利用報(bào)文ID、此用戶的密鑰用Md5算法生成應(yīng)答(Response),隨后將應(yīng)答和自己的主機(jī)名送回。驗(yàn)證方接到此應(yīng)答后,用報(bào)文ID、本方保留的口令字(密鑰)和隨機(jī)報(bào)文用Md5算法得出結(jié)果,與被驗(yàn)證方應(yīng)答比較,根據(jù)比較結(jié)果返回相應(yīng)的結(jié)果(ACK or NAK)

          (1)接受認(rèn)證端發(fā)送Challenge

          (2)申請(qǐng)認(rèn)證端發(fā)驗(yàn)證請(qǐng)求報(bào)文

          (3)接受認(rèn)證端回應(yīng)認(rèn)證接受報(bào)文

          經(jīng)過(guò)以上三次報(bào)文交互后,CHAP認(rèn)證完成。


          圖4 CHAP認(rèn)證流程

          2.3 NCP協(xié)商階段NCP:Network Control Protocol)

          NCP有很多種,如IPCP、BCP、IPv6CP,最為常用的是IPCP(Internet Protocol Control Protocol)協(xié)議。NCP的主要功能是協(xié)商PPP報(bào)文的網(wǎng)絡(luò)層參數(shù),如IP地址,DNS Server IP地址,WINS Server IP地址等。PPPoE用戶主要通過(guò)IPCP來(lái)獲取訪問(wèn)網(wǎng)絡(luò)的IP地址或IP地址段。

          NCP流程與LCP流程類似,用戶與ME設(shè)備之間互相發(fā)送NCP Config-Request報(bào)文并且互相回應(yīng)NCP Config-Ack報(bào)文后,標(biāo)志NCP己協(xié)商完,用戶上線成功,可以正常訪問(wèn)網(wǎng)絡(luò)了。

          IPCP的協(xié)商過(guò)程是基于PPP狀態(tài)機(jī)進(jìn)行協(xié)商的。經(jīng)過(guò)雙方協(xié)商,通過(guò)配置請(qǐng)求、配置確認(rèn)、配置否認(rèn)等包文交換配置信息,最終由initial (或closed)狀態(tài)變?yōu)镺pened狀態(tài)。IPCP狀態(tài)變?yōu)镺pened的條件必須是發(fā)送方和接收方都發(fā)送和接收過(guò)確認(rèn)包文。

          IPCP協(xié)商過(guò)程中,協(xié)商包文可包含多個(gè)選項(xiàng),即參數(shù)。各個(gè)選項(xiàng)的拒絕或否認(rèn)都不能影響IPCP的UP,IPCP可以無(wú)選項(xiàng)協(xié)商,無(wú)選項(xiàng)協(xié)商也同樣能夠UP。選項(xiàng)有IP Address、網(wǎng)關(guān)、掩碼等,其中IP Address是最重要的一個(gè)選項(xiàng),有些廠家的實(shí)現(xiàn)必須這個(gè)選項(xiàng)得到確認(rèn),大多數(shù)廠家的實(shí)現(xiàn)允許這個(gè)選項(xiàng)為空。

          NCP的基本協(xié)商流程見(jiàn)下圖:


          圖5 NCP的基本協(xié)商流程

          用戶和接入設(shè)備對(duì)IP服務(wù)階段的一些要求進(jìn)行多次協(xié)商,以決定雙方都能夠接收的約定。

          如:IP業(yè)務(wù)階段使用的IP壓縮協(xié)議等。雙方的協(xié)議是通過(guò)報(bào)文中包含的Option項(xiàng)進(jìn)行協(xié)商的,每一個(gè)Option都是一個(gè)需要協(xié)商的問(wèn)題。

          最后雙方都需要對(duì)方答復(fù)Configure_Ack的同意報(bào)文。

          2.4 會(huì)話維持(Session Keep-alive)

          設(shè)備主動(dòng)發(fā)送Echo Request進(jìn)行PPPoE心跳保活,若3次未得到服務(wù)器的響應(yīng),則設(shè)備主動(dòng)釋放地址。發(fā)LCP Echo Request 的時(shí)候,魔術(shù)字字段要和之前通信的Configure_Request使用的魔術(shù)字字段保持一致。

          有些設(shè)備或終端不支持主動(dòng)發(fā)送 Echo-Request 報(bào)文, 只能支持回應(yīng)Echo-Reply報(bào)文。

          2.5 會(huì)話結(jié)束(Session Termination)

          PPPoE 還有一個(gè)PADT(PPPOE Active Discovery Terminate)分組,它可以在會(huì)話建立后的任何時(shí)候發(fā)送,來(lái)終止PPPoE會(huì)話,也就是會(huì)話釋放。它可以由主機(jī)或者接入集中器發(fā)送,目的地址填充為對(duì)端的以太網(wǎng)的MAC地址。

          當(dāng)對(duì)方接收到一個(gè) PADT(PPPOE Active Discovery Terminate)分組,就不再允許使用這個(gè)會(huì)話來(lái)發(fā)送PPP業(yè)務(wù)。PADT分組不需要任何標(biāo)簽,其CODE字段值為0xa7(PADT Code),SESSION-ID字段值為需要終止的PPP會(huì)話的會(huì)話標(biāo)識(shí)號(hào)碼。在發(fā)送或接收PADT后,即使正常的PPP終止分組也不必發(fā)送。PPP對(duì)端應(yīng)該使用PPP協(xié)議自身來(lái)終止PPPoE會(huì)話,但是當(dāng)PPP不能使用時(shí),可以使用PADT。

          3.PPPoE接入流程示例

          PPP狀態(tài)變遷如圖6所示:


          圖6 PPP狀態(tài)變遷圖

          以PPPoE-CHAP為例,PPP用戶接入流程如圖7所示:


          圖7 PPPoE/CHAP接入認(rèn)證流程

          4.Linux中的PPPoE撥號(hào)守護(hù)進(jìn)程 pppd:Point-to-Point Protocol Daemon)

          pppd是一個(gè)后臺(tái)服務(wù)進(jìn)程(daemon),是一個(gè)用戶空間的進(jìn)程,所以把策略性的內(nèi)容從內(nèi)核的PPP協(xié)議處理模塊移到pppd中是很自然的事了。pppd實(shí)現(xiàn)了所有鑒權(quán)、壓縮/解壓和加密/解密等擴(kuò)展功能的控制協(xié)議。

          pppd只是一個(gè)普通的用戶進(jìn)程,它如何擴(kuò)展PPP協(xié)議呢?這就是pppd與內(nèi)核中的PPP協(xié)議處理模塊之間約定了,它們之間采用了最傳統(tǒng)的內(nèi)核空間與用戶空間之間通信方式:設(shè)備文件。

          設(shè)備文件名是/dev/ppp。通過(guò)read系統(tǒng)調(diào)用,pppd可以讀取PPP協(xié)議處理模塊的數(shù)據(jù)包,當(dāng)然,PPP協(xié)議處理模塊只會(huì)把應(yīng)該由pppd處理的數(shù)據(jù)包發(fā)給pppd。通過(guò)write系統(tǒng)調(diào)用,pppd可以把要發(fā)送的數(shù)據(jù)包傳遞給PPP協(xié)議處理模塊。通過(guò)ioctrl系統(tǒng)調(diào)用,pppd可以設(shè)置PPP協(xié)議的參數(shù),可以建立/關(guān)閉連接。


          參考:

          PPP協(xié)議

          PPP狀態(tài)機(jī)總結(jié)

          PPP協(xié)議詳細(xì)解析

           

          PPPoE協(xié)議篇

          PPPoE通信協(xié)議

          PPPoE拔號(hào)流程

           

          PAP和CHAP認(rèn)證

          PPP-CHAP原理與配置

          PPP的CHAP認(rèn)證完全配置

           

          PPPoE實(shí)例》

          PPPoE撥號(hào)過(guò)程抓包解析

          PPPoE用戶上線交互過(guò)程

          PPPoE協(xié)議技術(shù)與標(biāo)準(zhǔn)培訓(xùn)教材

          路由器如何設(shè)置PPPoE上網(wǎng)(ADSL虛擬撥號(hào))

          Linux系統(tǒng)修改PPPOE配置解決ADSL頻繁掉線問(wèn)題


          LinuxPPP實(shí)現(xiàn)源碼分析

          Linux PPP 數(shù)據(jù)收發(fā)流程

          PPPoE協(xié)議和pppd源碼分析

           

          如何用Linux做PPPoE服務(wù)器

          LinuxPPPoE設(shè)置的六個(gè)步驟

           

          關(guān)于pppd移植和3g功能》

          移植——linux下使用3G撥號(hào)上網(wǎng)

          成功實(shí)現(xiàn)Linux下pppd通過(guò)GPRS撥號(hào)上網(wǎng)

          轉(zhuǎn)發(fā)自:http://blog.csdn.net/lishanmin11/article/details/39399939

          posted on 2017-05-27 09:53 聽(tīng)風(fēng) 閱讀(229) 評(píng)論(0)  編輯  收藏 所屬分類: 嵌入式

          主站蜘蛛池模板: 抚远县| 盐城市| 莱芜市| 滨海县| 黄梅县| 宜兴市| 昌都县| 苍梧县| 宁安市| 云阳县| 滦平县| 浠水县| 巴塘县| 英吉沙县| 潜山县| 青川县| 恩平市| 洛川县| 五家渠市| 盱眙县| 吕梁市| 怀来县| 南开区| 宁陵县| 沐川县| 宜君县| 和林格尔县| 梨树县| 广水市| 巴彦淖尔市| 苍梧县| 贵溪市| 绍兴县| 宁河县| 和田县| 崇仁县| 龙江县| 宜川县| 铁岭县| 日土县| 泌阳县|