計算機(jī)網(wǎng)絡(luò)-3-2-點對點協(xié)議PPP

點對點協(xié)議PPP

在通信鏈路較差的年代,在數(shù)據(jù)鏈路層使用可靠傳輸協(xié)議曾經(jīng)是一種好方法,比較簡單的點對點PPP協(xié)議則是目前使用最廣泛的數(shù)據(jù)鏈路層協(xié)議。

PPP協(xié)議的特點

互聯(lián)網(wǎng)用戶通過都要連接到某個ISP才能接入到互聯(lián)網(wǎng)。PPP協(xié)議就是用戶計算機(jī)和ISP進(jìn)行通信時所使用的數(shù)據(jù)鏈路層協(xié)議。如圖(圖3-9)

image

ppp協(xié)議是IETF在1992年制定的,現(xiàn)在的PPP協(xié)議在1994年就已經(jīng)成為了互聯(lián)網(wǎng)的正式標(biāo)準(zhǔn)[RFC 1661]。

PPP協(xié)議應(yīng)該滿足的需求

IEFE認(rèn)為,在設(shè)計PPP協(xié)議的時候就應(yīng)該從以下方面考慮:

  1. 簡單
    數(shù)據(jù)鏈路層沒有必要提供比IP協(xié)議更多的功能,因此,對數(shù)據(jù)鏈路層的幀,不需要糾錯,不需要排序號,也不需要流量控制。

  2. 封裝成幀
    PPP協(xié)議必須規(guī)定特殊的字符作為幀定界符(即標(biāo)志一個幀的開始字符和結(jié)束字符),以便接收端從收到的比特流中能夠準(zhǔn)確地找出幀的開始和結(jié)束位置。

  3. 透明性
    PPP協(xié)議必須保持?jǐn)?shù)據(jù)傳輸?shù)耐该餍?,也就是說,如果數(shù)據(jù)當(dāng)中出現(xiàn)了與幀定界符一樣的比特組合的時候,就要采取有效的措施來解決這個問題。

  4. 多種網(wǎng)絡(luò)協(xié)議
    PPP協(xié)議能夠在同一條物理鏈路上同時支持多種網(wǎng)路層協(xié)議的運行,當(dāng)點對點鏈路所連接的是局域網(wǎng)或者路由器的時候,PPP協(xié)議必須同時支持在鏈路所連接的局域網(wǎng)或者路由器上運行的各種網(wǎng)絡(luò)協(xié)議。

  5. 多種類型鏈路
    除了要支持多種網(wǎng)絡(luò)層協(xié)議,還要支持在多種類型上的數(shù)據(jù)鏈路上運行。

  6. 差錯檢測
    PPP協(xié)議必須能夠?qū)邮斩私邮盏降臄?shù)據(jù)幀進(jìn)行幀檢測,如果出現(xiàn)錯誤,立即丟棄掉這個錯誤的幀,如果接收到的錯誤幀不丟棄,就會在網(wǎng)絡(luò)上繼續(xù)向前到網(wǎng)絡(luò)層進(jìn)行轉(zhuǎn)發(fā),這回白白丟棄掉很多的網(wǎng)絡(luò)資源。

  7. 檢測連接狀態(tài)
    PPP協(xié)議必須要有一種能夠自動檢測鏈路是否在正常工作的機(jī)制。

  8. 最大傳輸單元
    PPP協(xié)議必須對每一種類型的點對點鏈路設(shè)置最大傳輸單元MTU的標(biāo)準(zhǔn)默認(rèn)值(1500字節(jié)),這樣做是為了促進(jìn)各種實現(xiàn)之間的可操作性。如果高層協(xié)議發(fā)送的分組超過了MTU值,PPP就會丟棄掉這樣的幀,并返回差錯,報告給上層,需要注意的是,MTU是數(shù)據(jù)鏈路層的幀可以載荷的數(shù)據(jù)部分的最大長度,而不是幀的總長度。

  9. 網(wǎng)絡(luò)層地址協(xié)商
    PPP協(xié)議必須提供一種使通信的兩個網(wǎng)絡(luò)層(例如:兩個IP層)的實體能夠通過協(xié)商知道或者能夠配置彼此的網(wǎng)絡(luò)地址。協(xié)商的算法應(yīng)該盡可能的簡單,并且能夠在所有的請款下該得到結(jié)果。這對撥號連接的鏈路特別的重要,因為如果僅僅在鏈路層建立了連接而不知道對方的網(wǎng)絡(luò)層地址,則不能夠保證早網(wǎng)絡(luò)層傳輸分組

  10. 數(shù)據(jù)壓縮協(xié)商
    PPP協(xié)議必須能夠提供一種方法協(xié)商使用數(shù)據(jù)壓縮算法。但是PPP協(xié)議并不要求將數(shù)據(jù)壓縮到標(biāo)準(zhǔn)化。

在TCP/IP協(xié)議族中,可靠傳輸由傳輸層的TCP協(xié)議控制,因此數(shù)據(jù)鏈里層的PPP協(xié)議不需要進(jìn)行糾錯,不需要設(shè)置序列號,也不需要進(jìn)行流量控制。PPP協(xié)議不支持多點線路(即一個主站和鏈路上的多個從站i紀(jì)念性通信,它只支持點對點的鏈路通信。此外,PPP協(xié)議支支持全雙工鏈路)。

PPP協(xié)議的組成

PPP協(xié)議有以下三部分

  1. 一個將完整的IP數(shù)據(jù)報封裝到串行鏈路上。

  2. 一個用來建立,配置和測試數(shù)據(jù)鏈路層的鏈路控制協(xié)議LCP(Link Control Protocol)。通信的雙方可以協(xié)商一些選項。

  3. 一套網(wǎng)絡(luò)控制協(xié)議NCP,其中的每一個協(xié)議支持不同的網(wǎng)絡(luò)層協(xié)議,如IP層,DECnet等。

PPP協(xié)議的幀格式

各字段的意義

如圖
PPP幀的首部和尾部分別為四個字段和兩個字段。

image
  1. 首部的第一個字段和尾部的第二個字段都是標(biāo)志字段,規(guī)定為0x7E(01111110),標(biāo)志著一個幀的開始或者結(jié)束,因此標(biāo)志字段就是PPP幀的定界符。連續(xù)兩幀之間只需要用一個標(biāo)志字段,如果出現(xiàn)連續(xù)兩個標(biāo)志字段,則表示是一個空的PPP幀,應(yīng)當(dāng)丟棄。

2.首部當(dāng)中的地址字段A規(guī)定為0xFF,控制字段C規(guī)定為0x03(00000011)。(這兩個字段沒有實際什么用途)

  1. PPP首部的第四個字段是2字節(jié)的協(xié)議字段

    • 當(dāng)協(xié)議字段為0x0021,代表的是IP數(shù)據(jù)報;
    • 當(dāng)協(xié)議字段為0xC021,代表的是鏈路控制協(xié)議LCP數(shù)據(jù);
    • 當(dāng)協(xié)議字段為0x8021,代表的是網(wǎng)絡(luò)層的控制數(shù)據(jù);
  2. 信息字段的長度是可變的,但不能超過1500字節(jié)。

  3. 尾部的第一個字段(2字節(jié))是使用CRC的幀檢驗序列FCS。

字節(jié)填充

當(dāng)信息字段出現(xiàn)了0x7E這樣的比特流,就必須采取必要措施使得不會被接收端認(rèn)為這是幀定界符號。

當(dāng)PPP使用異步傳輸?shù)臅r候(逐個字符發(fā)送),把每一個0x7E字節(jié)轉(zhuǎn)變?yōu)閮蓚€字節(jié)序列(0x7D和0x5E),若信息字段中出現(xiàn)了0x7D或者0x5E這樣的轉(zhuǎn)義字符,則把0x7D轉(zhuǎn)變?yōu)?字節(jié)序列(0x7D和0x5D);如果出現(xiàn)了控制字符,例如0x03(在控制字符串表示傳輸結(jié)束),就變成2字節(jié)序列(0x7D,0x23)。由于在發(fā)送端進(jìn)行了字節(jié)填充,因此在鏈路上傳送的信息字節(jié)數(shù)就超過了原來的字節(jié)數(shù)。但接收端在收到字節(jié)后再進(jìn)行與發(fā)送端字節(jié)填充相反的交換,就可以正確的恢復(fù)出原來的信息。

0比特填充

當(dāng)PPP使用同步傳輸?shù)臅r候(一連串的比特發(fā)送),PPP協(xié)議采用的是0比特字節(jié)填充來實現(xiàn)透明傳輸。

image

具體做法是(如上圖):在發(fā)送端,先掃描整個信息段(通常使用硬件掃描,也可以使用軟件,不過比較慢),只要發(fā)現(xiàn)有5個連續(xù)的1,就立即填入一個0,因此經(jīng)過這種0比特填充后的數(shù)據(jù),就可以保證再信息字段中不會出現(xiàn)幀界定符號(01111110),接收端在接收到一個幀的時候,先找到一個標(biāo)志字段F(7E)邊界,接著再用硬件對其中的比特流進(jìn)行掃描。每當(dāng)發(fā)現(xiàn)連續(xù)的5個1的時候,就把這個連續(xù)的5個1后面的0刪除掉,以還原成原來的信息比特流(如圖3-11),這樣就保證了透明傳輸:在傳輸?shù)臄?shù)據(jù)比特流過程中可以傳送任意組合的比特流,而不會引起幀邊界的錯誤判斷。

PPP協(xié)議的工作狀態(tài)

剛才我們討論了PPP幀的格式和PPP幀是怎么組成的。但是PPP鏈路到底一開始是怎么被初始化的呢?當(dāng)用戶撥號進(jìn)入ISP后,就建立的一條從用戶個人電腦到ISP的ISP連接,這時,用戶個人電腦向ISP發(fā)送一系列的鏈路控制協(xié)議LCP分組(封裝成多個PPP幀),以便建立LCP連接,這些分組及其響應(yīng)選擇了將要使用的一些PPP參數(shù)。接著還要進(jìn)行網(wǎng)絡(luò)層配置,網(wǎng)絡(luò)控制協(xié)議NCP給新接入的用戶個人電腦分配了一個臨時的IP地址,這樣,用戶個人電腦就可以成為了互聯(lián)網(wǎng)上一個有IP地址的主機(jī)了。

當(dāng)用戶通信完畢后,NCP就釋放網(wǎng)絡(luò)層連接,收回原來分配出去的IP地址,接著LCP釋放數(shù)據(jù)鏈路層的連接,最后釋放的是物理層的連接。

上述過程可用圖3-12的狀態(tài)圖描述:

PPP鏈路的起始和終止?fàn)顟B(tài)永遠(yuǎn)是圖中的鏈路靜止狀態(tài),這時候用戶電腦和ISP的路由器之間并不存在物理層的連接。

當(dāng)用戶電腦通過調(diào)制解調(diào)器呼叫路由器的時候(屏幕上的連接按鈕),路由器就能檢測到調(diào)制解調(diào)器發(fā)出的載波信號,在雙方建立了物理層連接之后,PPP就進(jìn)入了鏈路建立狀態(tài),其目的是建立LCP連接。

這時候LCP開始協(xié)商一些配置項,即發(fā)送LCP的配置請求幀,這是個PPP幀,其協(xié)議字段為LCP的協(xié)議代碼(0xC021),而信息字段包含特定的配置請求。鏈路的另一端可以發(fā)送以下幾種響應(yīng)的一種:

  1. 配置確認(rèn)幀:所有選項都接受。

  2. 配置否認(rèn)幀:所有配置都理解但不能接受。

  3. 配置拒絕幀:選項中有的無法識別或者不能接受,需要協(xié)商。

image

協(xié)商結(jié)束后就建立了LCP鏈路,接著就進(jìn)入鑒別狀態(tài),在這一狀態(tài),只允許傳送LCP協(xié)議的分組,鑒別協(xié)議的分組以及監(jiān)控鏈路質(zhì)量的分組,如果鑒別失敗,則轉(zhuǎn)到鏈路終止?fàn)顟B(tài),若鑒別成功,則進(jìn)入網(wǎng)絡(luò)層協(xié)議狀態(tài)。

在網(wǎng)絡(luò)層協(xié)議狀態(tài)中,PPP鏈路的兩端的網(wǎng)絡(luò)控制協(xié)議NCP根據(jù)網(wǎng)絡(luò)層的不同協(xié)議互相交換網(wǎng)絡(luò)層網(wǎng)絡(luò)層特定的網(wǎng)絡(luò)控制分組。這個步驟很重要的,因為現(xiàn)在的路由器能夠同時支持網(wǎng)絡(luò)層協(xié)議。總之,PPP協(xié)議的兩端的網(wǎng)絡(luò)層可以運行不同的網(wǎng)絡(luò)層協(xié)議,但仍然可以使用同一個PPP協(xié)議進(jìn)行通信。

當(dāng)網(wǎng)絡(luò)層配置完畢后,鏈路就進(jìn)入可進(jìn)行通信的鏈路打開狀態(tài),鏈路的兩個PPP端點可以彼此發(fā)送分組。兩個PPP端點還可以發(fā)送回送請求LCP分組和回送回答LCP分組,以檢查鏈路的狀態(tài)。

數(shù)據(jù)傳輸結(jié)束后,可以由鏈路的一端發(fā)送終止請求LCP分組請求終止鏈路連接,在收到對方發(fā)送過來的LCP分組后,轉(zhuǎn)到鏈路終止?fàn)顟B(tài),如果鏈路出現(xiàn)故障,也會從鏈路打開狀態(tài)轉(zhuǎn)到鏈路終止狀態(tài),當(dāng)調(diào)制解調(diào)器的載波停止后,則返回到鏈路靜止狀態(tài)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容