什么是PPP 協議?PPP 協議詳解
1 點對點協議PPP(Point-to-Point Protocol)
PPP(Point-to-Point Protocol),鏈路層協議。PPP是為了在點對點物理鏈路(例如RS232串口鏈路、電話ISDN線路等)上傳輸OSI模型中的網絡層報文而設計的,它改進了之前的一個點對點協議-SLIP協議–只能同時運行一個網絡協議、無容錯控制、無授權等許多缺陷,PPP是現在最流行的點對點鏈路控制協議。這種連接提供了同時的雙向的全雙工操作,并且假定數據包是按順序投遞的。PPP連接提供了一種廣泛的解決辦法,方便地將多種多樣不同的值作為最大接收單元的值。
幀格式與HDLC相似,不同的是PPP是面向字符,HDLC是面向位的。PPP屬于廣域網范疇,MAC是局域網范疇,按實際情況和環境就選用不同的協議,PPP支持的網絡結構只能是點對點,MAC支持多點對多點。 這類廣域網協議,其幀的結構與以太網的完全不同,當然,PPPOE除外,因為PPPOE是基于以太網上的,而其它的如PPP,FR,X.25等卻并不是。 PPP協議是目前廣域網上應用最廣泛的協議之一,它的優點在于簡單、具備用戶驗證能力、可以解決IP分配等。
1.1 PPP協議功能
(1) 簡單:在同一條物理鏈路上進行點對點的數據傳輸,對數據鏈路層的幀不進行糾錯,不需要序號,不需要流量控制。
(2) 封裝成幀:加入幀界定符。
(3) 透明性:字節填充法。
(4) 多種網絡層協議:在同一條物理鏈路上同時支持多種網絡層協議(如IP和IPX等)的運行。
(5) 多種鏈路類型:PPP必須能夠在多種類型的鏈路上運行,例如串行或并行鏈路。
(6) 差錯檢測:接收方收到一個幀后進行CRC檢驗,若正確就收下這個幀,反之則丟棄。
(7) 檢測連接狀態:自動檢測鏈路是否處于正常工作狀態。
1.2 PPP協議組成
(1) 提供一個將IP數據報封裝到串行鏈路的方法。IP數據報在PPP幀中就是信息部分,長度受最大傳送單元MTU的限制。PPP支持異步鏈路(無奇偶校驗的8比特數據)和面向比特的同步鏈路。
(2) 鏈路控制協議LCP(Link Control Protocol)
當線路不再需要時,挑出這些線路,測試它們,商議選擇,并仔細地再次釋放鏈路控制協議。
(3) 一套網絡控制協議NCP(Network Control Protocol)
其中每一個協議支持不同的網絡層協議,如IP、OSI的網絡層等。
(4) 認證協議
最常用的包括口令驗證協議PAP(Password Authentication Protocol)和挑戰握手驗證協議CHAP(Challenge-Handshake Authentication Protocol)。
1.3 PPP幀格式
(1) 首部
字段
長度
說明
F
1字節
標志字段F,固定為0x7E,標志一個幀的開始或結束。連續2個幀之間只需要一個標志字段,如果出現連續兩個標志字段,表示這是一個空幀。
A
1字節
地址字段A是固定不變的,為0xFF。
C
1字節
控制字段C是固定不變的,為 0x03。
協議
2字節
協議字段不同,后面信息部分表示的數據類型不同。
0x0021——信息字段是IP數據報
0xC021——信息字段是鏈路控制數據LCP
0x8021——信息字段是網絡控制數據NCP
0xC023——信息字段是安全性認證PAP
0xC025——信息字段是LQR
0xC223——信息字段是安全性認證CHAP
(2) 信息部分
長度不超過1500字節 。
(3) 字節填充法
(a) 當信息字段中出現0x7E時,將每一個0x7E字節轉變成2字節序列(0x7D,0x5E)。
(b) 若信息字段中出現一個0x7D的字節,則將其轉變成2字節序列(0x7D,0x5D)。
(c) 若信息字段中出現ASCII碼的控制字符(即數值小于0X20的字符),則該字符前面需要加入一個0x7D字節,同時將該字符的編碼加以改變(+20)。例如,出現0x03,就要把它轉為2字節序列(0x7D,0x23)
(4) 0比特填充法
PPP協議用在SONET/SDH鏈路時,使用同步傳輸(一連串的比特連續傳送),此時使用0比特填充法。
(a) 在發送端掃描整個信息字段,當有5個1連續出現時,立即填入一個0,保證信息字段中不會出現6個連續1。
(b) 在接收端刪除連續5個1后面的0。
(5) 尾部
FCS:使用CRC的幀校驗序列。
2 PPP協議的工作狀態
PPP通訊是兩個端點之間的通訊,每一端必須首先發送LCP packets數據來設定和測試數據鏈路,當鏈路建立后,peer才可以被認證,認證完成后,再通過發送NCP packets來選定網絡層協議,這些后續的通訊就可以在網絡層進行了。
具體的過程如下:
序號
狀態
說明
1
鏈路靜止狀態
鏈路一定開始并結束于這個階段。當一個外部事件(例如載波偵聽或網絡管理員設定)指出物理層已經準備就緒時,PPP將進入鏈路建立階段。在這個階段,LCP自動機器將處于初始狀態,向鏈路建立階段的轉換將給LCP自動機器一個UP事件信號。
2
鏈路建立狀態
LCP用于交換配置信息包(Configure packets),建立連接。一旦一個配置成功信息包(Configure-Ackpacket)被發送且被接收,就完成了交換,進入了LCP開啟狀態。所有的配置選項都假定使用默認值,除非被配置交換所改變。有一點要注意:只有不依賴于特別的網絡層協議的配置選項才被LCP配置。在網絡層協議階段,個別的網絡層協議的配置由個別的網絡控制協議(NCP)來處理。在這個階段接收的任何非LCPpackets必須被silentlydiscarded(靜靜的丟棄)。收到LCPConfigure-Request(LCP配置要求)能使鏈路從網絡層協議階段或者認證階段返回到鏈路建立階段。
3
認證階段
在一些鏈路上,在允許網絡層協議packets交換之前,鏈路的一端可能需要peer去認證它。認證是不需要強制執行的。如果一次執行希望peer根據某一特定的認證協議來認證,那么它必須在鏈路建立階段要求使用那個認證協議。應該盡可能在鏈路建立后立即進行認證。鏈路質量檢查可以同時發生。在認證完成之前,禁止從認證階段前進到網絡層協議階段。如果認證失敗,認證者應該躍遷到鏈路終止階段。
在這一階段里,只有鏈路控制協議、認證協議,和鏈路質量監視協議的packets是被允許的。在該階段里接收到的其他的packets必須被靜靜的丟棄。
4
網絡層協議階段
一旦PPP完成了前面的階段,每一個網絡層協議(例如IP,IPX,或AppleTalk)必須被適當的網絡控制協議(NCP)分別設定。比如,NCP可以給新接入的PC機分配一個臨時的IP地址,這樣PC機就成為Internet上一個主機了。每個NCP可以隨時被打開和關閉。當一個NCP處于Opened狀態時,PPP將攜帶相應的網絡層協議packets。當相應的NCP不處于Opened狀態時,任何接收到的被支持的網絡層協議packets都將被靜靜的丟棄。
5
鏈路終止階段
PPP可以在任意時間終止鏈路。引起鏈路終止的原因很多:載波丟失、認證失敗、鏈路質量失敗、空閑周期定時器期滿、或者管理員關閉鏈路。LCP用交換Terminate(終止)packets的方法終止鏈路。當鏈路正被關閉時,PPP通知網絡層協議,以便他們可以采取正確的行動。交換Terminate(終止)packets之后,執行應該通知物理層斷開,以便強制鏈路終止,尤其當認證失敗時。Terminate-Request(終止-要求)的發送者,在收到Terminate-Ack(終止-允許)后,或者在重啟計數器期滿后,應該斷開連接。收到Terminate-Request的一方,應該等待peer去切斷,在發出Terminate-Request后,至少也要經過一個Restarttime(重啟時間),才允許斷開。PPP應該前進到鏈路死亡階段。在該階段收到的任何非LCPpackets,必須被靜靜的丟棄。