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