PPP协议
本文最后更新于:2025年11月10日 下午
一、协议基础与定位
- 核心定位:PPP是目前使用最广泛的点对点数据链路层协议,主要用于解决用户设备与ISP(互联网服务提供商,如中国电信、中国联通、中国移动)之间的网络接入问题,是用户接入因特网的关键数据链路层技术,常与PPPoE(PPP over Ethernet)协议配合使用。
- 发展与标准:由因特网工程任务组(IETF)于1992年制定,经1993-1994年修订后成为因特网正式标准,核心标准文档为RFC1661(《The Point-to-Point Protocol (PPP)》)和RFC1662(《PPP in HDLC-like Framing》),此外还有多个扩展标准(如RFC1598定义PPP在X.25中的应用、RFC1618定义PPP over ISDN等)。
二、协议核心构成
PPP协议通过三部分协同工作,实现点对点链路的高效数据传输,具体如下:
| 构成部分 | 核心功能 | 关键说明 |
|---|---|---|
| 对各种协议数据报的封装方法(封装成帧) | 将网络层不同协议的数据包(如IP、IPX、AppleTalk)封装成PPP帧,适配物理层传输 | 是数据在链路层传输的“包装规范”,确保数据格式统一 |
| 链路控制协议(LCP) | 建立、配置、测试数据链路连接,协商链路参数 | 负责链路的“初始化与维护”,是PPP链路建立的基础 |
| 一套网络控制协议(NCPs) | 为不同网络层协议提供支持,配置网络层参数 | 每种NCP对应一种网络层协议,如IPCP(IP控制协议)用于配置IP地址 |
三、PPP帧格式
PPP帧分为首部、数据部分和尾部,各字段功能与规格明确,具体结构如下:
1. 帧结构总览
| 字段 | 标志(F) | 地址(A) | 控制(C) | 协议(P) | 数据部分 | 帧检验序列(FCS) | 标志(F) |
|---|---|---|---|---|---|---|---|
| 长度 | 1字节 | 1字节 | 1字节 | 2字节 | ≤1500字节 | 2字节 | 1字节 |
| 功能 | 帧的定界符,取值为0x7E(二进制01111110) |
预留,固定取值0xFF,目前无实际作用 |
预留,固定取值0x03,目前无实际作用 |
指明数据部分的协议类型,用于上层协议分发 | 承载网络层数据包(如IP数据报、LCP/NCP分组) | 基于CRC-CCITT(公式:X¹⁶+X¹²+X⁵+1)计算的校验位,检测帧传输错误 |
与首部标志一致,确保帧边界完整 |
2. 协议(P)字段关键取值
| 协议字段值 | 对应数据类型 | 说明 |
|---|---|---|
0x0021 |
IP数据报 | 数据部分需送交网络层IP协议处理 |
0xC021 |
LCP分组 | 数据部分需送交链路层LCP协议处理 |
0x8021 |
NCP分组 | 数据部分需送交对应NCP协议处理(如IPCP) |
四、透明传输机制
透明传输是指确保帧内数据部分中的0x7E(帧定界符)、控制字符等不被误识别为帧边界,PPP针对不同链路类型采用两种方法:
1. 面向字节的异步链路:字节填充法(插入转义字符)
- 发送方处理规则:
- 若数据中出现
0x7E(定界符),替换为0x7D(转义字符)+0x5E; - 若数据中出现
0x7D(转义字符),替换为0x7D+0x5D; - 若数据中出现ASCII控制字符(数值<
0x20),在该字符前插入0x7D,并将字符编码+0x20。
- 若数据中出现
- 接收方处理规则:执行反向变换,恢复原始数据(如
0x7D+0x5E还原为0x7E,0x7D+0x5D还原为0x7D)。
2. 面向比特的同步链路:比特填充法(插入比特0)
- 发送方处理规则:扫描数据部分的比特流,每发现5个连续的“1”,立即插入1个“0”(例:
0111110→01111100); - 接收方处理规则:扫描数据部分的比特流,每发现5个连续的“1”,删除其后的1个“0”,恢复原始比特流。
五、差错检测机制
PPP采用帧检验序列(FCS) 实现差错检测,具体流程:
- 发送方:基于CRC-CCITT算法,对“地址(A)+控制(C)+协议(P)+数据部分”计算FCS值,封装到FCS字段;
- 接收方:收到帧后,对相同字段重新计算FCS,与帧中FCS字段对比——若一致则接收帧,若不一致则丢弃帧;
- 注意:PPP数据链路层不提供可靠传输服务(无重传机制),可靠性需由上层协议(如TCP)保障。
六、工作状态与链路建立流程
PPP链路建立需经历“物理层连接→LCP配置→鉴别→NCP配置→数据通信→链路终止”六个阶段,具体流程如下:
- 静止状态:链路未建立,无物理层连接;
- 物理层连接建立:检测到载波信号,物理层链路接通;
- LCP配置协商:
- 双方交换LCP分组,协商链路参数(如最大帧长、是否启用鉴别);
- 协商成功进入下一阶段,失败则终止链路;
- 鉴别阶段:
- 可选流程,支持三种方式:无需鉴别、口令鉴别协议(PAP)、挑战握手鉴别协议(CHAP);
- 鉴别成功进入NCP配置,失败则终止链路;
- NCP配置阶段:
- 双方交换网络层特定的NCP分组(如IP场景下的IPCP),配置网络层参数(如分配IP地址);
- 配置完成后,链路进入“网络打开”状态,可进行数据通信;
- 链路终止:
- 触发条件:载波停止、出现故障、收到终止请求;
- 终止后返回“静止状态”。
PPP协议
https://hellowydwyd.github.io/2025/10/08/PPP协议/