初步瞭解點對點協議 PPP

對於點對點的鏈路,點對點協議 PPP(Point-to-Point Protocol)是目前使用得最廣泛的數據鏈路層協議,通常,互聯網用戶都要連接到某個 ISP 才能接入到互聯網,PPP 協議就是用戶計算機和 ISP 進行通信時所使用的數據鏈路層協議(例如,用戶使用撥號電話線接入互聯網時,一般都是使用 PPP 協議),下面展示一下 PPP 協議的一些基本概念。
在這裏插入圖片描述

1 PPP 協議的特點

PPP 協議的 11 個基本特徵:

  1. 簡單:前人在設計互聯網體系結構時把其中最複雜的部分放在運輸層的 TCP 協議中,可靠傳輸由 TCP 協議負責,而網際協議 IP 則相對比較簡單,它提供的是不可靠的數據報服務,在這種情況下,數據鏈路層沒有必要提供比 IP 協議更多的功能,數據鏈路層就應該設計的比網絡層更加簡單,因此數據鏈路層的幀,不需要糾錯,不需要序號,也不需要進行流量控制。所以,“簡單”是首要追求,簡單的設計還可使協議在實現時不容易出錯,從而使不同廠商在協議的不同實現上的互操作性提高了(協議標準化的一個主要目的就是提高協議的互操作性)。總之,這種數據鏈路層的協議非常簡單:接收方每收到一個幀,就進行 CRC 檢驗,若 CRC 檢驗正確,就收下這個幀,反之就丟棄這個幀,其他什麼也不做,關於 CRC 檢驗的相關內容請參照:數據鏈路層的三個基本問題——封裝成幀、透明傳輸和差錯檢測

  2. 封裝成幀:PPP 協議規定特殊的字符作爲幀定界符(即標誌一個幀的開始和結束的字符),便於使接收端從收到的比特流中能準確地找出幀的開始和結束位置。

  3. 透明性:PPP 協議要保證數據傳輸的透明性,也就是說,如果數據中碰巧出現了和幀定界符一樣的比特組合時,就要採取有效的措施來解決這個問題。

  4. 支持多種網絡層協議:PPP 協議必須能夠在在同一條物理鏈路上同時支持多種網絡層協議(如 IP 和 IPX 等)的運行,當點對點鏈路所連接的是局域網或路由器時,PPP 協議必須同時支持在鏈路所連接的局域網或路由器上運行的各種網絡層協議。

  5. 支持多種類型鏈路:除了要支持多種網絡層的協議外,PPP 還必須能夠在多種類型的鏈路上運行,例如,串行的(一次只發送一個比特)或並行的(一次並行地發送多個比特),同步的或異步的,低速的或高速的,電的或光的,交換的(動態的)或非交換的(靜態的)點對點鏈路。

    這裏特別要提到的是在 1999 年公佈的在以太網上運行的 PPP,即 PPP over Ethernet,簡稱爲PPPoE,這是 PPP 協議能夠適應多種類型鏈路的一個典型例子,PPPoE 是爲寬帶上網的主機使用的數據鏈路層協議,這個協議把PPP幀再封裝在以太網幀中(當然還要增加一些能夠識別各用戶的功能)。寬帶上網時由於數據傳輸速率較高,因此可以讓多個連接在以太網上的用戶共享一條到 ISP 的寬帶鏈路。現在,即使是隻有一個用戶利用ADSL進行寬帶上網(並不和其他人共享到 ISP 的寬帶鏈路),也是使用 PPPoE 協議。

  6. 差錯檢測(error detection):PPP 協議要能夠對接收端收到的幀進行檢測,並立即丟棄有差錯的幀,若在數據鏈路層不進行差錯檢測,那麼已出現差錯的無用幀就會在網絡中繼續向前轉發,就會導致白白浪費許多的網絡資源。

  7. 檢測連接狀態:PPP 協議要具有一種機制能夠及時(不超過幾分鐘)自動檢測出鏈路是否處於正常工作狀態,當出現故障的鏈路隔了一段時間後又重新恢復正常工作時,就特別需要有這種及時檢測功能。

  8. 最大傳送單元:又稱最大接收單元 MRU(Maximum Receive Unit),PPP 協議要對每一種類型的點對點鏈路設置最大傳送單元 MTU 的標準默認值(MTU 的默認值是 1500 字節),這樣做是爲了促進各種實現之間的互操作性。如果高層協議發送的分組過長並超過 MTU 的數值,PPP 就要丟棄這樣的幀,並返回差錯。需要注意的是,MTU 是數據鏈路層的幀可以載荷的數據部分的最大長度,而不是幀的總長度

  9. 網絡層地址協商:PPP 協議要提供一種機制使通信的兩個網絡層(例如兩個 IP 層)的實體能夠通過協商知道或能夠配置彼此的網絡層地址,協商的算法應儘可能簡單並且能夠在所有的情況下得出協商結果,這對撥號連接的鏈路特別重要,因爲如果僅僅在鏈路層建立了連接而不知道對方網絡層地址,則還不能夠保證網絡層可以傳送分組。

  10. 數據壓縮協商:PPP 協議要提供一種方法來協商使用數據壓縮算法,但並不要求將數據壓縮算法進行標準化

  11. 不支持多點線路:PPP 協議不支持多點線路(即一個主站輪流和鏈路上的多個從站進行通信),而只支持點對點的鏈路通信,且只支持全雙工鏈路

PPP 協議的組成三要素:

  • 封裝方法: PPP 協議要包含一個將 IP 數據報封裝成串行鏈路的方法,且既要支持異步鏈路(無奇偶檢驗的 8 比特數據),也要支持面向比特的同步鏈路。IP 數據報在 PPP 幀中就是其信息部分,這個信息部分的長度受最大傳送單元 MTU 的限制。

  • 鏈路控制協議(LCP,Link Control Protocol):用來定義建立、配置和測試數據鏈路連接的協議。

  • 網絡控制協議(NCP,Network Control Protocol):PPP 包含了一套 NCP,其中每個 NCP 協議支持不同的網絡層協議,例如 IP、OSI 的網絡層、 DECnet、 AppleTalk 等,且實現向上兼容。

2 PPP 協議的幀格式

在這裏插入圖片描述
上圖爲 PPP 幀的格式,下面對它進行解釋:

  • F 字段:標誌字段,1 個字節,規定爲 0x7E(十六進制下的 7E),二進制表示爲 01111110,表示 PPP 數據幀的開始和結束,因此標誌字段就是 PPP 幀的定界符。需注意的是,連續兩幀之間只需要用一個標誌字段,如果出現連續兩個標誌字段,就表示這是一個空幀, 應當丟棄

  • A 字段:1 個字節,規定爲 0xFF(即11111111),沒有任何意義,預留使用。

  • C 字段:1 個字節,規定爲 0x03(即00000011),沒有任何意義,預留使用。

  • 協議字段:2 個字節,當協議字段爲 0x0021 時,信息字段爲 IP 數據報;當協議字段爲 0xC021 時,信息字段爲 PPP 鏈路控制協議 LCP 的數據;當協議字段爲 0x8021 時,信息字段爲網絡層的控制數據。

  • 信息字段:長度可變,但不超過 1500 字節。

  • FCS 字段:2 個字節,使用 CRC 的幀檢驗序列。

不可避免地,信息字段中有可能出現和標誌字段一樣的比特(0x7E)組合,這時,就必須採取一些措施使這種形式上和標誌字段一樣的比特組合不出現在信息字段中,通常有以下兩種方法:

  • 異步傳輸(字節填充):把轉義符定義爲 0x7D(即01111101),並使用字節填充,填充方法如下所述:

    1. 把信息字段中出現的每一個 0x7E 字節轉變成爲 2 字節序列(0x7D,0x5E);

    2. 若信息字段中出現一個 0x7D 的字節(即出現了和轉義字符一樣的比特組合),則把 0x7D 轉變成爲 2 字節序列(0x7D,0x5D);

    3. 若信息字段中出現 ASCII 碼的控制字符(即數值小於 0x20 的字符),則在該字符前面要加入一個 0x7D 字節,同時將該字符的編碼加以改變,例如,出現一個 0x03 的字節就要把它轉變爲 2 字節序列(0x7D,0x23)。

    由於在發送端進行了字節填充,因此在鏈路上傳送的信息字節數就超過了原來的信息字節數,但接收端在收到數據後再進行與發送端字節填充相反的變換,就可以正確地恢復出原來的信息

  • 同步傳輸(零比特填充):PPP 協議用在 SONET/SDH 鏈路時,使用同步傳輸(一連串的比特連續傳送)而不是異步傳輸(逐個字符地傳送),在這種情況下,PPP 協議採用零比特填充方法來實現透明傳輸。

    零比特填充的具體做法是:
    在這裏插入圖片描述

    1. 在發送端,先掃描整個信息字段(通常用硬件實現,但也可用軟件實現,只是會慢些),只要發現有 5 個連續 1,則立即填入一個 0,因此經過這種零比特填充後的數據,就可以保證在信息字段中不會出現 6 個連續 1;

    2. 接收端在收到一個幀時,先找到標誌字段 F 以確定一個幀的邊界,接着再用硬件對其中的比特流進行掃描,每當發現 5 個連續 1 時,就把這 5 個連續 1 後的一個 0 刪除,以還原成原來的信息比特流

    以上這樣的零比特填充就保證了透明傳輸,在所傳送的數據比特流中可以傳送任意組合的比特流,而不會引起對幀邊界的錯誤判斷。

3 PPP 協議的工作狀態

當用戶撥號接入 ISP 後,就建立了一條從用戶個人電腦到 ISP 的物理連接,這時,用戶個人電腦向 ISP 發送一系列的鏈路控制協議 LCP 分組(封裝成多個 PPP 幀)以便建立 LCP 連接,這些分組及其響應選擇了將要使用的一些 PPP 參數。接着還要進行網絡層配置,網絡控制協議 NCP 給新接入的用戶個人電腦分配一個臨時的 IP 地址,這樣,用戶個人電腦就成爲互聯網上的一個有 IP 地址的主機了。當用戶通信完畢時,NCP 釋放網絡層連接,收回原來分配出去的 IP 地址,然後 LCP 釋放數據鏈路層連接,最後,物理層的連接被釋放。
在這裏插入圖片描述
上圖是 PPP 協議工作的狀態圖,下面對它進行解讀:

  1. 當用戶個人電腦通過調制解調器呼叫路由器時(通常是在屏幕上用鼠標點擊一個連接按鈕),路由器就能夠檢測到調制解調器發出的載波信號

  2. 在雙方建立了物理層連接後,PPP 就進入鏈路建立(Link Establish)狀態,其目的是建立鏈路層的 LCP 連接,這時 LCP 開始協商一些配置選項,即發送 LCP 的配置請求幀(Configure-Request),這是個 PPP 幀,其協議字段置爲 LCP 對應的代碼,而信息字段包含特定的配置請求。LCP 配置選項包括鏈路上的最大幀長所使用的鑑別協議(authentication protocol)的規約(如果有的話),以及不使用 PPP 幀中的地址和控制字段(因爲這兩個字段的值是固定的,沒有任何信息量,可以在 PPP 幀的首部中省略這兩個字節)。

  3. 鏈路的另一端接收配置請求幀後,會發送以下幾種響應中的一種:

    1. 配置確認幀(Configure-Ack):所有選項都接受;

    2. 配置否認幀(Configure-Nak):所有選項都理解但不能接受;

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

  4. 協商結束後雙方就建立了 LCP 鏈路,接着就進入鑑別(Authenticate)狀態,在這一狀態,只允許傳送 LCP 協議的分組、鑑別協議的分組以及監測鏈路質量的分組,通常有以下兩種鑑別方式:

    1. 使用口令鑑別協議 PAP(Password Authentication Protocol),這需要發起通信的一方發送身份標識符和口令,系統可允許用戶重試若干次

    2. 使用口令握手鑑別協議 CHAP(Challenge-Handshake Authentication Protocol), 這相對來說更加複雜,但也保證了更好的安全性,若鑑別身份失敗,則轉到鏈路終止(Link Terminate)狀態,若鑑別成功,則進入網絡層協議(Network-Layer Protocol)狀態。

  5. 在網絡層協議狀態,PPP 鏈路的兩端的網絡控制協議 NCP 根據網絡層的不同協議互相交換網絡層特定的網絡控制分組,這個步驟是很重要的,因爲現在的路由器都能夠同時支持多種網絡層協議。因此,PPP 協議兩端的網絡層可以運行不同的網絡層協議,但仍然可使用同一個 PPP 協議進行通信。如果在 PPP 鏈路上運行的是 IP 協議,則對 PPP 鏈路的每一端進行配置 IP 協議模塊(如分配 IP 地址)時就要使用 NCP 中支持 IP 的協議—— IP 控制協議 IPCP(IP Control Protocol),IPCP 分組也封裝成 PPP 幀(其中的協議字段爲 0x8021)在 PPP 鏈路上傳送。在低速鏈路上運行時,雙方還可以協商使用壓縮的 TCP 和 IP 首部,以減少在鏈路上發送的比特數。

  6. 當網絡層配置完畢後,鏈路就進入可進行數據通信的鏈路打開(Link Open)狀態,鏈路的兩個 PPP 端點可以彼此向對方發送分組,兩個 PPP 端點還可發送回送請求 LCP 分組(Echo-Request)和回送回答 LCP 分組(Echo-Reply),以檢查鏈路的狀態。

  7. 數據傳輸結束後,可以由鏈路的一端發出終止請求 LCP 分組(Terminate-Request)請求終止鏈路連接,在收到對方發來的終止確認 LCP 分組(Terminate- Ack)後,轉到鏈路終止狀態。如果鏈路出現故障,也會從鏈路打開狀態轉到鏈路終止狀態。當調制解調器的載波停止後,則回到鏈路靜止(Link Dead)狀態。

需注意的是,PPP 鏈路的起始和終止狀態永遠是鏈路靜止狀態,這時在用戶個人電腦和 ISP 的路由器之間並不存在物理層的連接

以上的過程可簡述爲,從設備之間無鏈路開始,到先建立物理鏈路,再建立鏈路控制協議 LCP 鏈路,經過鑑別後建立網絡控制協議 NCP 鏈路,然後才能交換數據,由此可見,PPP 協議已不是純粹的數據鏈路層的協議,它還包含了物理層和網絡層的內容

參考資料:《計算機網絡》第七版(謝希仁著)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章