链路层:PPP 协议
禁止码迷,布布扣,豌豆代理,码农教程,爱码网等第三方爬虫网站爬取!
点对点协议#
对于点对点的链路,目前使用得最广泛的数据链路层协议是点对点协议 PPP (Point-to-Point Protocol)。用户使用拨号电话线接入互联网时,用户计算机和 ISP 进行通信时所使用的数据链路层协议就是 PPP 协议。
PPP 协议应满足以下需求:
1 封装成帧:规定特殊的字符作为帧定界符。
2 透明性:保证数据传输的透明性。
3 多种网络层协议:在同一条物理链路上同时支持多种网络层协议。
4 多种类型链路:在多种类型的链路上运行。
5 差错检测:对接收端收到的帧进行检测,并立即丢弃有差错的帧。
6 检测连接状态:及时自动检测出链路是否处于正常工作状态。
7 最大传送单元:对于每种类型的点对点链路,设置最大传送单元 MTU 的标准默认值。
8 网络层地址协商:提供一种机制使通信的两个网络层实体能够通过协商知道或能够配置彼此的网络层地址。
9 数据压缩协商:提供一种方法来协商使用数据压缩算法。
由于 TCP 协议可以实现可靠数据传输,因此 PPP 协议不需要实现纠错、流量控制、设置序号的功能。PPP 不支持多点线路,只需要支持点对点通信,PPP 只支持全双工链路。
PPP 协议的帧格式#
PPP 帧字段#
PPP 帧的首部和尾部分别为 4 个字段和 2 个字段,PPP 是面向字节的,所有的 PPP 帧的长度都是整数字节。
尾部的第一个字段是 CRC 的帧检测序列 FCS,占 2 位。首部第一个字段和尾部第二个字段都是标志字段 F = 0x7E(符号“0x”表示后面的字符是用十六进制表示),用于标志一个帧的开始或结束。标志字段起界定符的作用,若出现连续 2 个标志字段表示这是个空帧。地址字段 A 只置为 0xFF,控制字段 C 通常置为 0x03,这 2 个字段实际上并不起作用。
PPP 有一个 2 个字节的协议字段:
协议字段 | 说明 |
---|---|
0x0021 | 信息字段就是 IP 数据报 |
0x8021 | 信息字段是网络控制数据 |
0xC021 | 信息字段是 PPP 链路控制数据 |
0xC023 | 信息字段是鉴别数据 |
当信息字段中出现和标志字段一样的值(0x7E)时,就必须采用一些措施是这类值不出现在信息字段中。
字节填充#
当 PPP 用在异步传输(逐个比特传输)时,就使用一种特殊的字符填充法:
- 将信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列 (0x7D, 0x5E)。
- 若信息字段中出现一个 0x7D 的字节, 则将其转变成为 2 字节序列 (0x7D, 0x5D)。
- 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个 0x7D 字节,同时将该字符的编码加以改变。
接收端收到数据后进行与发送端字节填充的逆过程,之后就可以恢复原来的信息。
零比特填充#
当 PPP 用在同步传输(一连串的比特连续传送)链路时,例如SONET/SDH 链路,PPP 协议采用零比特填充方法来实现透明传输。在发送端,只要发现有 5 个连续 1,则立即填入一个 0。接收端对帧中的比特流进行扫描。每当发现 5 个连续1时,就把这 5 个连续 1 后的一个 0 删除。
PPP 的工作状态#
PPP 的组成#
PPP 协议有三个组成部分:
- 一个将 IP 数据报封装到串行链路的方法;
- 链路控制协议 LCP (Link Control Protocol),用来建立、配置和测试链路层连接;
- 网络控制协议 NCP (Network Control Protocol),NCP 是一套支持不同网络层协议的协议。
工作流程#
当用户拨号接入 ISP 时,路由器的调制解调器对拨号做出确认,并建立一条物理连接。PC 机向路由器发送一系列的 LCP 分组(封装成多个 PPP 帧),这些分组及其响应选择一些 PPP 参数,并进行网络层配置。NCP 给新接入的 PC 机分配一个临时的 IP 地址,使 PC 机成为因特网上的一个主机。通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址。接着,LCP 释放数据链路层连接。最后释放的是物理层的连接。
可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容。
参考资料#
《计算机网络(第七版)》 谢希仁 著,电子工业出版社
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)