點對點協議PPP
PPP協議的特點
- PPP協議就是用戶計算機與ISP通信時所使用的數據鏈路層協議
PPP協議應滿足的要求
簡單:因IETF在設計因特網體系結構時,把最復雜的部分放在了TCP協議中,網際協議IP相對比較簡單,所以對數據鏈路層的幀,不需要糾錯,不需要序號,也不需要流量控制。簡單為首要要求
簡單的設計還可以是協議在實現時不容易出錯,從而不同廠商在協議的不同實現上互操作性提高了。封裝成幀:PPP協議必須規定特殊字符作為幀定界符(標志一個幀的開始和結束的字符),以便接收端從收到的比特流中能準確地找出幀的開始和結束位置。
透明性:PPP協議必須保證數據傳輸的透明性。(即如果數據中碰巧出現了和幀界定符一樣的比特組合時要采取有效的措施來解決這個問題)
多種網絡層協議:PPP協議必須能夠在同一條物理鏈路上同時支持多種網絡層協議(例如P和IPX等)的運行。
當點對點鏈路所連接的是局域網或路由器時,PPP協議必須同時支持在鏈路所連接的局域網或路由器上運行的各種網絡層協議。-
多種類型鏈路:除了要支持多種網絡層協議外,PPP還必須能夠在多種類型的鏈路上運行。
這里特別要提到的是在1999年公布的在以太網上運行的PPP,即PPP over Ethernet, 簡稱PPPoE,這是PPP協議能夠適應多種類型鏈路的典型例子,PPPoE是為寬帶上網的主機使用的 鏈路層協議。這個協議把PPP幀再封裝在以太網幀中。
差錯檢測:PPP協議必須能夠對接收端收到的幀進行檢測,并立即丟棄有差錯的幀。
檢測連接狀態:PPP協議必須具有一種機制能夠及時自動檢測出鏈路是否處于正常工作狀態。
最大傳送單元: PPP協議必須對每一種類型的點對點鏈路設置最大傳送單元MTU的標準默認值(至少是1500字節),如果高層協議發送的分組過長并超過MTU的數值,PPP就要丟棄這樣的幀,并返回差錯。MTU是數據鏈路層的幀可以載荷的數據部分的最大長度,而不是幀的總長度。
網絡層地址協商:PPP協議必須提供一種機制使通信的兩個網絡層(例如兩個IP層)的實體能夠通過協商知道或能夠配置彼此的網絡層地址。協商的算法應盡可能的簡單,且能在所有的情況下得出協商結果。
數據壓縮協商:PPP協議必須提供一種方法來協商使用數據壓縮算法,但PPP協議并不要求將數據壓縮算法進行標準化。
在TCP/IP協議族中,可靠運輸由運輸層的TCP協議負責,因此數據鏈路層的PPP協議不需要進行糾錯,不需要設置序號,也不需要進行流量控制。PPP協議不支持多點線路(即一個主站輪流和鏈路上的多個從站進行通信),而只支持點對點的鏈路通信,此外PPP協議只支持全雙工鏈路。
PPP協議的組成
PPP協議有三個組成部分
一個將IP數據報封裝到串行鏈路的方法。PPP既支持異步鏈路(無奇偶檢驗的8比特數據),也支持面向比特的同步鏈路,IP數據報在PPP幀中就是其信息部分。這個信息部分的長度受最大傳送單元MTU的限制。
一個用來建議、配置和測試數據鏈路連接的鏈路控制協議LCP,通信雙方可協商一些選項(在RFC 1661中定義了11中類型的LCP分組)
一套網絡控制協議NCP,其中每一個協議支持不同的網絡層協議,如IP、OSI的網絡層、DECnet以及AppleTalk等。
PPP協議的幀格式
1.各字段的意義
PPP幀的首部和尾部分別為四個字段和兩個字段。
首部的第一個字段和尾部的第二個字段都是標志字段F(Flag),規定為0x7E
(0x代表它后面的字符是用十六進制表示的。7E即01111110)
標志字段表示一個幀的開始或結束。因此標志字段就是PPP幀的定界符。
連續兩幀之間只需要用一個標志字段,如果連續出現兩個標志字段,
就表示是一個空幀,應當丟棄。?
首部中的地址字段A規定為0xFF(即11111111),
控制字段C規定為0x03(即00000011)。這兩個字段實際上并沒有攜帶PPP幀的信息。
PPP首部的第四個字段是2字節的協議字段。
當協議字段為0x0021時,PPP幀的信息字段就是IP數據報。
當為0xC021時,則信息字段是PPP鏈路控制協議LCP的數據,
而0x8021表示這是網絡層的控制數據。
- 信息字段的長度是可變的,不超過1500字節。
- 尾部的第一個字段(2字節)是使用CRC的幀檢測序列FCS。
字節填充
當信息字段中出現和標志字段一樣的比特(0x7E)組合時,就必須采取一些措施使這種形式上和標志字段一樣的比特組合不出現在信息字段中。
當PPP使用異步傳輸時,它把轉義字符定義為0x7D(即01111101),并使用字節填充。
RFC1662規定了如下所述的填充方法:
- 把信息字段中出現的每一個0x7E字節轉變成2字節序列(0x7D,0x5E)。
- 若信息字段出現一個0x7D的字節(即出現了和轉義字符一樣的比特組合),則把0x7D轉變成2字節序列(0x7D,0x5D)。
- 若信息字段出現ASCII碼的控制符(即數值小于0x20的字符),則在該字符前加一個0x7D字節,同時將該字節的編碼加以改變。例如出現0x03就要把它轉變為2字節序列(0x7D,0x23)。
零比特填充
PPP協議在用SONET/SDH鏈路時,是使用同步傳輸(一連串的比特連續傳送)。這種情況下,PPP協議采用零比特填充方法來實現透明傳輸。
零比特填充的具體做法是:
- 在發送端,先掃描整個信息字段,只要發現5個連續1,則立即填入一個0
因此經過這種零比特填充后的數據,可以保證信息字段中不會出現6個連續1
- 接收端在接收到一個幀時,先找到標志字段F以確定一個幀的邊界。
- 接著再用硬件對期中的比特流進行掃描。每當發現5個連續1時,就把這5個連續1后的一個0刪除,以還原成原來的信息比特流。
PPP協議的工作狀態
當用戶撥號接入ISP之后,就建立一條從PC到ISP的物理連接。這時,PC 向 ISP的發送一系列的鏈路控制及協議LCP分組(封裝成多個PPP幀),以便建立LCP連接。這些分組及其響應選擇將要使用的一些PPP參數。接著進行網絡層的配置,網絡控制協議NCP給新接入PC分配一個臨時的IP地址。這樣,PC就稱為因特網上的一個有IP的主機了。
當用戶通信完畢時,NCP釋放網絡層協議,收回原來分配出去的IP地址。接著LCP釋放數據鏈路層連接。最后釋放的是物理層的連接。
PPP鏈路的起始和終點永遠是鏈路靜止狀態,這時存在PC和ISP的路由器之間并不存在物理層的連接。
當PC通過調制解調器呼叫路由器時(點擊連接),路由器能夠檢測到調制解調器發出的載波信號。在雙方建立了物理層連接后,PPP就進入鏈路建立狀態,其目的是建立鏈路層的LCP連接。
這時LCP開始協商一些配置選項,即發送LCP的配置請求幀。這是個PPP幀,其協議字段置為LCP對應的代碼,而信息字段包含特定的配置請求。鏈路的另一端可以發送以下幾種響應的一種:
- 配置確認幀:所有選項都接受
- 配置否認幀:所有選項都理解但不能接受
- 配置拒絕幀:選項所有的無法識別或不能接受,需要協商。
LCP配置選項包括鏈路上的最大幀長、所使用的鑒別協議的規約,以及不使用PPP幀中的地址和控制字段(這兩個字段的值是固定的,沒有信息量)
協商結束后雙方就建立了LCP鏈路,接著就進入了鑒別狀態,在這一狀態,只允許傳送LCP協議的分組、鑒別協議的分組以及監測鏈路質量的分組。若使用口令鑒別協議PAP,則需要發起通信的一方發送身份標識符和口令。系統可允許用戶重試若干次。如需更好的安全性,則可使用更加復雜的口令握手鑒別協議CHAP。若鑒定失敗,則轉到鏈路終止狀態。若鑒別成功,則進入網絡層協議狀態。
在網絡層協議狀態,PPP鏈路的兩端的網絡控制協議NCP根據網絡層的不同協議互相交換網絡層特定的網絡控制分組。