Appearance
PPP 点对点协议
考情分析
PPP 协议是数据链路层的重要协议,408 中以选择题为主,偶尔出现在综合题中。常考帧格式各字段的含义、透明传输的实现方式、LCP/NCP 的作用区分,以及 PPP 与 HDLC 的对比。
考频:★★★
协议概述
PPP(Point-to-Point Protocol)——点对点协议,是目前使用最广泛的点对点数据链路层协议。用户通过拨号或宽带接入 ISP 时,在用户端和 ISP 之间使用的就是 PPP 协议。
PPP 协议的设计目标:在点对点链路上传输网络层数据报,简单、易于实现。
PPP 的特点
- 面向字节:以字节为单位进行填充处理
- 只支持点对点连接:不支持多点连接(与 HDLC 一样)
- 不提供可靠传输:没有序号和确认机制,差错帧直接丢弃,由上层协议负责可靠性
- 只支持全双工链路
- 不提供流量控制
PPP 的三个组成部分
PPP 协议由三个部分组成,这是 408 的高频考点:
| 组成部分 | 全称 | 作用 |
|---|---|---|
| PPP 帧格式 | — | 定义数据帧的封装格式,类似 HDLC |
| LCP | 链路控制协议(Link Control Protocol) | 建立、配置、测试和释放数据链路连接 |
| NCP | 网络控制协议(Network Control Protocol) | 为不同的网络层协议建立和配置连接 |
LCP 负责链路层面的事务:协商最大接收单元(MRU)、是否使用认证、链路质量监测等。
NCP 是一族协议,每种网络层协议对应一个 NCP。例如,IP 协议对应的 NCP 叫 IPCP(IP Control Protocol),负责协商 IP 地址、DNS 服务器地址等网络层参数。
PPP 帧格式
PPP 的帧格式借鉴了 HDLC,但做了简化:
+----------+----------+----------+----------+------------------+----------+----------+
| 标志 F | 地址 A | 控制 C | 协议 | 信息 | FCS | 标志 F |
| 7E | FF | 03 | 2字节 | ≤1500字节 | 2字节 | 7E |
| (1字节) | (1字节) | (1字节) | | | | (1字节) |
+----------+----------+----------+----------+------------------+----------+----------+各字段的含义:
| 字段 | 长度 | 值 | 说明 |
|---|---|---|---|
| 标志字段 F(Flag) | 1 字节 | 0x7E(01111110) | 帧的定界符,标记帧的开始和结束 |
| 地址字段 A(Address) | 1 字节 | 0xFF | 固定值,因为 PPP 是点对点的,不需要寻址 |
| 控制字段 C(Control) | 1 字节 | 0x03 | 固定值,表示无编号帧(无序号、无确认) |
| 协议字段(Protocol) | 2 字节 | 可变 | 指示信息字段中携带的是什么协议的数据 |
| 信息字段(Information) | ≤1500 字节 | 可变 | 携带的上层数据报 |
| FCS | 2 字节 | CRC 校验值 | 帧检验序列,用 CRC 校验整帧是否出错 |
协议字段的常见取值:
0x0021:信息字段为 IP 数据报0xC021:信息字段为 LCP 数据0x8021:信息字段为 NCP(IPCP)数据0xC023:信息字段为 PAP 认证数据0xC223:信息字段为 CHAP 认证数据
注意: 地址字段 A 和控制字段 C 都是固定值,不携带实际信息。这是因为 PPP 是点对点协议,不需要地址来区分多个终端;控制字段固定为 0x03 表示不使用序号和确认机制。
PPP 的工作流程
PPP 链路的建立和通信要经历多个阶段,可以用状态机来描述:
各阶段详解
阶段一:链路建立(LCP 协商)
通信双方通过 LCP 交换配置报文,协商链路参数:
- 最大接收单元 MRU(默认 1500 字节)
- 是否需要认证,以及使用哪种认证协议
- 链路质量监测等选项
LCP 协商成功后,链路进入下一阶段。
阶段二:认证(可选)
如果 LCP 协商时约定了需要认证,则执行认证过程。PPP 支持两种认证协议:
- PAP(Password Authentication Protocol,口令认证协议):以明文传输用户名和口令,简单但不安全,采用两次握手
- CHAP(Challenge Handshake Authentication Protocol,质询-握手认证协议):使用三次握手和单向哈希函数,口令不在链路上传输,更安全
如果不需要认证,则直接跳到下一阶段。
阶段三:网络层协议配置(NCP 协商)
通过 NCP(如 IPCP)协商网络层参数:
- 分配 IP 地址
- 配置 DNS 服务器地址
- 协商数据压缩方式等
阶段四:链路打开(数据传输)
NCP 协商完成后,链路正式打开,双方可以传输网络层数据报。这是链路的正常工作状态。
阶段五:链路终止
当一方不再需要通信时,通过 LCP 发送终止请求关闭链路。
透明传输
PPP 帧使用 0x7E(01111110)作为帧定界标志。如果数据部分恰好出现了 0x7E,就会导致接收方误判帧边界。PPP 针对异步传输和同步传输分别采用不同的透明传输方案。
字节填充法(异步传输)
在异步传输(面向字节)中,PPP 使用转义字符 0x7D 进行字节填充:
| 数据中出现的字节 | 填充后的结果 | 说明 |
|---|---|---|
0x7E(标志字节) | 0x7D 0x5E | 0x7E XOR 0x20 = 0x5E |
0x7D(转义字节本身) | 0x7D 0x5D | 0x7D XOR 0x20 = 0x5D |
小于 0x20 的 ASCII 控制字符 | 0x7D + 原字节 XOR 0x20 | 防止控制字符干扰传输 |
规律: 需要转义的字节统一用 0x7D 引导,后跟该字节与 0x20 异或的结果。
接收方的处理:遇到 0x7D 就丢弃它,取后面一个字节与 0x20 做异或运算,还原出原始数据。
零比特填充法(同步传输)
在同步传输(面向比特)中,PPP 使用与 HDLC 相同的零比特填充法:
- 发送方: 在标志字段之间的数据部分,每遇到连续 5 个 1,就在后面插入一个 0
- 接收方: 每遇到连续 5 个 1,就删除其后面紧跟的 0
这样可以保证数据部分不会出现 01111110,不会与帧定界标志混淆。
示例:
原始数据: 01101111 11010111 11100010
↑↑↑↑↑ ↑↑↑↑↑
检查连续1: 位置4-8有5个连续1 位置4-8有5个连续1
填充后: 01101111 101010111 110100010
↑ ↑
插入的0 插入的0PPP 与 HDLC 的对比
| 对比项 | PPP | HDLC |
|---|---|---|
| 面向 | 面向字节 | 面向比特 |
| 链路类型 | 仅点对点 | 点对点和多点 |
| 地址字段 | 固定 0xFF(无实际意义) | 有实际地址功能 |
| 可靠传输 | 不提供(无序号、无确认) | 提供(有序号和确认机制) |
| 同步方式 | 支持异步和同步 | 仅同步 |
| 透明传输 | 异步:字节填充;同步:零比特填充 | 零比特填充 |
| 网络层支持 | 通过 NCP 支持多种网络层协议 | 无此机制 |
| 认证功能 | 支持 PAP/CHAP 认证 | 不提供 |
关键区别总结:
- PPP 有 NCP 机制,能动态协商网络层参数,HDLC 没有
- PPP 是不可靠的(帧出错就丢弃),HDLC 可以提供可靠传输
- PPP 支持认证,HDLC 不支持
- PPP 的地址字段和控制字段是"摆设"(固定值),HDLC 的是有实际功能的
易错点
1. PPP 不提供可靠传输
PPP 的控制字段固定为 0x03(无编号帧),没有序号和确认机制。帧出错时直接丢弃,由上层协议(如 TCP)来保证可靠性。不要因为 PPP 有 FCS 校验就以为它提供了可靠传输——FCS 只能检错,不能纠错,也不能重传。
2. LCP 和 NCP 的作用不要搞混
LCP 管的是链路层的事:建立/释放链路、协商链路参数(MRU、认证方式等)。NCP 管的是网络层的事:分配 IP 地址、协商压缩算法等。它们工作在不同的阶段。
3. PPP 的地址字段 0xFF 不能省略
虽然地址字段是固定值,没有实际寻址功能,但它是帧格式的一部分,不能省去(除非 LCP 协商时双方同意压缩地址和控制字段)。
4. 异步传输用字节填充,同步传输用零比特填充
两种透明传输方式对应不同的传输模式,不要混用。408 中如果考 PPP 的透明传输,通常会明确指出是异步还是同步模式。
5. PPP 只支持点对点连接
PPP 不能用于多点共享链路。如果题目问"PPP 是否支持广播",答案是否定的。
高频考点清单
- PPP 的三个组成部分:帧格式、LCP、NCP 及各自的作用
- PPP 帧格式各字段的值和含义(尤其是
0x7E、0xFF、0x03) - 协议字段的作用:标识上层协议类型
- PPP 不提供可靠传输、不支持多点连接
- 异步传输的字节填充规则(
0x7D转义机制) - 同步传输的零比特填充规则
- PPP 工作流程:链路建立 → 认证 → NCP 协商 → 数据传输 → 链路终止
- PPP 与 HDLC 的对比(面向字节 vs 面向比特、可靠性、地址字段等)
- PAP 和 CHAP 的区别(明文 vs 哈希、两次握手 vs 三次握手)