1. 程式人生 > >點對點通訊、資料鏈路層、點對點鏈路、PPP、PPPOE、PPTP、L2TP-VPN簡介

點對點通訊、資料鏈路層、點對點鏈路、PPP、PPPOE、PPTP、L2TP-VPN簡介

PPP協議的特點

對於點對點的鏈路,點對點協議PPP協議是目前使用得最廣泛的資料鏈路層協議。我們知道,使用者接入因特網有多種途徑,如通過電話線撥號入網或各種寬頻入網,但不管怎樣,總是要通過某個因特網服務提供者ISP才能接入到因特網。從使用者計算機到ISP的鏈路所使用的資料鏈路層協議就是PPP協議,如圖4-9所示。

 

每一個ISP都已經從因特網的管理機構或從一個更大的ISP申請到一批IP地址。ISP還有與因特網通過高速通訊專線相連的路由器。大的ISP擁有屬於自己通訊線路,而小的ISP則向電信公司租用通訊線路。使用者在某一個ISP繳費登記後(有的ISP是出售上網絡卡),就可用自己的計算機通過調變解調器、電話線接入到該ISP。使用者在接通ISP後,ISP就分配給該使用者一個臨時的IP地址

(IP地址將在第7章中詳細討論)。使用者計算機在獲得了臨時的IP地址後,就成為連線在因特網上的主機,因而就可使用因特網所提供的各種服務。當用戶結束通訊並斷開連線後,ISP就把剛才分配給該使用者的IP地址收回,以便再分配給後面撥號入網的其他使用者使用。

PPP協議是IETF在1992年制定的。經過1993年和1994年的修訂,現在的PPP協議已成為因特網的正式標準[RFC 1661]。

PPP協議應滿足的需求

IETF認為,在設計PPP協議時必須考慮以下的多方面需求[RFC 1547]。

(1) 簡單。經過非常慎重的考慮,IETF在設計因特網體系結構時已把其中最複雜的部分放在TCP協議中,而網際協議IP則相對比較簡單,它提供的是不可靠的資料報服務。在這種情況下,資料鏈路層沒有必要提供比IP更多的功能。因此,對資料鏈路層的幀,不需要糾錯,不需要序號,也不需要流量控制。如果新增這些功能,就會和運輸層的某些功能重複,因而降低了通訊效率。當然,在誤位元速率較高的無線鏈路上可能會需要更為複雜的鏈路層協議。因此,IETF把“簡單”作為首要的需求。

簡單的設計還可使協議不容易出錯,因而使得不同廠商對_辦議的不同實現的互操作性提高了。我們知道,協議標準化的一個主要目的就是提高協議的互操作性。

(2)封裝成幀。 PPP協議必須能夠正確和有效地把網路層交下來的分組(即IP資料報)封裝成資料鏈路層的幀,再發送出去。接收方在收到幀後,必須能夠準確地找出幀的開始和結束位置,以及幀中所封裝的資料(即IP分組)的開始和結束位置。為此,PPP協議必須規定特殊的字元作為幀定界符(即標誌一個幀的開始和結束的字元)。幀定界是指接收方從收到的位元流中應當能準確地找出一幀的開始和結束在什麼地方。

(3)透明性。 PPP協議必須保證資料傳輸的透明性。這就是不能限制網路層交下來的分組資料中不許出現某種位元組合。只要不出現傳輸差錯,所有的資料(包括高層協議的首部)都必須原封不動地傳送到相鄰結點。如果資料中碰巧出現了和幀定界符一樣的位元組合時,就要採取有效的措施來解決這個問題(見4.2. 2節關於透明傳輸的討論)。

(4)多種網路層協議。 PPP協議必須能夠在在同一條物理鏈路上同時支援多種網路層協議(如IP和IPX等)的執行。當點對點鏈路所連線的是區域網或路由器時,PPP協議必須同時支援在鏈路所連線的區域網或路由器上執行的所有協議。雖然在因特網的環境下IP是網路層的主流協議,但鏈路層的PPP協議仍需支援其他的網路層協議。

(5)多種型別鏈路。 除了要支援多種網路層的協議外,PPP還必須能夠在多種型別的鏈路上執行。例如,序列的(一次只發送一個位元)或並行的(一次並行地傳送多個位元),同步的或非同步的,低速的或高速的,電的或光的,交換的或非交換的。

這裡特別要提到的是在1999年公佈的在乙太網上執行的PPP,即PPP over Ethernet,簡稱為PPPoE[RFC 2516],這就是PPP協議能夠適應多種型別鏈路的一個例子。PPPoE是為寬頻上網的主機使用的鏈路層協議。寬頻上網時由於資料傳輸速率較高,因此,可以讓多個使用者共享一條寬頻鏈路。例如,一個具有20個人工作的實驗室,他們使用的計算機都連線在一個乙太網。這時,可以向ISP只申請一條寬頻上網線路,而大家都使用,PPPoE資料鏈路層協議通過連線到ISP的共享寬頻鏈路下載的檔案,會按照每個計算機不同的硬體地址(見5.3.1節)而傳送到相應的計算機。如果所有的使用者都正好在同一時刻下載檔案,那麼,每一個使用者分配到的資料傳輸速率當然也就下降了。

(6)差錯檢測(error detection)。PPP協議必須能夠對接收方收到的幀進行檢測,並立即丟棄有差錯的幀。雖然TCP協議有能保證端到端可靠交付的差錯控制機制,但若在資料鏈路層不進行差錯檢測,那麼,已出現差錯的幀(這種出錯的幀已無用處)就還要在網路中繼續向前轉發,因而白白浪費了許多網路的資源。因此,在資料鏈路層對收到的幀進行檢錯並不是多餘的。然而,在資料鏈路層一般沒有必要去糾錯。糾錯是不僅發現差錯,而且還把差錯改正過來。在資料鏈路層進行糾錯的代價太高,通常是得不償失的。

(7)連線的活躍度。 PPP協議必須具有一種機制來自動檢測出鏈路上連線的活躍度(liveness),也就是說,必須能夠及時(不超過幾分鐘)檢測出一條鏈路是處於正常工作狀態,還是已經出了故障。當出了故障的鏈路隔了一段時間後又重新恢復正常工作時,這種及時檢測功能特別有用。

(8)最大傳送單元。 PPP協議必須對每一種型別的點對點鏈路設定最大傳送單元MTU的標準預設值。這樣做是為了促進各種實現之間的互操作性。如果高層協議傳送的分組過長並超過MTU的數值,PPP就要丟棄這樣的幀,並返回差錯。為了有效地傳送乙太網的幀,MTU的預設值至少是1500位元組。再強調一下,MTU是資料鏈路層的幀可以載荷的資料部分的最大長度,而不是幀的總長度。在RFC 1661中,MTU被稱為最大接收單元MRU(Maximum Receive Unit)。

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

(10)資料壓縮協商。PPP協議必須提供一種方法來協商使用資料壓縮演算法。但PPP協議並不要求將資料壓縮演算法進行標準化。

PPP協議不需要的功能

在RFC 1547中還明確了PPP協議不需要的功能。

(1)糾錯(error correction)。 在TCP/IP族中,可靠傳輸由運輸層的TCP協議負責,而資料鏈路層的PPP協議則沒有糾錯的責任。這就是說,PPP協議是不可靠傳輸協議。雖然當鏈路的誤位元速率較高時,增加糾錯功能可阱提高鏈路的效能,但對.PPP協議的基本實現,則不要求有糾錯這一機制。

(2)流量控制。 我們知道,傳送方傳送資料的速率必須使接收方來得及接收。當接收方來不及接收時,到達接收方快取的幀就要排隊等候處理。當佇列溢位時就發生幀的丟失。因此,接收方應對傳送方傳送資料的速率進行流量控制。在TCP/IP族中,端到端的流量控銣由TCP負責,因而鏈路級的PPP協議就不需要再重複進行流量控制。這樣做符合前面講的PPP協議的第一個需求―――“簡單”。

(3)序號。 PPP協議不需要序號。許多流行的資料鏈路層協議,如停止等待協議或連續ARQ{協議都是使用序號的。但為了使協議簡單,PPP協議並不試圖使協議向後相容。在噪聲較大的環境下,如無線網路,則可以使用有編號的工作方式,這樣就可以提供可靠傳輸服務。這種工作方式定義在RFC 1663中,這裡不再討論。

(4)多點線路。 PPP協議不支援多點線路(即一個傳送站輪流和鏈路上的多個接收站進行通訊)。PPP協議只支援一個傳送方和一個接收方的鏈路通訊。

(5)半雙工或單工鏈路。 PPP協議不支援半雙工或單工鏈路(因為這兩種鏈路目前已很少使用),而只支援全雙工鏈路。

PPP協議的組成

PPP協議有三個組成部分:

(1)一個將IP資料報封裝到序列鏈路的方法。PPP既支援非同步鏈路(無奇偶檢驗的8位元資料),也支援面向位元的同步鏈路。IP資料報在PPP幀中就是其資訊部分。這個資訊部分的長度受最大傳送單元MTU的限制。

(2)一個用來建立、配置和測試資料鏈路連線的鏈路控制協議LCP (Link control Protocol)。通訊的雙方可協商一些選項。在RFC 166l中定義了11種類型的LCP分組。

(3)一套網路控制協議NCP(Network control Protocol),其中的每一個協議支援不同的網路層協議,如IP、OSI的網路層、DECnet、以及AppleTalk等。

PPP協議的幀格式

各欄位的意義

PPP的幀格式如圖4.10所示。PPP幀的首部和尾部分別為四個和兩個欄位。


首部的第一個欄位和尾部的第二個欄位都是標誌欄位F(Flag),規定為0x7E(符號“0x”表示它後面的字元是用十六進位制表示的。十六進位制的7E的二進位制表示是01111110)。標誌欄位表示一個幀的開始或結束。因此,標誌欄位就是PPP幀的定界符。連續兩幀之間只需要用一個標誌欄位。如果出現連續兩個標誌欄位,就表示這是一個空幀,應當丟棄。

首部中的地址欄位A規定為0xFF(即11111111),控制欄位c規定為0x03(即00000011)。最初曾考慮以後再對這兩個欄位的值進行其他定義,但至今也沒有給出。可見,這兩個欄位實際上並沒有攜帶PPP幀的資訊。

PPP首部的第四個欄位是2位元組的協議欄位。當協議欄位為0x0021時,PPP幀的資訊欄位就是IP資料報0x002B表示IPX報文,0x0029表示AppleTalk報文,這些屬於PPP的資料報文。若為0xC021,則資訊欄位是PPP鏈路控制協議LCP的資料,而0x8021表示這是網路控制協議NCP的資料,這些屬於PPP的控制報文

資訊欄位的長度是可變的,不超過1500位元組。

尾部中的第一個欄位(2位元組)是使用CRC的幀檢驗序列FCS。

位元組填充

當資訊欄位中出現和標誌欄位一樣的位元(Ox7E)組合時,就必須採取一些措施使這種形式上和標誌欄位一樣的位元組合不出現在資訊欄位中。

當PPP使用非同步傳輸時,它把轉義符定義為0x7D,並使用位元組填充,具體做法如下:

(1)把資訊欄位中出現的每一個0x7E位元組轉變成為2位元組序列(0x7D,0x5E)。

(2)若資訊欄位中出現一個0x7D的位元組(即出現了和轉義字元一樣的位元組合),則把0x7D轉變成為2位元組序列(0x7D,0x5D)。

(3)若資訊欄位中出現ASCII碼的控制字元(即數值小於0x20的字元),則在該字元前面要加入一個0x7D位元組,同時將該字元的編碼加以改變。這樣做的目的是防止這些表面上的ASCII碼控制符(在被傳輸的資料中當然已不是控制符了)被錯誤地解釋為控制符。

零位元填充

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

零位元填充的具體做法是:

傳送方:先掃描整個資訊欄位(通常是用硬體實現,但也可用軟體實現,只是會慢些)。只要發現有5個連續1,則立即填入一個0。因此,經過這種零位元填充後的資料,就可以保證在資訊欄位中不會出現6個連續1。

接收方:在收到一個幀時,先找到標誌欄位F以確定一個幀的邊界,接著再用硬體對其中的位元流進行掃描。每當發現5個連續1後的一個0刪除,以還原成原來的資訊位元流。

由於在傳送方進行了位元組填充,因此,在鏈路上傳送的資訊位元組數就超過了原來的資訊位元組數。但接收方在收到資料後再進行與傳送方位元組填充相反的逆變換,因而可以正確地恢復出原來的資訊。

如圖4,11所示。這樣就保證了透明傳輸:在所傳送的資料位元流中可以傳送任意組合的位元流,而不會引起對幀定界的判斷錯誤。


 PPP協議的工作狀態

上一節我們通過PPP幀的格式討論了PPP幀是怎樣組成的。但PPP鏈路一開始是怎樣被初始化的?當用戶撥號接入ISP,就建立了一條物理層的連線。這時,使用者PC機向ISP傳送一系列的LCP分組(封裝成多個PPP幀)。這些分組及其確認選擇了將要使用的一些PPP引數。接著就進行網路層配置,NCP給新接入的使用者PC機分配一個臨時的IP地址。這樣,使用者PC機就成為因特網上的一個主機了。

當用戶通訊完畢時,NCP釋放網路層連線,收回原來分配出去的IP地址。接著,LCP釋放資料鏈路層連線。最後釋放的是物理層的連線。

上述過程可用圖4.12的狀態圖來描述。


1、PPP鏈路的起始和終止狀態永遠是圖4-12中的“靜止狀態”,這時並不存在物理層的連線。

2、當檢測到調變解調器的載波訊號,並建立物理層連線後,PPP就進入鏈路的“建立狀態”。這時LCP開始協商一些配置選項,即傳送LCP的配置請求幀(configure-request)。這是個PPP幀,其協議欄位配置為LCP對應的程式碼,而資訊欄位包含特定的配置請求。鏈路的另一端可以傳送以下幾種響應:

(1)配置確認幀(configure-ack):所有選項都接受。

(2)配置否認幀(configure-nac):所有選項都理解但不能接受。

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

LCP配置選項包括鏈路上的最大幀長、所使用的鑑別協議(authentication protocol)的規約(如果有的話),以及不使用PPP幀中的地址和控制欄位(因為這兩個欄位的值是固定的,沒有任何資訊量,可以在PPP幀的首部中省略這兩個位元組)。

3、協商結束後就進入“鑑別狀態”。

4、若通訊的雙方鑑別身份成功,則進入“網路狀態”。這時PPP鏈路的兩端互相交換網路層特定的網路控制分組(NCP)。如果在PPP鏈路上執行的是IP,則使用IP控制協議IPCP(IP Control Protocol)來對PPP鏈路的每一端配置IP模組(如分配IP地址)。和LCP分組封裝成PPP一樣,IPCP分組也封裝成PPP幀(其中的協議欄位為0x8021)在PPP鏈路上傳送(0x8021是NCP的協議代嗎,這裡又說IPCP的協議欄位是0x8021,那是不是說明NCP只是一套虛擬的協議框架,具體到特定網路層就對應特定的協議,比如TCP/IP中的網路層就使用IPCP協議進行IP配置?)。

5、當網路層配置完畢後,鏈路就進入可進行資料通訊的“開啟狀態”。兩個PPP端點還可傳送回送請求LCP分組(echo-request)和回送應答LCP分組(echo-reply)以檢查鏈路的狀態。

6、資料傳輸結束後,鏈路的一端發出終止請求LCP分組(terminate-request)請求終止鏈路連線,而當收到對方發來的終止確認LCP分組(terminate-ack)後,就轉到“終止狀態”。

7、當載波停止後則回到“靜止狀態”。