from http://xiyudan1988.blog.163.com/blog/static/95993114200810145047212/ |
PPP是鏈路層協議,因此咱們將它的數據單位稱爲幀: 算法
緊接在起始標誌字節後的一個字節是地址域,該字節爲0xFF。咱們熟知網絡是分層的,且對等層之間進行相互通訊,而下層爲上層提供服務。當對等層進行通訊時首先需獲知對方的地址,而對不一樣的網絡,在數據鏈路層則表現爲須要知道對方的MAC地址、X.121地址、ATM地址等;在網絡層則表現爲須要知道對方的IP地址、IPX地址等;而在傳輸層則須要知道對方的協議端口號。例如若是兩個以太網上的主機但願可以通訊的話,首先發送端需獲知對端的MAC地址。但因爲PPP協議是被運用在點對點的鏈路上的特殊性,它不像廣播或多點訪問的網絡同樣,由於點對點的鏈路就能夠惟一標示對方,所以使用PPP協議互連的通訊設備的兩端無須知道對方的數據鏈路層地址,因此該字節已無任何意義,按照協議的規定將該字節填充爲全1的廣播地址。同地址域同樣,PPP數據幀的控制域也沒有實際意義,按照協議的規定通訊雙方將該字節的內容填充爲0x03。(既然無心義,就能夠隨便賦值了吧,呵呵,只要你們都遵照一個標準就行) 數據庫 就PPP協議自己而言,咱們最關心的內容應該是它的協議域和信息域。協議域可用來區分PPP數據幀中信息域所承載的數據報文的內容。協議域的內容必須依據ISO 3309的地址擴展機制所給出的規定。該機制規定協議域所填充的內容必須爲奇數,也便是要求低字節的最低位爲「1」,高字節的最低位爲「0」。若是當發送端發送的PPP數據幀的協議域字段不符合上述規定,則接收端會認爲此數據幀是不可識別的,那麼接收端會向發送端發送一個Protocol-Reject報文,在該報文尾部將完整地填充被拒絕的報文。 安全 信息域缺省時最大長度不能超過1500字節,其中包括填充域的內容,1500字節大小等於PPP協議中配置參數選項MRU(Maximum Receive Unit)的缺省值,在實際應用當中可根據實際須要進行信息域最大封裝長度選項的協商。信息域若是不足1500字節時可被填充,但不是必須的,若是填充則需通訊雙方的兩端能辨認出有用與無用的信息方可正常通訊。 服務器 協議域和信息域是須要合在一塊兒看的,目前主要用到的協議類型有LCP、NCP和普通的IP協議,而他們相對應的協議域字段則爲0×C02一、0×8021和0×0021,能夠看到應證了這句話:也便是要求低字節的最低位爲「1」,高字節的最低位爲「0」。然後面的信息根據不一樣協議包含了不一樣的報文內容。 網絡
其實這3種不一樣協議就對應PPP協議在運行過程當中的不一樣狀態,之後會在PPP狀態轉移中介紹到,咱們能夠很容易根據PPP幀的協議域就判斷目前處於PPP的哪一個階段。遇到PPP問題,咱們一般經過抓包,而後判斷PPP哪一個階段有問題,再進行分析和問題定位。注意一點的就是,NCP不是一種協議,它的全稱是網絡控制協議,也就是說最後雙方都遵循的數據傳輸協議,能夠是IPCP,也能夠是IPXCP。 負載均衡 CRC校驗域主要是對PPP數據幀傳輸的正確性進行檢測的,固然在數據幀中引入了一些傳輸的保證機制是好的,但能夠反過來講,一樣咱們會引入更多的開銷,這樣可能會增長應用層交互的延遲。 異步 最後給你們一個經過Ethereal抓下來的PPP幀,對應上面的說明,看看你們是否能夠看懂: 測試 7E FF 03 C021 01 01 00 17 02 06 00 0A 00 00 05 06 00 0B 42 CB 07 02 08 02 0D 03 06 7E spa 1.1 PPP概述 計算機網絡 點到點協議(Point to Point Protocol,PPP)是IETF(Internet Engineering Task Force,因特網工程任務組)推出的點到點類型線路的數據鏈路層協議。它解決了SLIP中的問題,併成爲正式的因特網標準。 PPP協議在RFC 166一、RFC 1662和RFC 1663中進行了描述。 PPP支持在各類物理類型的點到點串行線路上傳輸上層協議報文。PPP有不少豐富的可選特性,如支持多協議、提供可選的身份認證服務、能夠以各類方式壓縮數據、支持動態地址協商、支持多鏈路捆綁等等。這些豐富的選項加強了PPP的功能。同時,不管是異步撥號線路仍是路由器之間的同步鏈路都可使用。所以,應用十分普遍。 1 PPP的層次結構 PPP支持各類類型的硬件,包括EIA/TIA 23二、EIA/TIA 44九、EIA/TIA 530、V.3五、V.21等。只要是點到點類型的線路均可以運行PPP。在數據鏈路層,PPP經過LCP協議進行鏈路管理,至關於以太網數據鏈路層的MAC子層。而在網絡層,由NCP爲不一樣的協議提供服務。這裏的NCP至關於以太網數據鏈路層的LLC子層。如圖1所示。
圖1 PPP的層次結構 2 PPP的功能 PPP主要完成了如下功能: 鏈路控制 PPP爲用戶發起呼叫以創建鏈路;在創建鏈路時協商參數選擇;通訊過程當中隨時測試線路,當線路空閒時釋放鏈路等。PPP中完成上述工做的組件是鏈路控制協議LCP(Link Control Protocol,LCP)。 網絡控制 當LCP將鏈路創建好了之後,PPP要開始根據不一樣用戶的須要,配置上層協議所需的環境。PPP使用網絡控制協議NCP(Network Control Protocol,NCP)來爲上層提供服務接口。針對上層不一樣的協議類型,會使用不一樣的NCP組件。如對於IP提供IPCP接口,對於IPX提供IPXCP接口,對於APPLETALK提供ATCP接口等。 1.2 PPP過程 從開始發起呼叫到最終通訊完成後釋放鏈路,PPP的工做經歷了一系列的過程。下面,是這一過程的描述。 當一個PC終端撥號用戶發起一次撥號後,此PC終端首先經過調制解調器呼叫遠程訪問服務器,如提供撥號服務的路由器。 當路由器上的遠程訪問模塊應答了這個呼叫後,就創建起一個初始的物理鏈接。 接下來,PC終端和遠程訪問服務器之間開始傳送一系列通過PPP封裝的LCP分組,用於協商選擇將要採用的PPP參數。 若是上一步中有一方要求認證,接下來就開始認證過程。若是認證失敗,如錯誤的用戶名、密碼,則鏈路被終止,雙方負責通訊的設備或模塊(如用戶端的調制解調器或服務器端的遠程訪問模塊)關閉物理鏈路回到空閒狀態。若是認證成功則進行下一步。 在這步驟中,通訊雙方開始交換一系列的NCP分組來配置網絡層。對於上層使用的是IP協議的情形來講,此過程是由IPCP完成的。 當NCP配置完成後,雙方的邏輯通訊鏈路就創建好了,雙方能夠開始在此鏈路上交換上層數據。 當數據傳送完成後,一方會發起斷開鏈接的請求。這時,首先使用NCP來釋放網絡層的鏈接,歸還IP地址;而後利用LCP來關閉數據鏈路層鏈接;最後,雙方的通訊設備或模塊關閉物理鏈路回到空閒狀態。 圖2給出了上述過程的示意圖。
圖2 PPP過程 1.3 PPP幀格式 PPP幀格式以HDLC幀格式爲基礎,作了不多的改動。兩者的主要區別是:PPP是面向字符的,而HDLC是面向位的。PPP在點到點串行線路上使用字符填充技術。因此,全部的幀的大小都是字節的整數倍。 圖3中給出了PPP的幀格式。
圖3 PPP的幀格式 PPP幀是以標準HDLC標誌字節(01111110)開始和結束的。 接下來是地址字段,缺省狀況下,被固定設成二進制數11111111,由於點到點線路的一個方向上只有一個接收方。 地址字段後面是控制字段,缺省狀況下,被固定設成二進制數00000011。 由於缺省狀況下,地址字段、控制字段老是常數。所以,這兩部分實際能夠省略不要(須要經過LCP進行協商)。 接下來是協議字段。用來標明後面攜帶的是什麼類型的數據。其缺省大小爲2個字節。但若是是LCP包,則能夠是1字節。 接下來是數據字段。其長度可變,缺省最大長度爲1500字節。 接下來是校驗和字段,一般狀況下是2個字節,但也能夠是4字節。 1.4 LCP協商選項 LCP用來在通訊鏈路創建初期,在通訊雙方之間協議功能選項。表1列出了其中主要的選項。它們是身份驗證、壓縮、回叫、多鏈路。 表1 PPP LCP協商選項
1.5 LCP協商的其餘選項 除了身份認證方法以外,PPP的LCP還提供了鏈路壓縮、回叫、多鏈路捆綁等選項。 1 鏈路壓縮 PPP協議運行在速率十分有限的點到點串行鏈路上。爲了提升數據發送效率,能夠採用對數據進行壓縮後再傳送的方法,咱們將其稱爲鏈路壓縮。 LCP支持如下一些鏈路壓縮方法:Stac、Predictor、MPPC以及TCP頭部壓縮。不一樣的方法對CPU及內存的需求並不相同。有些須要更多的內存(內存密集型),有些則須要佔用更多的CPU時間(CPU密集型)。壓縮原理和效果也不相同。 Stac:Stac壓縮算法基於Lempel-Ziv理論,它經過查找、替換傳送內容中的重複字符串的方法達到壓縮數據的目的。使用Stac壓縮算法能夠選擇由各類硬件(適配器、模塊等)壓縮或者由軟件進行壓縮,還能夠選擇壓縮的比率。Stac壓縮算法須要佔用較多的CPU時間。 MPPC:MPPC是微軟的壓縮算法實現,它也是基於Lempel-Ziv理論,也須要佔用較多的CPU時間。 Predictor:Predictor—預測算法經過檢查數據的壓縮狀態(是否已被壓縮過)來決定是否進行壓縮。由於,對數據的二次壓縮通常不會有更大的壓縮率。相反,有時通過二次壓縮的數據反而比一次壓縮後的數據更大。Predictor算法須要佔用更多的內存。 TCP頭部壓縮:TCP頭部壓縮基於Van Jacobson算法,該算法經過刪除TCP頭部一些沒必要要的字節來實現數據壓縮的目的。 2 回叫 回叫又稱爲回撥,是指當通訊一方撥號到另外一方後,由另外一方斷開撥號鏈接並進行反向的撥號。 這對於從甲地到乙地的電話費大於從乙地到甲地的電話費的情形。這時,能夠由甲方首先發起到乙方的呼叫鏈接,當乙方收到甲方的呼叫請求後,斷開乙方的呼叫。而後,從乙方發起到甲方的回叫。甲方應答後,雙方的通訊鏈路就創建起來了。 回叫還有更安全的優勢。由於乙方在回叫以前能夠驗證對方是不是合法用戶,或者能夠用口令數據庫的方法或者能夠用檢驗對方電話號碼的方法。 3 多鏈路捆綁 LCP的多鏈路捆綁(MP)選項經過將通訊兩端之間的多條通訊鏈路捆綁成一條虛擬的鏈路而達到擴充鏈路可用帶寬的目的。 LCP的多鏈路捆綁能夠在多種類型的物理接口上實現,包括異步串行接口、同步串行接口、ISDN基本速率接口BRI、ISDN主速率接口PRI。LCP的多鏈路捆綁也支持不一樣的上層協議封裝類型,如X.2五、ISDN、幀中繼等。 |