网络链路层之(2)PPP协议
Author: Once Day Date: 2024年3月27日
一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦…
漫漫长路,有人对你微笑过嘛…
全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSDN博客。
参考文章:
- 《TCP/IP详解卷一》
文章目录
- 网络链路层之(2)PPP协议
- 1. 概述
- 1.1 参考RFC文档
- 1.2 详细说明
- 2. 协议格式
- 2.1 帧格式
- 2.2 LCP操作过程
- 2.3 PPP协议工作状态
1. 概述
ppp是一个协议集合,包含三部分:
-
将IP数据报封装到串行链路的方法。
-
一系列的链路控制协议(Link Control Protocol,LCP),用来建立、配置和测试数据链路连接。
-
以及NCP(网络控制协议),每一个协议支持不同的网络层协议,如IP、OSI的网络层,DECnet,以及AppleTalk等。
PPP对物理层链路有最低要求,即必须支持双向操作,以及异步或同步操作。
ppp基本帧格式借用了HDLC的格式。
1999年公布的PPP over Ethernet(PPPoe),工作在以太网中,可以把PPP帧在封装在以太网帧中。
1.1 参考RFC文档
PPP协议的相关RFC文档包括但不限于以下几个:
- RFC 1661 - The Point-to-Point Protocol (PPP):
这是PPP协议的主要标准文档,描述了PPP的基本框架,包括封装格式、链路控制协议(LCP)以及协议的工作流程。它是理解PPP如何在两个点之间传输数据包的基础。 - RFC 1662 - PPP in HDLC-like Framing:
该文档描述了PPP如何在类似HDLC(高级数据链路控制)的帧中进行封装。它详细说明了帧的结构、透明传输和控制字符的使用方法。 - RFC 1332 - The PPP Internet Protocol Control Protocol (IPCP):
这份文档定义了IPCP,即PPP的网络控制协议之一,用于在PPP连接上配置和测试IP参数,例如IP地址。 - RFC 1994 - PPP Challenge Handshake Authentication Protocol (CHAP):
CHAP为PPP提供了一种认证机制,这份RFC文档详细阐述了CHAP的工作原理和实施方式。 - RFC 1570 - PPP LCP Extensions:
此RFC提供了LCP的一些扩展,包括对多链路聚合、回环检测和快速连接选项的支持。 - RFC 2516 - A Method for Transmitting PPP Over Ethernet (PPPoE):
这份文档描述了PPPoE协议,它允许将PPP帧封装在以太网帧中,常用于DSL(数字用户线)互联网连接。
1.2 详细说明
PPP(Point-to-Point Protocol)是一种数据链路层通信协议,旨在建立直接连接两个网络节点的标准方法。PPP的设计初衷是为了在串行连接上封装网络层协议,这使得它在早期的拨号和ISDN互联网接入服务中得到了广泛应用。尽管如今宽带接入技术(如DSL和光纤)已经取代了传统的拨号服务,PPP仍然在某些宽带和VPN场景中扮演着重要角色。
PPP提供了几个重要的功能:
- 封装多种网络层协议:PPP能够封装IP、IPX等多种网络层协议,使其能够通过串行链路传输。
- 链路控制协议(LCP):LCP用于建立、配置和测试数据链路连接。它提供了协商链路选项的功能,包括认证协议的选择、链路品质监控等。
- 认证:PPP支持多种认证机制,包括PAP(Password Authentication Protocol)和CHAP(Challenge-Handshake Authentication Protocol),增强了连接的安全性。
- 多协议支持:PPP定义了一种扩展的网络控制协议(NCP)框架,允许对各种网络层协议进行特定的选项协商。
一次典型的PPP会话开始于两个节点之间的物理或虚拟连接,接着使用LCP来建立和配置数据链路。一旦LCP达成一致,认证阶段开始,节点可能需要通过PAP或CHAP等方式验证彼此的身份。随后,NCP会协商网络层协议的参数,比如分配IP地址。最后,数据开始通过已配置好的链路传输。
PPP的设计使其适用于多种场景,包括但不限于:
- 拨号网络:在拨号互联网接入时代,PPP是建立连接的标准手段。
- VPN连接:在某些类型的VPN实现中,PPP提供了在互联网上建立安全连接的机制。
- 宽带接入:如PPPoE(PPP over Ethernet),在DSL互联网接入中经常使用。
由于PPP的通用性和较高的安全性,它成为当时点对点通信的事实标准。即便在现代网络中,PPP的某些概念和机制仍然被应用于新的协议和网络架构中,显示出其设计的持久影响力。
当然,随着技术的发展,PPP在某些场合已被更高效、更安全的协议所替代,但在理解网络协议和网络历史的背景下,学习PPP依然具有重要意义。
2. 协议格式
2.1 帧格式
-
标志字段用于帧定界,即收尾两个0x7E字符。
-
地址和控制字段来自于HDLC协议,但在PPP中由于只有一个目的地和无需提供可靠服务。因此是固定的0xFF和0x03。该字段可通过地址和控制字段压缩(ACFC)的选项来省略他们。
-
协议字段表示后面的数据类型,因为数据可能来自于网络控制协议NCP或者链路控制协议LCP以及网络层协议IP等。0x0021是IP数据报,0xC021是LCP的数据。协议字段压缩PFC可以减少长度到1字节。
-
总信息长度MRU一般不超过1500。
-
FCS检验序列一般采用CRC-CCITT多项式:
C R C − C C I T T = X 16 + X 12 + X 5 + 1 CRC-CCITT=X^{16}+X^{12}+X^5+1 CRC−CCITT=X16+X12+X5+1
默认为16位FCS,但可以通过LCP选项启用32位FCS。
异步传输采用字节填充:
-
转义字符定义为0x7D(01111101)
-
把数据段中出现的每一个0x7E字节转变成(0x7D,0x5E)序列
-
把数据段中出现的每一个0x7D字节转变成(0x7D,0x5D)序列
-
数据段中小于0x20的字符c,则改变成(0x7D,0x20+c)序列
同步传输时使用位填充(零比特填充):
-
即SONET/SDH链路,一连串的比特连续传输。
-
扫描整个字段,只要有5个连续的1,立即填入一个0。即不会出现连续六个1的序列,0x7E(01111110)。
2.2 LCP操作过程
PPP协议的LCP分组:
代码字段给出了请求或响应的操作类型:
-
配置消息(开始基本配置,建立商定的选项)
-
终止消息(清除一条链路)
-
回送请求/应答消息(验证对方的操作)
-
放弃请求消息(用于性能测试,丢弃没有响应的分组)
-
标识和剩余时间消息(用于管理目的)
标识字段是有LCP请求帧的发送方提供的序列号,并随每个后续消息进行递增。
长度字段给出LCP分组的字节长度,这不是PPP协议的一部分。
2.3 PPP协议工作状态
-
在鉴别阶段可进行用户身份认证。
-
NCP将根据网络层不同的协议进行配置,如IP协议将使用IP控制协议IPCP(IP Control Protocal)。
Once Day
也信美人终作土,不堪幽梦太匆匆......
如果这篇文章为您带来了帮助或启发,不妨点个赞👍和关注,再加上一个小小的收藏⭐!
(。◕‿◕。)感谢您的阅读与支持~~~