點到點鏈路層協(xié)議PPP(PPPoE)主要用于在全雙工的同異步鏈路上進(jìn)行點到點的數(shù)據(jù)傳輸,PPP是一款公有標(biāo)準(zhǔn)協(xié)議,兼容性好。
PPP協(xié)議的特點:
1、PPP支持在全雙工的同異步鏈路上進(jìn)行點到點的數(shù)據(jù)傳輸。
2、PPP具有很好的擴(kuò)展性;PPPoE就是承載在以太網(wǎng)鏈路上的PPP協(xié)議。
3、PPP支持地址信息的自動協(xié)商;LCP協(xié)議用于各種鏈路層參數(shù)的協(xié)商;NCP協(xié)議用于各網(wǎng)絡(luò)層參數(shù)的協(xié)商,更好地支持了網(wǎng)絡(luò)層協(xié)議(peer neighbor-route)。
4、PPP支持PAP、CHAP認(rèn)證(可以基于接口的密碼認(rèn)證;也可以基于本地數(shù)據(jù)庫AAA認(rèn)證,提供認(rèn)證、授權(quán)和審計),更好的保證了網(wǎng)絡(luò)的安全性。
5、PPP支持將多根鏈路進(jìn)行捆綁(Multilink);支持對所有類型的報文/報頭進(jìn)行壓縮;無重傳機(jī)制,網(wǎng)絡(luò)開銷小,速度快。
PPP協(xié)議的組成:協(xié)議傘
步驟一:鏈路控制協(xié)議LCP;用來建立、拆除和監(jiān)控PPP數(shù)據(jù)鏈路
步驟二:認(rèn)證協(xié)議;PAP(密碼認(rèn)證協(xié)議)和CHAP(挑戰(zhàn)握手認(rèn)證協(xié)議);用于鏈路認(rèn)證,支持單向認(rèn)證和雙向認(rèn)證。
步驟三:網(wǎng)絡(luò)層控制協(xié)議NCP(協(xié)議傘);用于對不同的網(wǎng)絡(luò)層協(xié)議進(jìn)行連接建立和參數(shù)協(xié)商;協(xié)議包含了IPV4CP(IPCP)、IPV6CP、IPXCP等。
PPP鏈路的建立過程:
1、Dead階段也稱為物理層不可用階段。當(dāng)通信雙方的兩端檢測到物理線路激活時,就會從Dead階段遷移至Establish階段,即鏈路建立階段。
2、Establish階段,PPP鏈路會進(jìn)行LCP參數(shù)協(xié)商。協(xié)商內(nèi)容包括最大接收單元MRU、認(rèn)證方式、魔術(shù)字(Magic Number)等選項。LCP參數(shù)協(xié)商成功后會進(jìn)入Opened狀態(tài),表示底層鏈路已經(jīng)建立。
3、多數(shù)情況下,鏈路兩端的設(shè)備是需要經(jīng)過認(rèn)證階段(Authenticate)后才能夠進(jìn)入到網(wǎng)絡(luò)層協(xié)議協(xié)商階段。PPP鏈路在缺省情況下是不要求進(jìn)行認(rèn)證的。如果要求認(rèn)證,則在鏈路建立階段必須指定認(rèn)證協(xié)議。認(rèn)證方式是在鏈路建立階段雙方進(jìn)行協(xié)商的。如果在這個階段再次收到了Configure-Request報文,則又會返回到鏈路建立階段。
4、Network階段,PPP鏈路進(jìn)行NCP協(xié)商。通過NCP協(xié)商來選擇和配置一個網(wǎng)絡(luò)層協(xié)議并進(jìn)行網(wǎng)絡(luò)層參數(shù)協(xié)商。只有相應(yīng)的網(wǎng)絡(luò)層協(xié)議協(xié)商成功后,網(wǎng)絡(luò)層協(xié)議才可以通過這條PPP鏈路發(fā)送報文。如果在這個階段收到了Configure-Request報文,也會返回到鏈路建立階段。
5、NCP協(xié)商成功后,PPP鏈路將保持通信狀態(tài)。PPP運行過程中,可以隨時中斷連接,例如物理鏈路斷開、認(rèn)證失敗、超時定時器時間、管理員通過配置關(guān)閉連接等動作都可能導(dǎo)致鏈路進(jìn)入Terminate階段。
6、在Terminate階段,如果所有的資源都被釋放,通信雙方將回到Dead階段,直到通信雙方重新建立PPP連接。
PPP協(xié)議的幀格式:
1、Flag字段標(biāo)識一個物理幀的起始和結(jié)束,為二進(jìn)制序列01111110(0X7E)。
2、address字段,固定為11111111 (0XFF),是一個廣播地址。
3、control字段默認(rèn)為00000011(0X03),表明為無序號幀。
4、protocol字段用來說明PPP所封裝的協(xié)議報文類型,0XC021代表LCP報文,0XC023代表PAP報文,0XC223代表CHAP報文,0X0021代表IPV4報文。
5、FCS字段是個16位的校驗和,用于檢查PPP數(shù)據(jù)幀的完整性。
Information字段包含協(xié)議字段中指定協(xié)議的數(shù)據(jù)包。數(shù)據(jù)字段的默認(rèn)最大長度(不包括協(xié)議字段)稱為最大接收單元MRU(Maximum Receive Unit),MRU的缺省值為1500字節(jié)。如果協(xié)議字段被設(shè)為0XC021,則說明通信雙方正通過LCP報文進(jìn)行PPP鏈路的協(xié)商和建立:
1、Code字段主要是用來標(biāo)識LCP數(shù)據(jù)報文的類型。配置信息報文(Configure Packets: 0x01),配置成功信息報文(Configure-Ack: 0X02),終止請求報文(Terminate-Request:0X05)。
2、Identifier字段表示用來匹配請求和響應(yīng)報文。
3、length字段表示LCP的報文長度
Data字段為數(shù)據(jù)載荷,包含了多個TLV為可選項字段,包含類型、長度和數(shù)值
LCP報文類型和工作過程:
1、Configure-Request配置請求報文:鏈路層協(xié)商過程中發(fā)送的第一個報文,該報文表明點對點雙方開始進(jìn)行鏈路層參數(shù)的協(xié)商。可以協(xié)商的內(nèi)容如下:
---最大接收單元MRU,表示PPP數(shù)據(jù)幀中信息字段和填充字段的總長度;默認(rèn)值為1500字節(jié)。
---認(rèn)證協(xié)議,PAP協(xié)議和CHAP協(xié)議,一條PPP鏈路的兩端可以使用不同的認(rèn)證協(xié)議認(rèn)證對端,但是被認(rèn)證方必須支持認(rèn)證方要求使用的認(rèn)證協(xié)議并正確配置用戶名和密碼等認(rèn)證信息。
---魔術(shù)字,用來檢測鏈路環(huán)路和其它異常情況;魔術(shù)字為隨機(jī)產(chǎn)生的一個數(shù)字,隨機(jī)機(jī)制需要保證兩端產(chǎn)生相同魔術(shù)字的可能性幾乎為0。
---質(zhì)量協(xié)議,用來做QOS,設(shè)置數(shù)據(jù)轉(zhuǎn)發(fā)的優(yōu)先級。
---MP多鏈路參數(shù),用于做多根鏈路的捆綁。
---報頭/報文壓縮,是否需要做報文、報頭壓縮。
2、Configure-Ack配置響應(yīng)報文:收到對端發(fā)來的Configure-Request報文,如果參數(shù)取值完全接受,則以此報文響應(yīng)。
3、Configure-Nak配置不響應(yīng)報文:收到對端發(fā)來的Configure-Request報文,如果參數(shù)取值不被本端認(rèn)可,則發(fā)送此報文并且攜帶本端可接受的配置參數(shù)。
4、Configure-Reject配置拒絕報文:收到對端發(fā)來的Configure-Request報文,如果本端不能識別對端發(fā)送的Configure-Request中的某些參數(shù),則發(fā)送此報文并且攜帶那些本端不能認(rèn)別的配置參數(shù)。
PPP認(rèn)證模式一:PAP認(rèn)證
PAP認(rèn)證協(xié)議被稱為密碼認(rèn)證/兩次握手認(rèn)證協(xié)議,當(dāng)LCP協(xié)商完成后,認(rèn)證方要求被認(rèn)證方使用PAP進(jìn)行認(rèn)證;被認(rèn)證方將配置的用戶名和密碼信息使用Authenticate-Request報文以明文方式發(fā)送給認(rèn)證方;認(rèn)證方收到被認(rèn)證方發(fā)送的用戶名和密碼信息之后,根據(jù)本地配置的用戶名和密碼數(shù)據(jù)庫檢查用戶名和密碼信息是否匹配,如果匹配,則返回Authenticate-Ack報文,表示認(rèn)證成功。否則返回Authenticate-Nak報文,認(rèn)證失??;認(rèn)證過程由被認(rèn)證方主動發(fā)起。
PPP認(rèn)證模式二:CHAP認(rèn)證
CHAP認(rèn)證被稱為挑戰(zhàn)握手認(rèn)證協(xié)議/三次握手認(rèn)證協(xié)議;為了匹配請求報文和回應(yīng)報文,報文中含有Identifier字段,一次認(rèn)證過程所使用的報文均使用相同的Identifier信息(報文ID)。
當(dāng)LCP協(xié)商完成后,認(rèn)證方會發(fā)送一個Challenge報文給被認(rèn)證方,Challenge報文中含有Identifier信息(報文ID)和一個隨機(jī)產(chǎn)生的Challenge字符串(可防止重放攻擊),此Identifier即為后續(xù)報文所使用的Identifier。思科設(shè)備中,challenge報文中用戶名是一定添加的,如果接口配置了用戶名就發(fā)送,沒有配置就使用主機(jī)名發(fā)送;當(dāng)被認(rèn)證方收到此Challenge報文之后,進(jìn)行一次加密運算,運算公式為MD5{ Identifier+密碼+Challenge },意思是將Identifier、密碼和Challenge三部分連成一個字符串,然后對此字符串做MD5運算,得到一個16字節(jié)長的摘要信息,然后將此摘要信息和端口上配置的CHAP用戶名一起封裝在Response報文中發(fā)回認(rèn)證方。
認(rèn)證方接收到被認(rèn)證方發(fā)送的Response報文之后,按照其中的用戶名在本地查找相應(yīng)的密碼信息,得到密碼信息之后,進(jìn)行一次加密運算,運算方式和被認(rèn)證方的加密運算方式相同,然后將加密運算得到的摘要信息和Response報文中封裝的摘要信息做比較,相同則認(rèn)證成功,不相同則認(rèn)證失?。皇褂肅HAP認(rèn)證方式時,被認(rèn)證方的密碼是被加密后才進(jìn)行傳輸?shù)模@樣就極大的提高了安全性。
思科設(shè)備上CHAP認(rèn)證規(guī)則:
1、 如果被認(rèn)證方收到的challenge報文中一定包含用戶名,被認(rèn)證方必須出示接口所配置的用戶名和密碼,被認(rèn)證方會根據(jù)用戶名在本地AAA認(rèn)證數(shù)據(jù)庫里面找有沒有對應(yīng)的用戶名、密碼條目;AAA認(rèn)證數(shù)據(jù)庫里密碼出示優(yōu)先級高于被認(rèn)證方接口的配置密碼,會使用AAA認(rèn)證數(shù)據(jù)庫里用戶名和密碼進(jìn)行認(rèn)證。
NCP:網(wǎng)絡(luò)控制協(xié)議,用于對兩端設(shè)備IP地址信息進(jìn)行確認(rèn)(以IPV4CP為例)。
1. 每一端都要發(fā)送Configure-Request報文,在此報文中包含本地配置的IP地址;
2. 每一端接收到此Configure-Request報文之后,檢查其中的IP地址,如果IP地址是一個合法的單播IP地址,而且和本地配置的IP地址不同(沒有IP沖突),則認(rèn)為對端可以使用該地址,回應(yīng)一個Configure-Ack報文。
1、RTA向RTB發(fā)送一個Configure-Request報文,此報文中會包含一個IP地址0.0.0.0,表示向?qū)Χ苏埱驣P地址;
2、RTB收到上述Configure-Request報文后,認(rèn)為其中包含的地址(0.0.0.0)不合法,使用Configure-Nak回應(yīng)一個新的IP地址10.1.1.1;
3、RTA收到此Configure-Nak報文之后,更新本地IP地址,并重新發(fā)送一個Configure-Request報文,包含新的IP地址10.1.1.1;
4、RTB收到Configure-Request報文后,認(rèn)為其中包含的IP地址為合法地址,回應(yīng)一個Configure-Ack報文;RTB也要向RTA發(fā)送Configure-Request報文請求使用地址10.1.1.2,RTA認(rèn)為此地址合法,回應(yīng)Configure-Ack報文。