点对点协议PPP

PPP协议简介

点对点协议PPP(Point-to-Point Protocol) 是目前使用最广泛的点对点数据链路层协议

image-20230318210758903

一般的因特网用户通常都是要通过连接到某个因特网服务提供者ISP,例如中国电信、中国联通、中国移动这三大运营商才能接入因特网。这些 ISP 已经从因特网管理机构申请到了一批IP地址,用户计算机只有获取到ISP 所分配的合法IP地址后,才能成为因特网上的主机用户。

用户计算机与 ISP 进行通信时所使用的数据链路层协议通常就是 PPP 协议。这里需要说明的是在 1999 年公布的在以太网上运行的 PPP 协议——PPP over Ethernet 简称为 PPPoE。它使得ISP 可以通过 DSL(电路调制解调器 )、以太网等宽带接入技术,以以太网接口的形式为为用户提供接入服务。

image-20230318211026373

另外,点对点协议 PPP 也广泛应用于广域网路由器之间的专用线路。

PPP协议历史

PPP协议是因特网工程任务组IETF在 1992 年制定的。经过 1993 年和 1994 年的修订,现在的 PPP 协议已成为因特网的正式标准。我们可以在 ITF 官方网站的相关页面搜索并查看 PPP 协议的相关 RFC 文档。

PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法

主要由以下三部分构成

  1. 对各种协议数据报的封装方法:封装成帧(前面课程介绍过)

  2. 链路控制协议LCP:用于建立、配置以及测试数据链路的连接

  3. 一套网络控制协议NCPs:其中的每一个协议支持不同的网络层协议。

image-20230318211602836

从网络体系结构的角度看,PPP 是数据链路层的协议,它将上层交付下来的协议数据单元封装成PPP帧。为了支持不同的网络层协议, PPP 协议包含了一套网络控制协议NCPs,其中的每一个协议支持不同的网络层协议,例如网络层中的 TCP/IP 中的 IP协议,网络操作系统中的IPX协议、苹果公司的Apple Talk 等链路控制协议。

LCP 用于建立配置以及测试数据链路的连接。

PPP协议能够在多种类型的点对点链路上运行,例如面向字节的异步链路,面向比特的同步链路。

PPP 协议的帧格式

接下来我们来看看 PPP 协议的帧格式。帧首部由 4 个字段构成,帧尾部由两个字段构成,各字段的长度以及帧的数据部分的最大长度如图所示。

image-20230318212206579

标志(Flag)字段F:帧首和帧尾部中的标志字段是 PPP 帧的定界符,取值为 16 进制的0x7e。

地址(Address)字段A:帧首部中的地址字段取值为 16 进制的0xFF,预留(目前没有什么作用)

控制(Control)字段C:控制字段取值为 16 进制的0x03,预留(目前没有什么作用)。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出,可见这两个字段实际上并没有携带 PPP 帧的信息。

协议(Protocol)字段P:帧首部中的协议字段指明了帧的数据部分应送交哪个协议处理。当协议字段取值为 16 进制的 0x0021 时, PPP 帧的数据部分就是 IP 数据报,如图所示

image-20230318212342786

当协议字段取值为 16 进制的0xC021 时, PPP帧的数据部分就是链路控制协议LCP的分组,如图所示

image-20230318212251852

当协议字段取值为 16 进制的 8021 时, PPP 帧的数据部分就是网络控制协议 NCP 的分组,如图所示image-20230318212303981

帧尾部中的帧检验序列 FCS 字段:其值是使用循环冗余校验 CRC 计算出的校验位,用于检查 PPP 帧是否存在误码。

PPP协议解决透明传输(即解决帧定界问题)

接下来我们来看看 PPP 协议是如何解决透明传输问题的?

当PPP帧的数据部分出现帧首和帧尾中的标志字段时,如果不采取措施,则会造成接收方对 PPP帧是否结束的误判。因为标志字段是 PPP 帧的定界符,取值为 10 六进制的0x7E,也就是二进制的01111110。

image-20230318212646906

PPP 协议实现透明传输的方法取决于所使用的链路类型。

image-20230318212745332

字节填充法

如果是面向字节的异步链路,则采用字节填充法,也就是插入转义字符。

举例说明字节填充法,也就是以字节0x7E作为 PPP 帧的定界符,以字节为单位来讨论问题。

发送方对 PPP 帧数据部分的处理

image-20230318213413334

  • 将出现的每一个7E字节转变成 2 字节序列7D5E,如图所示,这相当于在7E字节前插入了转义字节7D,并将7E字节减去 16 进制的0x20。
  • 将出现的每一个 7D 字节转变成 2 字节序列7D5D,如图所示
  • 在出现的每一个ASCII控制字符(数值小于0x20的字符),则在该字符前前插入一个 7D 字节,同时将该字符的编码加上 16 进制的0x20。

对于 PPP 帧的接收方,只要进行反变换,即可恢复出原来的 PPP帧的数据部分,

比特填充法

如果是面向比特的同步链路,则采用比特填充法,也就是插入比特0。

举例说明比特填充法,也就是以 01111110 作为 PPP 帧的定界符,以比特为单位来讨论问题。

发送方对 PPP 帧数据部分的处理

假设 PPP 帧的数据部分如图所示,其中包含了两个帧定界符,来看发送方对 PPP 帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现,只要发现 5 个连续的比特1,则立即填充一个比特0,如图所示。

image-20230318213540207

接收方对 PPP 帧数据部分的处理

再来看接收方对 PPP 帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现。只要发现 5 个连续的比特1,就把其后的一个比特 0 删除,如图所示。

image-20230318213615885

PPP协议的差错检测

PPP 帧的尾部包含有一个 2 字节的帧检验序列 FCS 字段,使用循环冗余校验 CRC 来计算该字段的取值,采用的生成多项式,如下所示。

image-20230318213719045

RFC 1662 文档的附录部分给出了 FCS 的计算方法的C语言实现,为了减少对 CPU 的占用,采用查表法来实现 FCS 的计算范围,如图所示

image-20230318213850991

接收方每收到一个 PPP 帧就进行 CRC 检验,若 CRC 检验正确,就收下这个帧,反之就丢弃这个帧。使用 PPP 的数据链路层向上不提供可靠传输服务。

PPP协议的工作状态

image-20230318214128489

最后我们以拨号接入为例,简单介绍一下 PPP 协议的工作状态。 PPP链路的开始和结束状态都是静止状态,这时并不存在物理层的连接。

  • 当检测到调制解调器的载波信号并建立物理层连接后, PPP 就进入链路的建立状态。
  • 这时链路控制协议 LCP 开始协商一些配置选项,所协商的配置选项包括最大帧长、鉴别协议等。可以不使用鉴别,也可以使用口令鉴别协议 PAP 或挑战握手鉴别协议CHAP。
    • 若协商成功则进入鉴别状态
      • 若通信双方无需鉴别或鉴别身份成功,则进入网络状态。
        • 进入网络状态后进行 NCP 配置,配置完成后就进入打开状态。PPP链路的两端通过相互交换网络层特定的 NCP 分组来进行NCP配置。如果在 PPP 链路上运行的是 IP 协议,则使用 IP 控制协议 IPCP 来对 PPP 链路的每一端配置 IP 模块,例如分配 ip 地址,只要链路处于打开状态,就可以进行数据通信。当出现故障或链路的一端发出终止请求时,就进入终止状态,当载波停止后,则回到静止状态。
      • 若鉴别失败,则进入终止状态。
    • 若协商失败,则退回到静止状态

本节小结

image-20230318214202101

站内搜索

没有找到内容!