PPP協(xié)議概述
點對點協(xié)議(Point-to-Point Protocol, PPP):PPP協(xié)議是點對點訪問應(yīng)用最多的協(xié)議。PPP協(xié)議其實是一個協(xié)議族,包含多個協(xié)議(LCP,NCP等)。
PPP協(xié)議的組成
PPP協(xié)議有三個組成部分:
(1) 一種將封裝了多種協(xié)議的數(shù)據(jù)報傳輸?shù)?strong>串行鏈路的方法。
(2)鏈路控制協(xié)議(Link Control Protocol, LCP),LCP協(xié)議是PPP協(xié)議的一部分。它用于建立、配置、測試數(shù)據(jù)鏈路的連接。
(3)一套網(wǎng)絡(luò)控制協(xié)議(Network Control Protocol, NCP),NCPs是一系列協(xié)議,用于建立和配置不同的網(wǎng)絡(luò)層協(xié)議。每個NCP協(xié)議都支持不同的網(wǎng)絡(luò)層協(xié)議,比如IP協(xié)議,OSI的網(wǎng)絡(luò)層,蘋果的Appple Talk等。
PPP協(xié)議的幀格式
下圖展示了PPP幀的各個字段:
標(biāo)志字段
標(biāo)志(flag):首部的第一個字段和尾部的最后一個字段都是標(biāo)志字段F(flag),規(guī)定的值用十六進制表示為:0x7E = 01111110。標(biāo)志字段是PPP幀的定界符。連續(xù)兩幀之間只有一個標(biāo)志字段。如果數(shù)據(jù)字段碰巧出現(xiàn)了標(biāo)志字段的值,則需要在數(shù)據(jù)字段進行字節(jié)填充,來消除這種歧義。
PPP協(xié)議可以應(yīng)用在異步傳輸或者同步傳輸中,異步傳輸以字節(jié)為單位傳輸,同步傳輸以比特為單位傳輸。所以填充方式也分為字節(jié)填充和比特填充。
字節(jié)填充
字節(jié)填充(byte stuffing):當(dāng)PPP使用異步傳輸時,如果信息字段出現(xiàn)了和標(biāo)志字段一樣的字節(jié)(0x7E),就需要進行字節(jié)填充,核心思路是通過在該字節(jié)前面填充轉(zhuǎn)義字符(escape character, ESC)。
PPP協(xié)議字節(jié)填充的規(guī)則如下圖所示:
規(guī)則如下:
- 當(dāng)信息字段出現(xiàn)標(biāo)志字段的0x7E這個字節(jié)時,PPP協(xié)議會把0x7E改為0x5E,并且在前面加上規(guī)定好的轉(zhuǎn)義字符0x7D,也就是把0x7E變成0x7D5E。
- 如果轉(zhuǎn)移字符0x7D本身出現(xiàn)在幀中,就用2字節(jié)序列0x7D5D替換,把0x7D變成0x7D5E。也就是先把0x7D變成0x5D,再在前面加上一個0x7D。
- 如果信息字段出現(xiàn)ASCII碼的控制字符(即數(shù)值小于0x20 = 小于十進制32的字符),則將該字節(jié)加上0x20,比如0x03(ASCII碼的傳輸結(jié)束控制字符ETX)就變成0x23。然后再在前面加上轉(zhuǎn)義字符0x7D。拿0x03舉例,就變成字符序列0x7D23。
當(dāng)接收點接收到填充后的幀后,就采取相反的變換,恢復(fù)填充前的數(shù)據(jù)信息。
比特填充
比特填充:PPP協(xié)議在用在同步光纖網(wǎng)絡(luò)等鏈路時,會使用同步傳輸(將一連串的比特連續(xù)傳送,而不是按字節(jié)為單位傳送)。這時候PPP協(xié)議采用比特填充。
PPP協(xié)議比特填充的規(guī)則如下圖所示:
規(guī)則如下:
- 發(fā)送端會掃描整個數(shù)據(jù)字段(用硬件實現(xiàn)),只要發(fā)現(xiàn)5個連續(xù)的1,就立即填入一個0。這就保證數(shù)據(jù)字段不會出現(xiàn)6個連續(xù)的1,也就不會出現(xiàn)和標(biāo)志字段0111 1110相同的比特組合。
- 接收方在接受到幀之后,先找到首部的標(biāo)志字段,然后也用硬件對之后的比特流進行掃描,每當(dāng)發(fā)現(xiàn)5個連續(xù)1時,就把5個1之后的0刪除,也就逆向操作還原了數(shù)據(jù)字段。等再次遇到0111 1110的標(biāo)志字段后,就說明整個幀結(jié)束了。
透明傳輸
不管是字節(jié)填充(也叫字符填充)還是比特填充,目標(biāo)都是實現(xiàn)透明傳輸。
透明傳輸(Transparent transmission):在傳輸過程中,不管所傳數(shù)據(jù)是什么樣的比特組合,都能夠在鏈路上正常傳送。對于數(shù)據(jù)而言,傳輸?shù)逆溌贩路鹜该鞑淮嬖谝粯?,它只是一個通道,能夠?qū)?shù)據(jù)傳過去,不會對數(shù)據(jù)本身有任何影響和限制。
比如寄信就是透明傳輸,你只需要把信件放到郵箱,至于信怎么到你收信的地址,你不需要了解。
而PPP協(xié)議正是利用了字節(jié)填充或者比特填充,消除了數(shù)據(jù)字段的某個字節(jié)碰巧和特殊的標(biāo)志字段比特組合相同的情況,讓上層協(xié)議的數(shù)據(jù)字段可以用任意的比特組合。PPP協(xié)議也是一種透明傳輸。
地址字段和控制字段
地址字段(address)和控制字段(control):都是借鑒了HDLC協(xié)議的地址和控制字段的格式。但是,在PPP中這2個字段目前還沒有參與使用。
地址字段原本指示哪個站正在處理,但是PPP只有一個目的地,所以地址字段被設(shè)置為固定值0xFF(表示所有站)。
而控制字段用于指示幀序列和重傳行為(應(yīng)用于可靠傳輸),但是鏈路層的可靠性不依靠簡單的PPP協(xié)議實現(xiàn)。所以控制字段設(shè)置為固定值0x03。
實際傳輸中,經(jīng)常使用一個稱為地址和控制字段壓縮(ACFC)的選項來省略它們,也就是發(fā)送方和接收方會約定好消除這2個字節(jié)。
協(xié)議字段
協(xié)議字段(protocol):協(xié)議字段表明PPP攜帶的數(shù)據(jù)字段的協(xié)議類型。PPP協(xié)議可以攜帶多種協(xié)議,所以需要協(xié)議字段確定數(shù)據(jù)字段使用的協(xié)議類型。包括各種網(wǎng)絡(luò)層協(xié)議,NCP協(xié)議和LCP協(xié)議。
該字段默認為2個字節(jié),但是可以通過一個叫協(xié)議字段壓縮(PFC)的選項,雙方在鏈路建立時協(xié)商,將協(xié)議字段壓縮為1個字節(jié)。
當(dāng)協(xié)議字段值為0x0021時,PPP的信息字段就是IP數(shù)據(jù)報。
當(dāng)協(xié)議字段值為0xC021時,信息字段就是LCP分組。
當(dāng)協(xié)議字段值為0x8021時,信息字段就是NCP的IPCP協(xié)議分組。
當(dāng)協(xié)議字段值為0xC023時,信息字段就是PAP鑒別協(xié)議。
當(dāng)協(xié)議字段值為0xC223時,信息字段就是CHAP鑒別協(xié)議。
有效數(shù)據(jù)部分
數(shù)據(jù)字段是PPP協(xié)議的有效載荷信息,它的長度是可變的,最多不超過1500字節(jié)。
幀檢驗序列FCS字段
幀檢驗序列(Frame Check Sequence, FCS):FCS字段是用于差錯檢測的,讓接收方可以知曉收到的幀是否出了差錯。它只能檢錯,不能糾錯。
PPP的差錯檢測使用的是循環(huán)冗余校驗CRC算法。想了解CRC算法可以閱讀我的這篇博文:循環(huán)冗余校驗CRC
PPP幀的FCS一般是16位的生成多項式(叫做CRC-16,為 x 16 x^{16} x16+ x 12 x^{12} x12+ x 5 x^{5} x5+1 = 1 0001 0000 0010 0001)。而通過協(xié)商,LCP選項可將FCS擴展為32位,使用32位的生成多項式CRC-32。
所以,PPP幀的FCS字段為2或者4個字節(jié)。
PPP協(xié)議的工作狀態(tài)
鏈路的連接是需要分階段完成的,包括:閑置、建立、鑒別、聯(lián)網(wǎng)、打開、終止再到再一次閑置。
在每個階段PPP協(xié)議數(shù)據(jù)字段的協(xié)議都不同,理解鏈路連接的各個階段才能完全理解PPP的工作模式。
- 閑置:此時鏈路沒有被使用。發(fā)送方和接收方之間并不存在物理層和鏈路層的連接(比如個人用戶剛開始還沒有連接上本地ISP)。
- 建立:如果雙方想進行鏈路的連接,首選需要進入建立階段。此階段LCP協(xié)議會起作用(也就是PPP幀會封裝LCP協(xié)議,雙方通過交換包含LCP協(xié)議的PPP幀來完成建立工作)。發(fā)送方會和接收方交換LCP分組,用于協(xié)商一些選項的配置(比如幀的有效載荷大小,是否壓縮PPP的協(xié)議字段等)。(其實嚴格說,建立階段需要物理層和數(shù)據(jù)鏈路層兩層同時起作用,發(fā)送方一開始是先發(fā)送物理層的載波信號,等建立物理層連接后,再協(xié)商鏈路層連接需要的選項配置)。
- 鑒別:鑒別階段是可選的。主要目的是鑒別發(fā)送方的身份,根據(jù)鑒別報文的ID和口令等身份信息,接收方來決定是否要和發(fā)送方通信。如果發(fā)送方身份被接收方認可,就進入聯(lián)網(wǎng)階段,否則直接進入終止階段。常用的鑒別協(xié)議是PAP協(xié)議和CHAP協(xié)議。
- 聯(lián)網(wǎng):聯(lián)網(wǎng)階段是對網(wǎng)絡(luò)層協(xié)議的協(xié)商。通過對應(yīng)的網(wǎng)絡(luò)控制協(xié)議NCP來完成。因為PPP協(xié)議支持多種網(wǎng)絡(luò)層協(xié)議,雙方必須在進行數(shù)據(jù)報傳輸前,確定到底交換哪種網(wǎng)絡(luò)層協(xié)議,對應(yīng)網(wǎng)絡(luò)層協(xié)議的相關(guān)規(guī)定也要達成一致。比如,如果PPP協(xié)議要封裝IP數(shù)據(jù)報,那就需要在雙方配置交換IP數(shù)據(jù)報需要的模塊。雙方會交換IP控制協(xié)議IPCP來完成配置工作。
- 打開:到打開階段,連接的相關(guān)配置才算完成,雙方才能正式進行數(shù)據(jù)分組的交換。直到連接終止前,雙方都可以進行數(shù)據(jù)的傳輸。在打開階段,雙方也可以交換回聲請求和回聲應(yīng)答LCP分組來檢查鏈路的連接狀態(tài)。
- 終止:如果雙方不需要交換數(shù)據(jù)分組,則可以利用LCP協(xié)議完成終止連接的操作。雙方會交換相關(guān)用于終止連接的LCP分組,來關(guān)閉鏈路。
PPP協(xié)議每個階段如何相互轉(zhuǎn)換可以參考下圖:
LCP協(xié)議
鏈路控制協(xié)議LCP(Link Control Protocol):LCP協(xié)議是用來建立、測試、監(jiān)控、終止鏈路的連接。在PPP工作的建立階段和終止階段,必須通過交換LCP分組控制鏈路的建立和終止。在PPP工作的打開階段,不僅可以發(fā)送網(wǎng)絡(luò)層的報文,也可以發(fā)送LCP的回聲請求和回聲應(yīng)答分組,測試鏈路是否正常連接。
LCP協(xié)議的報文格式如下圖所示:
編碼
編碼:編碼字段為1個字節(jié),用于確定LCP分組的類型,不同類型的LCP分組在鏈路連接的不同階段發(fā)揮不同的作用。
編碼 | 分組類型 | 說明 |
---|---|---|
0x01 | 配置請求 | 包含建議選項及其值的列表 |
0x02 | 配置確認 | 接受所有建議的選項 |
0x03 | 配置不確認 | 告知某些選項不能被接受 |
0x04 | 配置拒絕 | 告知某些選項不可識別 |
0x05 | 終止請求 | 請求關(guān)閉線路 |
0x06 | 終止確認 | 接受關(guān)閉請求 |
0x07 | 編碼拒絕 | 告知一個未知編碼 |
0x08 | 協(xié)議拒絕 | 告知一個未知協(xié)議 |
0x09 | 回聲請求 | 檢測另一端是否活動的一種呼叫報文 |
0x0A | 回聲應(yīng)答 | 對回聲請求報文的響應(yīng) |
0x0B | 丟棄請求 | 丟棄分組的請求 |
如上表所示,LCP分組類型可以分為3類:
- 在建立階段,雙方對選項配置的協(xié)商(前4種)。
- 在終止階段,用于鏈路終止(第5,6種)。
- 在打開階段,用于鏈路的測試和調(diào)試。
標(biāo)識
標(biāo)識(identification,ID):因為LCP分組經(jīng)常是成對出現(xiàn)的。比如發(fā)送方發(fā)送配置請求LCP分組,接收方可能會回復(fù)對應(yīng)的配置確認LCP分組。標(biāo)識就用于將請求和應(yīng)答分組匹配在一起。
首先,發(fā)送方會提供序列號,每發(fā)送一個消息進行遞增(這樣發(fā)送方的LCP報文的ID就不一樣了),接收方在生成對應(yīng)的應(yīng)答報文時,該報文的ID字段會復(fù)制請求報文的ID。這樣請求方收到應(yīng)答報文后,可以通過看標(biāo)識字段是否相同來匹配報文。
長度
長度:長度字段給出了LCP分組的字節(jié)長度,它不能超過鏈路的最大接受單元(MRU)。
選項
LCP協(xié)議常用于鏈路建立連接的階段,它會讓雙方協(xié)商選項的配置。選項并不在LCP的首部,而是LCP的數(shù)據(jù)部分。LCP的數(shù)據(jù)字段分為三段:選項類型、選項長度和選項值。下面是最常見的一些選項:
選項 | 默認值 |
---|---|
最大接受單位 | 1500 |
鑒別協(xié)議 | 無 |
協(xié)議字段壓縮 | 關(guān)閉 |
地址和控制字段壓縮 | 關(guān)閉 |
鑒別協(xié)議
PPP協(xié)議在鑒別階段會封裝鑒別協(xié)議(Authentication protocol, AP)。鑒別的作用是讓接受方識別發(fā)送方的身份。PPP有兩種鑒別協(xié)議:口令鑒別協(xié)議和查詢握手鑒別協(xié)議。
口令鑒別協(xié)議PAP
口令鑒別協(xié)議(Password Authentication Protocol, PAP):這是一種非常簡單的鑒別協(xié)議。它在PPP的協(xié)議字段的值為:0xC023。發(fā)送方需要提供鑒別身份(通常是用戶名)和口令(俗稱的密碼),接收方會檢測身份和口令的合法性,決定是否接受連接。
查詢握手鑒別協(xié)議CHAP
查詢握手鑒別協(xié)議(Challenge Handshake Authentication Protocol, CHAP):CHAP使用一個三步握手的鑒別方式,它不需要傳輸口令??诹钜婚_始發(fā)送方和接收方都是已知的。它在PPP的協(xié)議字段的值為:0xC223。
1.接收方會給發(fā)送方一個包含查詢值的查詢分組。
2.發(fā)送方根據(jù)該查詢分組結(jié)合口令生成一個結(jié)果,并把該結(jié)果作為響應(yīng)分組發(fā)送給接收方。
3.接收方也用同樣的方式生成一個結(jié)果,如果和發(fā)送方的結(jié)果一致,就允許訪問;否則訪問被拒絕。
這其實是很簡單的密碼學(xué)的原理,這比PAP協(xié)議安全很多。因為口令始終沒有在鏈路上傳輸。
網(wǎng)絡(luò)控制協(xié)議NCP
網(wǎng)絡(luò)控制協(xié)議(Network Control Protocol, NCP):這實際是一個協(xié)議組合,有多個NCP協(xié)議。因為PPP協(xié)議支持多種網(wǎng)絡(luò)層協(xié)議,比如IP協(xié)議,Xerox協(xié)議等,每一種網(wǎng)絡(luò)層協(xié)議在發(fā)送數(shù)據(jù)報之前,都需要對應(yīng)的網(wǎng)絡(luò)控制協(xié)議為其配置相關(guān)信息。比如IP數(shù)據(jù)報在鏈路層傳輸前,就需要IPCP協(xié)議配置好用來承載IP數(shù)據(jù)報的鏈路。
由于IP數(shù)據(jù)報非常重要,所以我著重介紹為其配置網(wǎng)絡(luò)信息的IPCP協(xié)議。
文章來源:http://www.zghlxwxcb.cn/news/detail-786341.html
IPCP協(xié)議
互聯(lián)網(wǎng)絡(luò)協(xié)議控制協(xié)議(Internet Protocol Control Protocol, IPCP):IPCP協(xié)議在PPP的協(xié)議字段的值為0x8021。
它的首部和LCP分組類似,也有編碼字段,標(biāo)識字段,長度字段。它的數(shù)據(jù)字段也包含可變的IPCP信息。
它的編碼字段有7種,編碼從0x01到0x07,每種編碼對應(yīng)不同的作用。
鏈路層需要傳輸IP數(shù)據(jù)報,必須用IPCP協(xié)議進行網(wǎng)絡(luò)層信息的配置,雙方達成一致之后,才可以進入打開狀態(tài),才能正常傳輸IP數(shù)據(jù)報。文章來源地址http://www.zghlxwxcb.cn/news/detail-786341.html
到了這里,關(guān)于PPP協(xié)議(詳解)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!