思维导图

第二部分:具体场景
在上一部分,我们掌握了数据链路层的三个基本问题:封装成帧、差错检测、可靠传输。它们构成了链路层协议的"工具箱"。 数据链路层的所有协议的目的都是为了解决这个三个问题,只是对于不同的场景,具有不同的协议,接下来我们就介绍不同场景下的协议
我们先来介绍一下具体场景的分类
场景的分类
首先我们要明白具体场景是怎么分类的,是依据什么标准分类的呢?
是依据信道的共享方式 这个标准进行分类的
| 分类维度 | 具体场景 | 核心矛盾 | 对应协议 |
|---|---|---|---|
| 点对点链路 | 两根线直连两台设备 | 链路两端只有彼此,不需要寻址,但需要链路管理 | PPP |
| 共享广播信道 | 多台设备连在同一(线/无线频段)上 | 谁都能发,但大家一起发就会冲突 | CSMA/CD(有线)CSMA/CA(无线) |
| 交换式网络 | 多台设备通过交换机连接,每条链路独享 | 冲突问题解决了,但交换机需要知道该转发给谁 | 交换机自学习、VLAN |
在之后的博客当中,我们会从点对点链路->共享式广播信道->交换式网络 ,在本文中,我们先来学习最简单的一种场景以及其对应的协议:点对点链路 & PPP协议
阅读说明
因为我们知道了学习数据链路层会遇到不同的场景,每个场景都有不同的协议,所以自然在之后的博客当中,都是先介绍场景,在介绍协议的。
场景一:点对点链路
点对点协议 PPP:当两台机器直连时
我们先从最简单的场景开始:
如果只有两台机器,通过一根线直接连在一起,链路层协议应该怎么设计?
这就是 PPP(Point-to-Point Protocol,点对点协议)要解决的问题。
为什么我们需要 PPP协议?
核心矛盾
"两台机器之间只有一根直连的物理线路" vs "需要在这根线上有序、可靠地传输多种网络层数据报"
在计算机网络发展的早期,用户通过电话线拨号上网是最常见的接入方式。
你的电脑通过调制解调器(猫 🐱)连接到电话线,电话线另一头连着ISP(网络服务提供商)的接入服务器。这是一条典型的点对点链路------只有两台设备,中间没有任何交换机或路由器。
这种场景有一个特点:链路两端只有两个设备,不需要复杂的寻址。 你不需要MAC地址来判断"数据是发给谁的",因为只有一个可能的接收方。
由核心矛盾衍生出多个问题,如下:
但简单并不意味着没有需求。需要解决这些问题:
- 如何封装网络层的数据报?(成帧)
- 如何支持多种网络层协议?(IPv4、IPv6、其他协议)
- 如何建立、配置、测试和拆除链路?(链路管理)
- 如何处理异步传输?(两端速率可能不一致)
PPP 的设计要求
IETF 在设计 PPP 时,给它规定了几个核心要求,这些要求恰好对应了我们在第一部分学过的三个基本问题:
- 封装成帧 :必须能正确地将网络层数据报封装成帧 ,并处理透明传输问题
- 支持多种网络层协议:不能只支持 IP,还要能同时支持 IPv6、AppleTalk 等其他协议
- 链路控制:必须能建立、配置、测试和拆除物理链路
- 差错检测:必须能检测出传输错误
- 网络层地址协商:必须能让通信双方协商各自使用的网络层地址
注意 :PPP 只提供差错检测 ,不提供可靠传输(确认和重传)。它发现帧出错了就直接丢弃,把重传的责任交给上层协议(比如 TCP),为什么要这样设计呢? 因为简单而又可靠
PPP协议是什么?
在知道PPP的设计要求之后,我们就来看 PPP的组成(要满足PPP的设计要求)
从组成上来看,PPP协议由3个部分组成:

| PPP组成 | 对应哪条设计要求 | 解决的问题 |
|---|---|---|
| LCP | 链路控制、网络层地址协商 | 链路的建立、配置、测试和拆除 |
| 封装方法 | 封装成帧、透明传输、差错检测 | 数据怎么打包、怎么检错 |
| NCP | 支持多种网络层协议 | 怎么同时支持IPv4、IPv6等 |
PPP 的帧格式:如何解决成帧?
PPP 帧的结构

| 字段 | 长度 | 作用 |
|---|---|---|
| Flag | 1字节 | 帧的开始和结束标志,固定为 0x7E |
| Addr | 1字节 | 地址字段,在点对点链路中无实际意义,固定为 0xFF |
| Ctrl | 1字节 | 控制字段,固定为 0x03 |
| Protocol | 1-2字节 | 标识数据部分承载的是哪种网络层协议(IPv4、IPv6等) |
| Information | 变长 | 承载的网络层数据报,长度可变,默认最大1500字节 |
| FCS | 1字节 | 帧检验序列,用 CRC 做差错检测 |
注意 :协议字段Protocol
当取值为 0x0012时,PPP帧的信息字段 I 是 IP 数据报
当取值为 0xC021时,PPP帧的信息字段 I 是 PPP 链路控制协议的分组
当取值为 0x8021时,PPP帧的信息字段 I 是 PPP 网络控制协议的分组

这样就满足了 PPP 的组成要求
注意 :
PPP 帧没有源地址和目的地址字段。因为点对点链路只有两个端点,不存在寻址问题。地址字段
0xFF是广播地址,在这里只是一个占位符,没有实际意义(0x表示之后的字符式是十六进制)
透明传输:当数据里出现了 0x7E
Flag 字段 0x7E 用来标识帧边界。但如果数据部分恰好也包含了 0x7E,接收方就会误以为帧结束了。这就是我们之前讨论过的透明传输问题。

PPP 的解决方案:字节填充
- PPP 运行在异步传输(字符传输)链路上时,使用字节填充法。
- 发送方扫描整个数据部分,如果遇到
0x7E,就把它替换成0x7D+0x5E两个字节。 - 如果遇到
0x7D本身,就把它替换成0x7D+0x5D。 - 接收方收到后做反向替换,还原原始数据。

PPP的解决方案:字节填充
- PPP 运行在同步传输(比特流传输)链路上时,使用零比特填充法。
- 发送方在发送整个帧时,边发送边检查数据部分。如果发现连续出现了 5 个 1 ,就在这 5 个 1 后面自动插入一个 0。
- 这样做的目的是确保数据部分永远不会出现和帧定界符
01111110(连续 6 个 1)一模一样的比特组合。 - 接收方收到帧后做相反操作:边接收边检查,如果发现连续 5 个 1 后面跟着一个 0,就自动把这个 0 删除,还原原始数据。
PPP 的工作状态:从拨号到挂断的完整流程
对于PPP协议,大家就把它想象为你在打电话的时候,要做的事情
这部分大家了解一下就好,不用深入

各阶段详解
1. 链路静止
通信线路未被激活。当用户拨号上网时,调制解调器拨号,检测到物理层载波信号后,进入下一阶段。
2. 链路建立
两端通过 LCP(链路控制协议) 进行协商。LCP 负责:
- 协商最大帧长度(MRU)
- 协商是否使用认证
- 协商使用的链路质量监测方式
- 协商压缩方式等选项
LCP 的协商过程是双向的:双方各自提出自己的配置要求,对方可以接受或拒绝。只有双方就链路参数达成一致,才能进入下一阶段。
3. 用户验证
这个阶段是可选的。如果双方在 LCP 协商中同意进行身份验证,则进入此阶段。PPP 支持两种常用的认证协议: - PAP:明文传输用户名和密码,安全性差
- CHAP :使用挑战-应答机制,只传哈希值,不传明文密码
4. 网络层配置
通过 NCP(网络控制协议) 为不同的网络层协议分配网络层地址。最常见的是 IPCP(IP 控制协议),用于协商 IP 地址: - 用户端向 ISP 请求分配一个 IP 地址
- ISP 可以分配一个动态 IP 地址,或者确认用户请求的静态 IP 地址
5. 链路打开
一切就绪,PPP 帧开始承载网络层数据报正常通信。这个阶段可以持续任意长时间。
6. 链路终止
通信结束后,LCP 发送终止请求,链路回到静止状态。这可以由用户主动挂断触发,也可以由物理线路故障触发。
到这里PPP协议就结束了,祝你有开心的一天