点对点协议 PPP

互联网用户通常都要连接到某个 ISP 才能接入到互联网。PPP 协议就是用户计算机和 ISP 进行通信时所使用的数据链路层协议。

PPP 协议的组成

PPP 协议有三个组成部分:

  1. 一个将 IP 数据报封装到串行链路的方法。PPP 既支持异步链路(无奇偶检验的 8 比特数据),也支持面向比特的同步链路

    • IP 数据报在 PPP 帧中就是其信息部分。

    • 这个信息部分的长度受最大传送单元 MTU 的限制。

  2. 一个用来建立、配置和测试数据链路连接的链路控制协议 LCP (Link Control Protocol)

  3. 一套网络控制协议 NCP (Network Control Protocol),其中的每一个协议支持不同的网络层协议,如 IP、OSI 的网络层、DECnet,以及 AppleTalk 等。

PPP 协议的帧格式

PPP 帧的首部和尾部分别为四个字段和两个字段:

  • 首部的第一个字段和尾部的第二个字段都是标志字段 F(Flag),规定为 0x7E(符号“0x”表 示它后面的字符是用十六进制表示的。十六进制的 7E 的二进制表示是 01111110)。

    • 标志字段表示一个帧的开始或结束。因此标志字段就是 PPP 帧的定界符。

    • 连续两帧之间只需要用一个标志字段。如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。

  • 首部中的地址字段 A 规定为 0xFF(即 11111111),控制字段 C 规定为 0x03(即 00000011)。这两个字段实际上并没有携带 PPP 帧的信息。

  • PPP 首部的第四个字段是 2 字节的协议字段。当协议字段为 0x0021 时,PPP 帧的信息字段就是 IP 数据报。若为 0xC021,则信息字段是 PPP 链路控制协议 LCP 的数据,而 0x8021 表示这是网络层的控制数据。

  • 尾部中的第一个字段(2 字节)是使用 CRC 的帧检验序列 FCS

字节填充

当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。

当 PPP 使用异步传输时,它把转义符定义为 0x7D(即 01111101),并使用字节填充:

  • 把信息字段中出现的每一个 0x7E 字节转变成为 2 字节序列(0x7D,0x5E)

  • 若信息字段中出现一个 0x7D 的字节(即出现了和转义字符一样的比特组合),则把 0x7D 转变成为 2 字节序列(0x7D,0x5D)

  • 若信息字段中出现 ASCII 码的控制字符(即数值小于 0x20 的字符),则在该字符前面要加入一个0x7D 字节,同时将该字符的编码加以改变。例如,出现 0x03(在控制字符中是“传输结束” ETX)就要把它转变为 2 字节序列(0x7D,0x23)

零比特填充

PPP 协议用在 SONET/SDH 链路时,使用同步传输(一连串的比特连续传送)而不是异步传 输(逐个字符地传送)。在这种情况下,PPP 协议采用零比特填充方法来实现透明传输

零比特填充的具体做法是:

  • 在发送端,先扫描整个信息字段。只要发现有 5 个连续 1,则立即填入一个 0。经过这种零比特填充后的数据,可以保证在信息字段中不会出现 6 个连续 1

  • 接收端在收到一个帧时,先找到标志字段 F 以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现 5 个连续 1 时,就把这 5 个连续 1 后的一个 0 删除,以还原成原来的信息比特流。

Last updated