在通信質量較差的年代,在數據鏈路層使用可靠傳輸協議曾是一個好的辦法。因此,能實現可靠傳輸的高級數據鏈路控制HDLC(High-Level Data Link Control)就稱為當時比較流行的數據鏈路層協議。但現在DHLC已經很少使用了,對於點對點的鏈路,相對比較簡單的點對點協議PPP(Point-to-Point Protocol)則是目前使用最為廣泛的數據鏈路層協議。
PPP協議的特點
我們知道,因特網用戶通常都要連接到某個ISP才能接入到互聯網。PPP協議就是用戶計算機和ISP進行通信時所使用的數據鏈路層協議。
PPP協議是IEIF在1992年制定的。經過1993年和1994年的修訂,現在的PPP協議在1994年就已成為因特網的正式標准。
1.PPP協議需要滿足的要求
IEIF認為,在設計PPP協議時必須考慮的以下諸多方面的要求:
簡單
IEIF在設計因特網體系結構時把其中最復雜的部分放在TCP協議中,而網際協議IP則相對比較簡單,它提供的是不可靠的數據報服務。在這種情況下,數據鏈路層沒有必要提供比IP協議更多的功能。因此,對數據鏈路層的幀,不需要糾錯,不需要序號,也不要流量控制。當然,在誤碼率較高的無線鏈路上可能會需要更多的更為復雜的鏈路層協議。因此IEIF把簡單作為首要的需求。
簡單的設計還可以使協議在實現時不容易出現錯誤,因而使得不同的廠商對協議的不同的實現的互操作性提高了。我們知道,協議標准化的一個主要目的就是提高協議的互操作性。總之,這種數據鏈路層的協議非常簡單:在接收方每收到一個幀,就進行CRC檢驗。如CRC檢驗正確,就收下這個幀,否則就丟棄這個幀。
封裝成幀
PPP協議必須規定特殊字符作為幀定界符,即標志一個幀的開始和結束的字符,以便在接收端從收到的比特流中准確的找出幀的開始和結束的位置。
透明性
PPP協議還必須保證數據傳輸的透明性。這就是說,如果數據中碰巧出現了和幀定界符一樣的彼特組合時,就要采取有效的措施來解決這個問題。
多種網絡層協議
PPP協議必須能夠在同一條物理鏈路上同時支持多種網絡層協議,不如IP和IPX等的運行。當點對點鏈路所連接的是局域網或者路由器時,PPP協議必須支持所在的鏈路所連接的局域網或路由器上運行的各種網絡層協議。
多種類型鏈路
除了要支持多種網絡層的協議外,PPP還必須能夠在多種類型的鏈路上運行。例如,串行的或並行的,同步的或者異步的,低速的或高速的,電的或光的,交換的或非交換的點對點鏈路。
差錯檢驗
PPP協議必須能夠對接收端收到的幀進行檢測,並立即丟掉有差錯的幀。若在數據鏈路層不進行差錯檢測,那么已出現的差錯的無用幀就還要在網絡中繼續傳送,因而會白白浪費許多寶貴的網絡資源。
檢測連接狀態
PPP協議必須有一種機制能夠及時自動檢測出鏈路是否處於正常的狀態。當出現故障的鏈路隔了一段時間后又重新恢復了正常工作時,就特別需要這種及時檢測的功能。
最大傳送單元
PPP協議必須對每一種類型的點對點鏈路設置最大的傳送單元MTU的標准默認值。這樣做的目的是為了促進各種實現之間的互操作性。如果高層協議發送的分組過長並超過了MTU的數值,PPP協議就要丟棄這樣的幀,並且返回錯誤。需要強調的是,MTU是數據鏈路層的幀可以載荷的數據部分的最大長度,而不是幀的總長度。
網絡層地址協商
PPP協議必須提供一種機制是通信的兩個網絡層的實體通過協商知道能夠配置彼此的網絡層地址。協商的算法應盡可能的簡單,並且能夠在所有的情況下得出協商的結果。這對撥號連接的鏈路特別的重要,因為僅僅在鏈路層建立了連接而並不知道對方網絡層地址時,還不能保證網絡層能夠傳遞分組。
數據壓縮協商
PPP協議必須提供一種方法來協商使用數據壓縮的算法。但是PPP協議並不要求將數據壓縮算法進行標准化。
2.PPP協議不需要的功能
糾錯
在TCP/IP協議族中,可靠傳輸由運輸層的TCP協議負責,而數據鏈路層的PPP協議只進行檢錯。這就是說,PPP協議是不可靠傳輸協議。
流量控制
在TCP/IP協議族中,端倒短的流量控制由TCP負責,因而鏈路級的PPP協議就不需要再重復進行流量控制。
序號
PPP協議是不可靠傳輸,因此不需要使用真的需要。許多曾經很流行的停止等待協議或連續ARQ協議都使用序號。在噪聲比較大的環境下,如無線網絡,則可以使用有序號的工作方式,這樣就可以提供可靠傳輸服務。
多點線路
PPP協議不支持多點線路,即一個主站輪流和鏈路上的多個從站進行通信,而只支持點對點的鏈路通信。
半雙工或單工鏈路
PPP協議只支持全雙工鏈路。
3.PPP協議的組成
PPP協議的組成由三部分組成:
(1)一個將IP數據報封裝到串行鏈路的方法。PPP協議既支持異步鏈路(無奇偶的8比特數據),也支持面向比特的同步鏈路。IP數據報在PPP幀中就是其信息部分,這個信息部分的長度受最大傳送單元MTU的限制。
(2)一個用來建立、配置和測試數據鏈路連接的鏈路控制協議LCP(Link Control Protocol),通信的雙發可以協商一些選項。
(3)一套網絡控制協議NCP,其中每一個協議支持不同的網絡層協議,如IP,OSI的網絡層,DECnet,以及AppleTalk等。
4.PPP協議的幀的格式
字段的意義

PPP幀的格式如圖所示,PPP幀的首部和尾部分別有四個字段和兩個字段。
首部的第一個字段和尾部的最后一個字段是標志字段F,規定為0x7E,標志字段表示一個幀的開始和結束,標志字段就是幀的定界符。連續兩幀之間只需要一個標志字段。如果出現兩個連續的標志字段,那么就表示這個幀是個空的幀,應當丟棄。首部中的地址字段A規定為0xFF,控制字段為0x03,這兩個字段的意義至今還沒有給出其定義,實際上並沒有攜帶PPP幀的信息。
PPP首部的第四個字段是2個字節的協議字段,當協議字段為0x0021時,PPP幀的信息字段就是IP數據報,當為0xC021時,則信息字段是PPP鏈路控制協議LCP的數據,而0x8021表示這個網絡層的控制數據。
信息字段的長度是可變的,但是不超過1500字節。
尾部的第一個字段是二字節,是使用CRC的幀檢驗序列FCS。
2.字節填充
當信息字段中出現和標志字段一樣的比特(0x7E)組合時,即必須采取一些措施使這種形式上和標志字段一樣的比特組合不出現在信息字段中。
當PPP使用異步傳輸時,它把轉義符定義為0x7D,並使用字節填充,RFC1662規定的的填充方法:
(1)把信息字段中出現的么一個0x7E字節轉變為2字節序列(0x7D,0x5E)。
(2)若信息中出現一個0x7D的字節,則把它轉化為0x7D,0x5D
(3)若信息中出現了ASCII碼中的控制字符,即數值小於0x20的字符,則在該字符前面要加入一個0x7D字節,同時將該字符的編碼加以改變。例如,出現0x03,在控制字符中是傳輸結束ETX,需要將它轉變為2字節序列0x7D,0x31
由於在發送端進行了字節的填充,因此在鏈路上傳送的信息字節數就超過了原來的信息字節數,在接收端收到的數據后再進行與發送端字節填充相反的變換,就可以正確的恢復原來的信息了。
零比特填充
PPP協議用在SONET/SDH鏈路時,是使用同步傳輸(一連串的比特連續傳送)而不是異步傳輸。在這種情況下,PPP協議采用零比特填充方法來實現透明傳輸。
零比特填充的具體做法是:在發送端,先掃描整個信息字段,通常使用硬件來實現,但也可應軟件來實現,軟件實現相對來說較慢些。只要發現有5個連續的1,就立即填充一個0,經過這種零比特填充后,就保證在信息字段中不會出現6個連續的1。接收端在收到一個幀時,先找到標志字段F以確定一幀的邊界,接着再用硬件對其中的比特流進行掃描,每當發現五個連續的1時,就把這五個連續的1后面的0刪除,以還原原來的信息比特流。這樣就保證了透明傳輸,在所傳送的數據比特流中可以傳送任意組合的比特流,而不會引起對真邊界錯誤判斷。
5.PPP協議的工作狀態
當用戶PC機撥號接入ISP后,就建立了一條從用戶PC機到ISP的物理連接,這時,用戶PC機向ISP發送一序列的LCP分組,封裝成PPP幀,以便建立LCP連接。這些分組及其響應選擇了將要使用的一些PPP參數。接着還要進行網絡層配置,NCP給新接入的用戶PC機分配了一個臨時的IP地址,這樣,用戶PC機就稱為了因特網上的一個有IP地址的主機了。當用戶通信完畢后,NCP釋放網絡層的連接,回收原來分配出去的IP地址,接着,LCP釋放數據鏈路層連接,最后釋放的是物理層的連接。
當用戶通信完畢時,NCP釋放網絡層連接,收回原來分配出去的IP地址,接着LCP釋放數據鏈路層連接,最后釋放的物理層的連接。

PPP鏈路的起始和終止狀態都是鏈路靜止狀態,這種狀態下,用戶PC機和ISP的路由器之間並不存在物理層的連接。
當用戶的PC機通過調制解調器呼叫路由器時,路由器就能夠檢測到調制解調器發出的載波信號。在雙方建立了物理層連接后,PPP就進入了鏈路建立的狀態,其目的是建立鏈路層的LCP連接。
這時LCP開始協商一些配置選項,即對發送LCP的配置請求幀。這是個PPP幀,其協議字段置為LCP對應的代碼,而信息字段包含特定的配置請求。鏈路的另一端可以發送以下的相應:
1.配置確認幀-所有選項都接收
2.配置否認幀-所有選項都理解但是不能接收。
3.配置拒絕幀-選項有的無法識別或不能接受,需要協商。
LCP配置選項包括鏈路上的最大幀長,所使用的鑒別協議的規約,以及不適用PPP幀中的地址和控制字段。協商結束后雙方就建立了LCP鏈路,接着進入“鑒別“狀態,在這一狀態下,只允許傳送LCP分組、鑒別協議的分組以及檢測鏈路質量的分組。若使用口令鑒別協議,則需要發起通信的一方發送身份標識符和口令。系統允許用戶重試多次。如果需要更好的安全性,則可使用復雜的口令握手鑒別協議,若身份鑒別失敗,則轉到鏈路終止狀態,若鑒別成功,則進入到網絡層協議狀態。
在網絡層協議狀態,PPP鏈路的兩端的網絡控制協議NCP根據網絡層的不同協議互相交換網絡層特定的網絡控制分組。這個步驟很重要,因為現在的路由器都能夠同時支持多種的網絡層協議。總之,PPP協議的兩端可以運行不同的網絡層協議,但仍然可以使用同一個PPP協議進行通信。如果在PPP鏈路上運行的是IP協議,則對PPP鏈路的每一段配置IP協議模塊,IPCP分組也封裝成PPP幀在PPP鏈路上傳送。在低速鏈路上運行時,雙方還可以協商使用壓縮的TCP和IP首部,以減少在鏈路上發送的比特數。當網絡層配置完畢后,鏈路就進入可進行數據通信的鏈路打開狀態。鏈路的兩個PPP端點可以彼此向對方發送分組。兩個PPP端點還可以發送會送請求LCP分組和回送回答LCP分組,以檢查鏈路的狀態。數據傳輸結束后,可以由鏈路的一段發送終止請求LCP分組請求終止鏈路連接,在接收到對方發送來的終止確認LCP分組后,就轉到鏈路終止狀態。如果鏈路出現故障,則也會從鏈路打開到鏈路終止狀態。當調制解調器的載波結束后,則回到鏈路靜止狀態。
PPP協議已不是純粹的數據鏈路層協議,它還包含了物理層和網絡層中的內容。
