PPP協議
來源 https://zhuanlan.zhihu.com/p/153515394
參考 https://www.zhihu.com/column/c_1226502762952912896
以太網協議用在局域網中,一般使用以太網口進行互聯;
廣域網中經常會使用串行鏈路來提供遠距離的數據傳輸,高級數據鏈路控制HDLC(High-Level Data Link Control)和點對點協議PPP( Point to Point Protocol)是兩種典型的串口封裝協議。
HDLC(High-level Data Link Control),高級數據鏈路控制,簡稱HDLC,是一種面向比特的鏈路層協議,現在幾乎不用。
PPP協議是一種點到點(一根鏈路兩端只有兩個接口)鏈路層協議,主要用於在全雙工的同異步鏈路上進行點到點的數據傳輸。
今天我們主要就講下PPP協議。
正文
1:串口和以太網口的區別
串口(serial):一般用於廣域網,它可以做為PPP,幀中繼等網絡類型的連接端口,用於遠距離數據傳輸。
以太網口(Ethernet):一般用於局域網,它可以作為以太網的連接端口,用於短距離數據傳輸。
2:什么是PPP
PPP協議是一種點到點鏈路層協議,主要用於在全雙工的同異步鏈路上進行點到點的數據傳輸。
什么是同步、異步呢?這是一種傳輸方式。
數據傳輸方式(data transmission mode)
數據傳輸方式(data transmission mode),是數據在信道上傳送所采取的方式。
- 若按數據傳輸的順序可以分為並行傳輸和串行傳輸;
- 若按數據傳輸的同步方式可分為同步傳輸和異步傳輸;
- 若按數據傳輸的流向和時間關系可以分為單工、半雙工和全雙工數據傳輸
串行鏈路中定義了兩種數據傳輸方式:異步和同步。
異步傳輸:是以字節為單位來傳輸數據,並且需要采用額外的起始位和停止位來標記每個字節的開始和結束。起始位為二進制值0,停止位為二進制值1。在這種傳輸方式下,開始和停止位占據發送數據的相當大的比例,每個字節的發送都需要額外的開銷。
同步傳輸:是以幀為單位來傳輸數據,在通信時需要使用時鍾來同步本端和對端的設備通信。DCE即數據通信設備,它提供了一個用於同步DCE設備和DTE設備之間數據傳輸的時鍾信號。DTE即數據終端設備,它通常使用DCE產生的時鍾信號。
3:PPP協議特點
- PPP既支持同步傳輸又支持異步傳輸,而X.25、FR(Frame Relay)等數據鏈路層協議僅支持同步傳輸,SLIP僅支持異步傳輸。
- PPP協議具有很好的擴展性,例如,當需要在以太網鏈路上承載PPP協議時,PPP可以擴展為PPPoE。
- PPP提供了LCP(Link Control Protocol)協議,用於各種鏈路層參數的協商。
- PPP提供了各種NCP(Network Control Protocol)協議(如IPCP、IPXCP),用於各網絡層參數的協商,更好地支持了網絡層協議。
- PPP提供了認證協議:CHAP(Challenge-Handshake Authentication Protocol)、PAP(Password Authentication Protocol),更好的保證了網絡的安全性。
- 無重傳機制,網絡開銷小,速度快。
4:PPP協議報文格式
1、Flag域:標識一個物理幀的起始和結束,該字節為二進制序列01111110(0X7E);
2、Address 域:字節固定為11111111 (0XFF),是一個廣播地址;
3、Control 域:默認為00000011(0X03),表明為無序號幀;
4、Protocol字段:用來說明PPP所封裝的協議報文類型;
典型的字段值有:0XC021代表LCP報文,0XC023代表PAP報文,0XC223代表CHAP報文。如果協議字段被設為0XC021,則說明通信雙方正通過LCP報文進行PPP鏈路的協商和建立:
5、information字段:包含協議字段中指定協議的數據包。
- Code字段,主要是用來標識LCP數據報文的類型。
典型的報文類型有:配置信息報文(Configure Packets: 0x01),配置成功信息報文(Configure-Ack: 0X02),終止請求報文(Terminate-Request:0X05)。 - Identifier域為1個字節,用來匹配請求和響應。
- 數據字段的默認最大長度(不包括協議字段)稱為最大接收單元MRU(Maximum Receive Unit),MRU的缺省值為1500字節。
6、幀校驗序列(FCS):是個16位的校驗和,用於檢查PPP幀的完整性。
5:PPP鏈路建立狀態機
Dead階段:也稱為物理層不可用階段。當通信雙方的兩端檢測到物理線路激活時,就會從Dead階段遷移至Establish階段,即鏈路建立階段。
Establish階段:PPP鏈路進行LCP參數協商。協商內容包括最大接收單元MRU、認證方式、魔術字(Magic Number)等選項。LCP參數協商成功后會進入Opened狀態,表示底層鏈路已經建立。
Authenticate階段:多數情況下,鏈路兩端的設備是需要經過認證階段(Authenticate)后才能夠進入到網絡層協議階段。PPP鏈路在缺省情況下是不要求進行認證的。如果要求認證,則在鏈路建立階段必須指定認證協議。認證方式是在鏈路建立階段雙方進行協商的。如果在這個階段再次收到了Configure-Request報文,則又會返回到鏈路建立階段。
Network階段:PPP鏈路進行NCP協商。通過NCP協商來選擇和配置一個網絡層協議並進行網絡層參數協商。只有相應的網絡層協議協商成功后,該網絡層協議才可以通過這條PPP鏈路發送報文。如果在這個階段收到了Configure-Request報文,也會返回到鏈路建立階段。NCP協商成功后,PPP鏈路將保持通信狀態。
PPP運行過程中,可以隨時中斷連接,例如物理鏈路斷開、認證失敗、超時定時器時間、管理員通過配置關閉連接等動作都可能導致鏈路進入Terminate階段。
在Terminate階段,如果所有的資源都被釋放,通信雙方將回到Dead階段,直到通信雙方重新建立PPP連接。
6:PPP工作原理
如圖所示:RTA和RTB使用串行鏈路相連,運行PPP協議。
階段一:LCP鏈路協商階段
當物理層鏈路變為UP之后,RTA和RTB使用LCP協商鏈路參數。
LCP報文攜帶的一些常見的配置參數有MRU,認證協議,以及魔術字。
1、MRU參數使用接口上配置的最大傳輸單元(MTU)值來表示。
2、常用的PPP認證協議有PAP和CHAP,一條PPP鏈路的兩端可以使用不同的認證協議認證對端,但是被認證方必須支持認證方要求使用的認證協議並正確配置用戶名和密碼等認證信息。
3、LCP使用魔術字來檢測鏈路環路和其它異常情況。魔術字為隨機產生的一個數字,隨機機制需要保證兩端產生相同魔術字的可能性幾乎為0。
LCP用於鏈路層參數協商所使用四種報文類型:
- Configure-Request(配置請求):鏈路層協商過程中發送的第一個報文,該報文表明點對點雙方開始進行鏈路層參數的協商。
- Configure-Ack(配置響應):收到對端發來的Configure-Request報文,如果參數取值完全接受,則以此報文響應。
- Configure-Nak(配置不響應):收到對端發來的Configure-Request報文,如果參數取值不被本端認可,則發送此報文並且攜帶本端可接受的配置參數。
- Configure-Reject(配置拒絕):收到對端發來的Configure-Request報文,如果本端不能識別對端發送的Configure-Request中的某些參數,則發送此報文並且攜帶那些本端不能認別的配置參數.
下面一起看下LCP協商階段的工作過程:
情況一:
1、RTA首先發送一個Configure-Request報文,此報文中包含RTA上配置的鏈路層參數。
2、當RTB收到此Configure-Request報文之后,如果RTB能識別並接受此報文中的所有鏈路層參數,則向RTA回應一個Configure-Ack報文。
注:
1、RTA在沒有收到Configure-Ack報文的情況下,會每隔3秒重傳一次Configure-Request報文,如果連續10次發送Configure-Request報文仍然沒有收到Configure-Ack報文,則認為對端不可用,停止發送Configure-Request報文。
2、完成上述過程只是表明RTB認為RTA上的鏈路參數配置是可接受的。RTB也需要向RTA發送Configure-Request報文,使RTA檢測RTB上的鏈路參數是不是可接受的。
情況二:
1、RTA首先發送一個Configure-Request報文,此報文中包含RTA上配置的鏈路層參數。
2、當RTB收到RTA發送的Configure-Request報文之后,如果RTB能識別此報文中攜帶的所有鏈路層參數,但是認為部分或全部參數的取值不能接受,即參數的取值協商不成功,則RTB需要向RTA回應一個Configure-Nak報文。
在這個Configure-Nak報文中,只包含不能接受的鏈路層參數,並且此報文所包含的鏈路層參數均被修改為RTB上可以接受的取值(或取值范圍)。
3、在收到Configure-Nak報文之后,RTA需要根據此報文中的鏈路層參數重新選擇本地配置的其它參數,並重新發送一個Configure-Request。
情況三:
1、RTA首先發送一個Configure-Request報文,此報文中包含RTA上配置的鏈路層參數。
2、當RTB收到RTA發送的Configure-Request報文之后,如果RTB不能識別此報文中攜帶的部分或全部鏈路層參數,則RTB需要向RTA回應一個Configure-Reject報文。在此Configure-Reject報文中,只包含不能被識別的鏈路層參數。
3、在收到Configure-Reject報文之后,RTA需要向RTB重新發送一個Configure-Request報文,在新的Configure-Request報文中,不再包含不被對端(RTB)識別的參數。
階段二:PPP認證階段:
與其他數據鏈路層協議相比,PPP協議的一個重要特點是可以提供認證功能,鏈路兩端可以協商使用何種認證協議來實施認證過程,只有認證成功之后才會建立連接。
PPP支持PAP和CHAP兩種認證方式。
PAP認證協議工作原理:
PAP認證的工作原理較為簡單。PAP認證協議為兩次握手認證協議,密碼以明文方式在鏈路上發送。
1、被認證方將配置的用戶名和密碼信息使用Authenticate-Request報文以明文方式發送給認證方。
2、認證方收到被認證方發送的用戶名和密碼信息之后,根據本地配置的用戶名和密碼數據庫檢查用戶名和密碼信息是否匹配。
- 如果匹配,則返回Authenticate-Ack報文,表示認證成功。
- 否則,返回Authenticate-Nak報文,表示認證失敗。
CHAP認證協議工作原理:
CHAP認證過程需要三次報文的交互。為了匹配請求報文和回應報文,報文中含有Identifier字段,一次認證過程所使用的報文均使用相同的Identifier信息。
1、LCP協商完成后,認證方發送一個Challenge報文給被認證方,報文中含有Identifier信息和一個隨機產生的Challenge字符串,此Identifier即為后續報文所使用的Identifier。
2、被認證方收到此Challenge報文之后,進行一次加密運算,運算公式為MD5{ Identifier+密碼+Challenge },意思是將Identifier、密碼和Challenge三部分連成一個字符串,然后對此字符串做MD5運算,得到一個16字節長的摘要信息,然后將此摘要信息和端口上配置的CHAP用戶名一起封裝在Response報文中發回認證方。
3、認證方接收到被認證方發送的Response報文之后,按照其中的用戶名在本地查找相應的密碼信息,得到密碼信息之后,進行一次加密運算,運算方式和被認證方的加密運算方式相同,然后將加密運算得到的摘要信息和Response報文中封裝的摘要信息做比較,相同則認證成功,不相同則認證失敗。
使用CHAP認證方式時,被認證方的密碼是被加密后才進行傳輸的,這樣就極大的提高了安全性。
階段三:NCP地址協商階段
PPP定義了一組網絡層控制協議NCP,每一個NCP對應了一種網絡層協議,用於協商網絡層地址等參數,例如IPCP用於協商控制IP協議,IPXCP用於協商控制IPX協議等。
IP地址協商包括兩種方式:靜態配置協商和動態配置協商。
IPCP靜態地址協商:
1. 每一端都要發送Configure-Request報文,在此報文中包含本地配置的IP地址;
2. 每一端接收到此Configure-Request報文之后,檢查其中的IP地址,如果IP地址是一個合法的單播IP地址,而且和本地配置的IP地址不同(沒有IP沖突),則認為對端可以使用該地址,回應一個Configure-Ack報文。
IPCP動態地址協商:
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報文。
5、同時,RTB也要向RTA發送Configure-Request報文請求使用地址10.1.1.2,RTA認為此地址合法,回應Configure-Ack報文。
================ End