PPP,點對點協議修改了SLIP協議中的所有缺陷。PPP包括以下三個部分:
1) 在串行鏈路上封裝IP數據報的方法。PPP既支持數據為8位和無奇偶檢驗的異步模式(如大多數計算機上都普遍存在的串行接口),還支持面向比特的同步鏈接。
2) 建立、配置及測試數據鏈路的鏈路控制協議( LCP:Link Control Protocol)。它允許通信雙方進行協商,以確定不同的選項。
3) 針對不同網絡層協議的網絡控制協議(NCP:Network Control Protocol)體系。當前RFC定義的網絡層有IP、OSI網絡層、DECnet以及Apple Talk。例如,IP NCP允許雙方商定是否對報文首部進行壓縮,類似于CSLIP(縮寫詞NCP也可用在TCP的前面)。
RFC 1548[Simpson 1993]描述了報文封裝的方法和鏈路控制協議。RFC 1332[McGregor 1992 ]描述了針對IP的網絡控制協議。
PPP數據幀的格式看上去很像ISO的HDLC(高層數據鏈路控制)標準。圖2-3是PPP數據幀的格式。
每一幀都以標志字符0x7e開始和結束。緊接著是一個地址字節,值始終是0xff,然后是一個值為0x03的控制字節。

接下來是協議字段,類似于以太網中類型字段的功能。當它的值為0x0021時,表示信息字段是一個IP數據報;值為0xc021時,表示信息字段是鏈路控制數據;值為0x8021時,表示信息字段是網絡控制數據。
CRC字段(或FCS,幀檢驗序列)是一個循環冗余檢驗碼,以檢測數據幀中的錯誤。
由于標志字符的值是0x7e,因此當該字符出現在信息字段中時,PPP需要對它進行轉義。
在同步鏈路中,該過程是通過一種稱作比特填充(bitstuffing)的硬件技術來完成的[ Tanenbaum 1989]。在異步鏈路中,特殊字符0x7d用作轉義字符。當它出現在P P P數據幀中時,那么緊接著的字符的第6個比特要取其補碼,具體實現過程如下:
1) 當遇到字符0x7e時,需連續傳送兩個字符:0x7d和0x5e,以實現標志字符的轉義。
2) 當遇到轉義字符0x7d時,需連續傳送兩個字符:0x7d和0x5d,以實現轉義字符的轉義。
3 ) 默認情況下,如果字符的值小于0x20(比如,一個ASCII控制字符),一般都要進行轉義。例如,遇到字符0x01時需連續傳送0x7d和0x21兩個字符(這時,第6個比特取補碼后變為1,而前面兩種情況均把它變為0)。
這樣做的原因是防止它們出現在雙方主機的串行接口驅動程序或調制解調器中,因為有時它們會把這些控制字符解釋成特殊的含義。另一種可能是用鏈路控制協議來指定是否需要對這32個字符中的某一些值進行轉義。默認情況下是對所有的32個字符都進行轉義。
與SLIP類似,由于PPP經常用于低速的串行鏈路,因此減少每一幀的字節數可以降低應用程序的交互時延。利用鏈路控制協議,大多數的產品通過協商可以省略標志符和地址字段,并且把協議字段由2個字節減少到1個字節。如果我們把PPP的幀格式與前面的SLIP的幀格式(圖2-2)進行比較會發現, P P P只增加了3個額外的字節:
1個字節留給協議字段,另2個給CRC字段使用。另外,使用IP網絡控制協議,大多數的產品可以通過協商采用Van Jacobson報文首部壓縮方法(對應于CSLIP壓縮),減小IP和TCP首部長度。
總的來說, PPP比SLIP具有下面這些優點:
(1) PPP支持在單根串行線路上運行多種協議,不只是IP協議;
(2) 每一幀都有循環冗余檢驗;
(3) 通信雙方可以進行IP地址的動態協商(使用I P網絡控制協議);
(4) 與CSLIP類似,對TCP和IP報文首部進行壓縮;
(5) 鏈路控制協議可以對多個數據鏈路選項進行設置。為這些優點付出的代價是在每一幀的首部增加3個字節,當建立鏈路時要發送幾幀協商數據,以及更為復雜的實現。
盡管PPP比SLIP有更多的優點,但是現在的SLIP用戶仍然比PPP用戶多。隨著產品越來越多,產家也開始逐漸支持PPP,因此最終PPP應該取代SLIP。
- 第1章 概述
- 1.1 引言
- 1.2 分層
- 1.3 TCP/IP的分層
- 1.4 互聯網的地址
- 1.5 域名系統
- 1.6 封裝
- 1.7 分用
- 1.8 客戶-服務器模型
- 1.9 端口號
- 1.10 標準化過程
- 1.11 RFC
- 1.12 標準的簡單服務
- 1.13 互聯網
- 1.14 實現
- 1.15 應用編程接口
- 1.16 測試網絡
- 1.17 小結
- 第2章 鏈路層
- 2.1 引言
- 2.2 以太網和IEEE 802封裝
- 2.3 尾部封裝
- 2.4 SLIP:串行線路IP
- 2.5 壓縮的SLIP
- 2.6 PPP:點對點協議
- 2.7 環回接口
- 2.8 最大傳輸單元MTU
- 2.9 路徑MTU
- 2.10 串行線路吞吐量計算
- 2.11 小結
- 第3章 IP:網際協議
- 3.1 引言
- 3.2 IP首部
- 3.3 IP路由選擇
- 3.4 子網尋址
- 3.5 子網掩碼
- 3.6 特殊情況的IP地址
- 3.7 一個子網的例子
- 3.8 ifconfig命令
- 3.9 netstat命令
- 3.10 IP的未來
- 3.11 小結
- 第4章 ARP:地址解析協議
- 4.1 引言
- 4.2 一個例子
- 4.3 ARP高速緩存
- 4.4 ARP的分組格式
- 4.5 ARP舉例
- 4.5.1 一般的例子
- 4.5.2 對不存在主機的ARP請求
- 4.5.3 ARP高速緩存超時設置
- 4.6 ARP代理
- 4.7 免費ARP
- 4.8 arp命令
- 4.9 小結
- 第5章 RARP:逆地址解析協議
- 5.1 引言
- 5.2 RARP的分組格式
- 5.3 RARP舉例
- 5.4 RARP服務器的設計
- 5.4.1 作為用戶進程的RARP服務器
- 5.4.2 每個網絡有多個RARP服務器
- 5.5 小結
- 第6章 ICMP:Internet控制報文協議
- 6.1 引言
- 6.2 ICMP報文的類型
- 6.3 ICMP地址掩碼請求與應答
- 6.4 ICMP時間戳請求與應答
- 6.4.1 舉例
- 6.4.2 另一種方法
- 6.5 ICMP端口不可達差錯
- 6.6 ICMP報文的4.4BSD處理
- 6.7 小結
- 第7章 Ping程序
- 7.1 引言
- 7.2 Ping程序
- 7.2.1 LAN輸出
- 7.2.2 WAN輸出
- 7.2.3 線路SLIP鏈接
- 7.2.4 撥號SLIP鏈路
- 7.3 IP記錄路由選項
- 7.3.1 通常的例子
- 7.3.2 異常的輸出
- 7.4 IP時間戳選項
- 7.5 小結
- 第8章 Traceroute程序
- 8.1 引言
- 8.2 Traceroute程序的操作
- 8.3 局域網輸出
- 8.4 廣域網輸出
- 8.5 IP源站選路選項
- 8.5.1 寬松的源站選路的traceroute程序示例
- 8.5.2 嚴格的源站選路的traceroute程序示例
- 8.5.3 寬松的源站選路traceroute程序的往返路由
- 8.6 小結
- 第9章 IP選路
- 9.1 引言
- 9.2 選路的原理
- 9.2.1 簡單路由表
- 9.2.2 初始化路由表
- 9.2.3 較復雜的路由表
- 9.2.4 沒有到達目的地的路由
- 9.3 ICMP主機與網絡不可達差錯
- 9.4 轉發或不轉發
- 9.5 ICMP重定向差錯
- 9.5.1 一個例子
- 9.5.2 更多的細節
- 9.6 ICMP路由器發現報文
- 9.6.1 路由器操作
- 9.6.2 主機操作
- 9.6.3 實現
- 9.7 小結