在介紹PPP協議之前,我們先簡單介紹下資料鏈路層通道的型別,以及資料鏈路層協議的三個基本問題。
資料鏈路層
使用的通道主要有以下兩種型別:
點對點通道
這種通道使用一對一的點對點通訊方式。
廣播通道
這種通道使用一對多的廣播通訊方式。廣播通道上連線的主機很多,使用專用的共享通道協議來協調這些主機的資料傳送。
使用點對點通道的資料鏈路層
概念:
鏈路(物理鏈路):
一個節點到相鄰節點的一段物理線路
資料鏈路(邏輯鏈路):
物理線路加上必要的通訊協議(用於控制資料的傳輸)
點對點通道的資料鏈路層的協議資料單元--幀
資料鏈路層把網路層交下來的資料構成幀傳送到鏈路上,以及把接收到的幀中的資料取出並上交給網路層。網路層中的協議資料單元則是IP資料報(或稱為資料報,分組,包)。如下圖所示:
資料鏈路層在通訊時的主要步驟如下:
結點A的資料鏈路層把網路層交下來的IP資料報新增首部和尾部封裝成幀。
結點A把封裝好的幀傳送給結點B的資料鏈路層。
若結點B的資料鏈路層收到的幀無差錯,則從收到的幀中提取出IP資料報上交給上面的網路層,否則丟棄這個幀。
由於在OSI模型中,各層之間是相互獨立的,下層單元向上層單元提供介面函式。因此,我們並不需要去考慮資料鏈路層如何將資料下交給物理層轉換成位元資料流,以及如何在物理層傳輸的細節。
資料鏈路層的協議有很多種,但是有三個基本問題是共同的:
幀封裝
透明傳輸
差錯檢測
幀封裝,簡單的說,就是將網路層傳下來的IP資料報進一步打包封裝成適合在資料鏈路層傳輸的資料幀。大致如下圖所示:
我們使用幀定界符來表示一幀資料的開始和結束(上圖的幀開始和幀結束)
幀定界符的作用主要是當資料在傳輸到一半的時候出現差錯(例如物理鏈路斷開),資料鏈路層的接收端可以依次判斷接收到的資料是否是一個完整的幀。
透明傳輸
上述的幀定界符,一般使用專門指明的控制字元。因此,我們需要保證傳輸的有效資料中不能出現已經被指明為幀定界符的控制字元。否則,就會出現有效資料被誤識別為幀定界符而導致資料丟失的情況。
舉個例子:
圖中,我們採用字元SOH和字元EOT作為幀開始符合幀結束符。但是,如果我們要傳輸的有效字元中出現了字元EOT(如上圖所示),那麼,我們傳輸的資料在傳輸到一半的時候就會被接收端誤認為一幀資料已經結束,而後半部分的幀資料就會被丟棄。
那麼,假如說我們傳輸的資料中有被指定為幀定界符的控制字元,如何處理上述可能會出現的問題呢?
在資料鏈路層中,解決這個問題的方法就是
位元組填充(字元填充)
。
位元組填充
,就是說當我們需要傳輸控制字元時,我們可以在控制字元前面插入一個
跳脫字元“ESC”
,而在接收端將資料送往網路層前刪除此跳脫字元。若是跳脫字元也出現在資料當中,解決方法仍然是在跳脫字元中插入跳脫字元(如下圖)
差錯檢測
在資料鏈路層中,廣泛使用的是
迴圈冗餘檢驗CRC
。
CRC校驗的具體實現方法就不在這裡介紹了。
這裡說下另外需要注意的一些問題:
我們只能認為,採用CRC校驗後,資料鏈路層接收端接收到的資料均無差錯,但這並不能說明傳輸沒有出現差錯。因為這種校驗方法並不能預防
幀重複,幀丟失,幀失序
的情況。
在OSI標準裡,資料鏈路層應該向網路層提供可靠的傳輸服務,因此在某些資料鏈路層的傳輸協議中會要求增加幀編號,確認和重傳機制(如高階資料鏈路控制HDLC)。但是,在如今通訊線路質量可以得到有效保證的前提下,大部分被廣泛使用的資料鏈路層協議都不再要求向上提供可靠的傳輸服務了。這個任務自然而然地交給了上層協議(如運輸層TCP協議)來完成。目前,對於點對點的鏈路,被廣泛使用的是相對簡單得多的
點對點協議PPP
。
PPP協議的特點
簡單
我們上述提到的,現資料鏈路層協議不要求向上提供可靠的傳輸服務,因此實際資料鏈路層的功能首要要求就是簡單:接收方接收到一個數據幀,進行CRC檢測,正確則收下這個幀,反之則丟棄這個幀。簡單的設計可以使得不同產商對協議的不同實現的互操作性提高了。
封裝成幀
PPP協議必須規定特殊的字元作為幀定界符,以便接收端可以從收到的位元流中準確找出幀的開始和結束位置
透明性
PPP必須保證資料傳輸的透明性(具體見上文透明傳輸的相關內容)
多種網路層協議
PPP協議必須能夠在同一條物理鏈路上同時支援多種網路層協議的執行。
多種型別鏈路
PPP協議還必須能夠在多種型別的鏈路上執行。
差錯檢測
PPP協議必須能夠對接收端收到的幀進行檢測,並丟棄有差錯的幀。
檢測連線狀態
PPP協議必須具有一種機制能夠及時自動檢測出鏈路是否處於正常工作狀態。
最大傳送單元
PPP協議必須對每一種型別的點對點鏈路設定最大傳送單元MTU的標準預設值。若高層協議傳送的分組過長並超過MTU的值,PPP則丟棄這樣的幀,並返回差錯。MTU指的是資料鏈路層的幀可以載荷的資料部分的最大長度,而不是幀的總長度。
網路層地址協商
PPP協議必須提供一種機制使通訊的兩個網路層(例如,兩個IP層)的實體能夠透過協商知道或能夠配置彼此的網路層地址。這對撥號連線的鏈路特別重要,因為僅僅在鏈路層建立了連線而不知道對方網路層地址時,則還不能夠保證網路層能夠傳送分組。
資料壓縮協商
PPP協議必須提供一種方法來協商使用資料壓縮演算法。但PPP協議並不要求將資料壓縮演算法進行標準化。
PPP協議不需要的功能
糾錯
PPP協議是不可靠傳輸協議
流量控制
在TCP/IP協議族中,端到端的流量控制由TCP負責。
序號
多點線路
PPP協議不知道多點線路(即一個主站輪流和鏈路上的多個從站進行通訊),只支援點對點的鏈路通訊
半雙工或單工鏈路
PPP協議只支援全雙工鏈路
PPP協議的組成
PPP協議主要由三部分組成:
一個將IP
資料報
封裝到序列鏈路的方法。
一個用來建立、配置和測試資料鏈路連線的鏈路控制協議LCP。
一套網路控制協議NCP,能夠支援不同的網路層協議,如IP、OSI的網路層、DECnet,以及AppleTalk等。
PPP協議的幀格式
如圖所示,PPP協議的幀格式主要由三部分組成:
首部,資訊欄位,尾部
。
首部
首部欄位由五個位元組構成。
標誌欄位F
,佔一個位元組,規定為0x7E,表示一個幀的開始或結束。此標誌欄位就是PPP幀的定界符。連續兩幀之間只需要用一個標誌欄位。若出現連續兩個標誌欄位,則表示這是一個空幀,應當丟棄。
地址欄位A
,佔一個位元組,規定為0xFF
控制欄位C
,佔一個位元組,規定為0x03
協議欄位
,表示資訊欄位資料所使用的協議。當協議欄位為0x0021時,PPP幀的資訊欄位就是IP資料報。若為0xC021,則資訊欄位是PPP鏈路控制協議LCP的資料,而0x8021表示這是網路層的控制資料。
資訊欄位
資訊欄位的長度是可變的,但不超過1500個位元組。
尾部
尾部由三個位元組構成
使用CRC的幀檢驗序列FCS,佔兩個位元組
標誌欄位F,佔一個位元組(首部標誌欄位)
位元組填充
上述介紹過此概念,這裡不再贅述。
零位元填充
在PPP協議中,除了使用位元組填充的方法來保證透明傳輸外,還有一種零位元填充同樣也可以保證透明傳輸。零位元填充的具體做法是:在傳送端,先掃描整個資訊欄位,只要發現連續5個1,則立即插入一個0。經過這種零位元填充後的資料,可以保證在資訊欄位不會出現6個連續的1。接收端再收到一個幀時,先找到標誌位F確定幀的邊界,接著就對幀的資訊欄位進行掃描,當發現連續5個1時,就把5個連續1後面的0刪除,還原成原來的資料位元流。這樣就可以保證透明傳輸。大致過程如下:
PPP協議的工作狀態
上面我們介紹了PPP協議幀格式,下面我們來簡單講講PPP鏈路的建立過程。
一開始,PPP鏈路處於“
鏈路靜止
”狀態。當用戶PC機透過調變解調器呼叫路由器時,路由器檢測到調變解調器發出來的載波訊號。雙方建立了物理層連線。PPP鏈路進入了“
鏈路建立
”的狀態。
接著,LCP開始協商一些配置選項,即傳送
LCP的配置請求幀
。這個LCP配置請求幀是一個PPP幀,其協議欄位置為LCP對應的程式碼,資訊欄位包含特定的配置請求。鏈路另一端可以傳送以下幾種響應中的一種:
配置確認幀:
所有選項都能接受
配置否認幀:
所有選項都理解但不接受
配置拒絕幀:
選項有的無法識別或不能接受,需要協商
LCP協商配置後,雙方就建立了LCP鏈路。接著,就開始進入了“
鑑別
”狀態。在這一狀態,只允許傳送LCP協議的分組,鑑別協議的分組以及監測鏈路質量的分組。若使用
口令鑑別協議PAP
,則需要通訊發起的一方傳送身份識別符號和口令(系統支援用於多次重試)。如果需要更高的安全性,可以使用更加複雜的
口令握手鑑別協議CHAP
。若鑑別身份失敗,則進入“鏈路終止”狀態。若鑑別成功,則進入“
網路層協議
”狀態。
在“
網路層協議
”狀態,PPP鏈路的兩端的網路控制協議NCP根據網路層的不同協議互相交換網路層特定的網路控制分組。
當網路層配置完畢後,鏈路就進入可進行資料通訊的“
鏈路開啟
”狀態。鏈路的兩個PPP端點可以彼此向對方傳送分組。兩個PPP端點還可以傳送
回送請求LCP分組
和回送
應答LCP分組
,以檢查鏈路的狀態。
資料傳輸結束後,可以由鏈路的一端發出終止請求LCP分組,用於請求終止鏈路連線,在收到對方發來的終止確認LCP分組後,轉到“
鏈路終止
”狀態。若鏈路出現故障,或調變解調器的載波停止後,鏈路狀態都會從“
鏈路開啟
”轉到“
鏈路終止
”狀態。
關於PPP協議這部分的內容暫時先介紹到這裡,喜歡的朋友點個關注,感謝大家的支援。