《计算机网络》深入学:点对点协议 (PPP)

在计算机网络的数据链路层中,除了广播信道(如以太网)外,另一种重要的通信方式是点对点通信。点对点协议(Point-to-Point Protocol, PPP)是目前使用最广泛的点对点数据链路层协议。本章将详细阐述PPP协议的历史背景、核心架构、帧格式、工作状态机以及其在现代网络中的应用演变。

4.1 背景与发展历史

4.1.1 从SLIP到PPP的演进

在20世纪80年代末至90年代初,随着互联网的雏形开始普及,用户主要通过电话线和调制解调器(Modem)接入网络。此时,为了在串行线路上传输IP数据报,IETF制定了串行线路IP协议(Serial Line IP, SLIP)。

然而,SLIP存在严重的设计缺陷:

  1. 不支持多协议:仅支持IP协议,无法处理IPX或AppleTalk等其他网络层协议。
  2. 缺乏协商机制:通信双方必须预先手动配置IP地址等参数,无法动态分配。
  3. 无差错检测:数据传输过程中如果出现误码,SLIP无法检测,只能依靠上层协议(如TCP)处理,效率低下。

为了解决这些问题,IETF在1992年发布了RFC 1661标准,正式定义了PPP协议。PPP不仅解决了SLIP的所有痛点,还增加了身份验证、链路质量监测等功能,迅速成为了广域网(WAN)链路和拨号接入的事实标准。

4.2 PPP协议的体系架构

PPP并非单一协议,而是一个协议簇。它通过分层设计,实现了良好的扩展性和灵活性。

4.2.1 三大组成部分

PPP协议主要由以下三个核心部分组成:

  1. 封装方法(Encapsulation)

    定义了如何将不同协议的数据报(Datagram)封装在链路层帧中。PPP借鉴了HDLC(高级数据链路控制)的帧格式,支持同步和异步链路。

  2. 链路控制协议(Link Control Protocol, LCP)

    这是PPP的核心扩展。LCP用于建立、配置、测试和终止数据链路连接。它允许通信双方协商链路参数,如最大接收单元(MRU)、认证协议类型等。

  3. 网络控制协议(Network Control Protocol, NCP)

    PPP支持多种网络层协议。针对每一个网络层协议,PPP都有一个相应的NCP进行配置和协商。例如,IPCP (IP Control Protocol)用于协商IP地址,IPXCP用于协商Novell IPX地址。

图4-1:PPP协议的层次结构图

4.3 PPP帧格式与透明传输

4.3.1 帧格式详解

PPP帧的格式基于ISO的HDLC标准,以字节为单位。其结构如下:

字段 标志 (Flag) 地址 (Address) 控制 (Control) 协议 (Protocol) 信息 (Information) 帧检验序列 (FCS) 标志 (Flag)
字节数 1 1 1 1或2 变长 2或4 1
  • 标志字段 (F) :固定为 0x7E0\text{x}7E0x7E(二进制 011111100111111001111110),用于标识一帧的开始和结束。
  • 地址字段 (A) :固定为 0xFF0\text{x}FF0xFF,表示广播地址。因为点对点链路中只有一个接收方,所以该字段实际上没有意义,只是为了保留HDLC格式。
  • 控制字段 © :固定为 0x030\text{x}030x03(无编号帧)。
  • 协议字段 :这是PPP区别于传统HDLC的关键。它指明了信息字段中封装的是什么数据。例如:
    • 0x00210\text{x}00210x0021:表示IP数据报。
    • 0xC0210\text{x}C0210xC021:表示LCP数据。
    • 0x80210\text{x}80210x8021:表示IPCP数据。
    • 0xC0230\text{x}C0230xC023:表示PAP认证数据。
  • 信息字段:数据载荷,长度可变,默认最大长度(MRU)为1500字节。
  • FCS:帧检验序列,通常使用CRC-16或CRC-32进行差错检测。

4.3.2 透明传输机制

为了防止信息字段中出现与标志字段(0x7E0\text{x}7E0x7E)相同的比特组合导致误判,PPP提供了透明传输机制。

  1. 字节填充(Byte Stuffing) - 适用于异步链路

    使用转义字符 0x7D0\text{x}7D0x7D。

    • 如果数据中出现 0x7E0\text{x}7E0x7E,则转换为2字节序列 (0x7D,0x5E0\text{x}7D, 0\text{x}5E0x7D,0x5E)。
    • 如果数据中出现 0x7D0\text{x}7D0x7D,则转换为 (0x7D,0x5D0\text{x}7D, 0\text{x}5D0x7D,0x5D)。
    • 如果数据中出现ASCII控制字符(数值小于 0x200\text{x}200x20),也在其前加入 0x7D0\text{x}7D0x7D 并改变编码。
  2. 零比特填充(Zero Bit Stuffing) - 适用于同步链路

    硬件在发送端扫描数据,只要发现5个连续的 111,就立即插入一个 000。接收端发现5个连续的 111 后,自动删除其后的 000,还原数据。

4.4 PPP链路的工作状态机

PPP链路的建立过程是一个标准的状态机转换过程,主要经历以下阶段:

图4-2:PPP链路建立状态转移图

  1. 链路静止 (Dead):物理层未连接,未检测到载波。
  2. 链路建立 (Establish) :物理层连接后,双方交换LCP配置报文(Configure-Request)。协商内容包括MRU、认证方式等。
    • 如果收到 Configure-Ack,表示参数协商一致,进入下一状态。
    • 如果收到 Configure-NakConfigure-Reject,需调整参数重新协商。
  3. 认证 (Authenticate):若在建立阶段协商了认证(如CHAP),则进行身份验证。若验证失败,链路直接转入终止状态。
  4. 网络层协议配置 (Network):认证通过后,NCP开始工作(如IPCP)。此时主要进行IP地址的动态分配或协商。
  5. 链路打开 (Open):完成NCP协商后,链路正式连通,开始传输网络层数据包。
  6. 链路终止 (Terminate):通信完毕或发生错误,发送LCP终止报文(Terminate-Request),释放资源。

4.5 安全认证:PAP与CHAP

PPP的一个重要特性是支持身份验证,这也是ISP(互联网服务提供商)进行计费的基础。

4.5.1 PAP (Password Authentication Protocol)

PAP是一种简单的两次握手认证协议。

  1. 被认证方发送用户名和口令。
  2. 认证方验证后,返回接受(Ack)或拒绝(Nak)。
  • 缺点:口令以明文形式在链路上传输,极易被截获,安全性极低。

4.5.2 CHAP (Challenge Handshake Authentication Protocol)

CHAP是一种更安全的三次握手认证协议,过程中不传输口令本身。

  1. 挑战:链路建立后,认证方发送一个随机数(Challenge)给被认证方。
  2. 响应:被认证方使用自己的口令与该随机数进行MD5哈希运算,将结果(Response)发回。
  3. 验证:认证方利用本地存储的对方口令和刚才发送的随机数进行同样的哈希运算。若结果一致,则认证通过。
  • 优点:安全性高,且能防止重放攻击。

4.6 现代应用:PPPoE及其演进

随着宽带技术的发展,传统的电话拨号(Dial-up)逐渐被DSL和光纤取代。然而,以太网(Ethernet)本身是基于广播的,缺乏认证和计费机制。为了结合以太网的高速和PPP的认证控制功能,PPPoE (PPP over Ethernet) 应运而生。

4.6.1 PPPoE原理

PPPoE将PPP帧封装在以太网帧的数据字段中。
以太网帧=目的MAC+源MAC+类型(0x8864)+PPPoE头部+PPP帧 \text{以太网帧} = \text{目的MAC} + \text{源MAC} + \text{类型}(0\text{x}8864) + \text{PPPoE头部} + \text{PPP帧} 以太网帧=目的MAC+源MAC+类型(0x8864)+PPPoE头部+PPP帧

这使得ISP可以通过ADSL调制解调器或光猫,利用PPP的CHAP机制验证家庭宽带用户的账号密码,验证通过后利用IPCP协议下发公网IP地址。这是目前家庭宽带上网最普遍的方式。

4.6.2 SONET/SDH上的PPP

在骨干网传输中,PPP也被用于SONET/SDH链路,称为POS (Packet over SONET)。它利用PPP将IP数据包封装后,直接映射到SONET的同步净荷中,去除了ATM层的开销,提高了传输效率。

4.7 本章小结

PPP协议作为数据链路层的重要协议,凭借其完善的LCP链路控制、NCP多协议支持以及可靠的身份认证机制,解决了早期串行通信的诸多难题。虽然物理传输介质从低速串行线演变成了高速光纤和以太网,但PPP定义的认证、协商和封装逻辑依然通过PPPoE等形式,在现代互联网接入网中发挥着不可替代的作用。

相关推荐
BingoGo2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php
JaguarJack2 天前
当你的 PHP 应用的 API 没有限流时会发生什么?
后端·php·服务端
BingoGo3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack3 天前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
JaguarJack4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
后端·php·服务端
BingoGo4 天前
推荐 PHP 属性(Attributes) 简洁读取 API 扩展包
php
JaguarJack5 天前
告别 Laravel 缓慢的 Blade!Livewire Blaze 来了,为你的 Laravel 性能提速
后端·php·laravel
郑州光合科技余经理5 天前
代码展示:PHP搭建海外版外卖系统源码解析
java·开发语言·前端·后端·系统架构·uni-app·php
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅5 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑