初步了解点对点协议 PPP

对于点对点的链路,点对点协议 PPP(Point-to-Point Protocol)是目前使用得最广泛的数据链路层协议,通常,互联网用户都要连接到某个 ISP 才能接入到互联网,PPP 协议就是用户计算机和 ISP 进行通信时所使用的数据链路层协议(例如,用户使用拨号电话线接入互联网时,一般都是使用 PPP 协议),下面展示一下 PPP 协议的一些基本概念。
在这里插入图片描述

1 PPP 协议的特点

PPP 协议的 11 个基本特征:

  1. 简单:前人在设计互联网体系结构时把其中最复杂的部分放在运输层的 TCP 协议中,可靠传输由 TCP 协议负责,而网际协议 IP 则相对比较简单,它提供的是不可靠的数据报服务,在这种情况下,数据链路层没有必要提供比 IP 协议更多的功能,数据链路层就应该设计的比网络层更加简单,因此数据链路层的帧,不需要纠错,不需要序号,也不需要进行流量控制。所以,“简单”是首要追求,简单的设计还可使协议在实现时不容易出错,从而使不同厂商在协议的不同实现上的互操作性提高了(协议标准化的一个主要目的就是提高协议的互操作性)。总之,这种数据链路层的协议非常简单:接收方每收到一个帧,就进行 CRC 检验,若 CRC 检验正确,就收下这个帧,反之就丢弃这个帧,其他什么也不做,关于 CRC 检验的相关内容请参照:数据链路层的三个基本问题——封装成帧、透明传输和差错检测

  2. 封装成帧:PPP 协议规定特殊的字符作为帧定界符(即标志一个帧的开始和结束的字符),便于使接收端从收到的比特流中能准确地找出帧的开始和结束位置。

  3. 透明性:PPP 协议要保证数据传输的透明性,也就是说,如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。

  4. 支持多种网络层协议:PPP 协议必须能够在在同一条物理链路上同时支持多种网络层协议(如 IP 和 IPX 等)的运行,当点对点链路所连接的是局域网或路由器时,PPP 协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。

  5. 支持多种类型链路:除了要支持多种网络层的协议外,PPP 还必须能够在多种类型的链路上运行,例如,串行的(一次只发送一个比特)或并行的(一次并行地发送多个比特),同步的或异步的,低速的或高速的,电的或光的,交换的(动态的)或非交换的(静态的)点对点链路。

    这里特别要提到的是在 1999 年公布的在以太网上运行的 PPP,即 PPP over Ethernet,简称为PPPoE,这是 PPP 协议能够适应多种类型链路的一个典型例子,PPPoE 是为宽带上网的主机使用的数据链路层协议,这个协议把PPP帧再封装在以太网帧中(当然还要增加一些能够识别各用户的功能)。宽带上网时由于数据传输速率较高,因此可以让多个连接在以太网上的用户共享一条到 ISP 的宽带链路。现在,即使是只有一个用户利用ADSL进行宽带上网(并不和其他人共享到 ISP 的宽带链路),也是使用 PPPoE 协议。

  6. 差错检测(error detection):PPP 协议要能够对接收端收到的帧进行检测,并立即丢弃有差错的帧,若在数据链路层不进行差错检测,那么已出现差错的无用帧就会在网络中继续向前转发,就会导致白白浪费许多的网络资源。

  7. 检测连接状态:PPP 协议要具有一种机制能够及时(不超过几分钟)自动检测出链路是否处于正常工作状态,当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。

  8. 最大传送单元:又称最大接收单元 MRU(Maximum Receive Unit),PPP 协议要对每一种类型的点对点链路设置最大传送单元 MTU 的标准默认值(MTU 的默认值是 1500 字节),这样做是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过 MTU 的数值,PPP 就要丢弃这样的帧,并返回差错。需要注意的是,MTU 是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度

  9. 网络层地址协商:PPP 协议要提供一种机制使通信的两个网络层(例如两个 IP 层)的实体能够通过协商知道或能够配置彼此的网络层地址,协商的算法应尽可能简单并且能够在所有的情况下得出协商结果,这对拨号连接的链路特别重要,因为如果仅仅在链路层建立了连接而不知道对方网络层地址,则还不能够保证网络层可以传送分组。

  10. 数据压缩协商:PPP 协议要提供一种方法来协商使用数据压缩算法,但并不要求将数据压缩算法进行标准化

  11. 不支持多点线路:PPP 协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),而只支持点对点的链路通信,且只支持全双工链路

PPP 协议的组成三要素:

  • 封装方法: PPP 协议要包含一个将 IP 数据报封装成串行链路的方法,且既要支持异步链路(无奇偶检验的 8 比特数据),也要支持面向比特的同步链路。IP 数据报在 PPP 帧中就是其信息部分,这个信息部分的长度受最大传送单元 MTU 的限制。

  • 链路控制协议(LCP,Link Control Protocol):用来定义建立、配置和测试数据链路连接的协议。

  • 网络控制协议(NCP,Network Control Protocol):PPP 包含了一套 NCP,其中每个 NCP 协议支持不同的网络层协议,例如 IP、OSI 的网络层、 DECnet、 AppleTalk 等,且实现向上兼容。

2 PPP 协议的帧格式

在这里插入图片描述
上图为 PPP 帧的格式,下面对它进行解释:

  • F 字段:标志字段,1 个字节,规定为 0x7E(十六进制下的 7E),二进制表示为 01111110,表示 PPP 数据帧的开始和结束,因此标志字段就是 PPP 帧的定界符。需注意的是,连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,就表示这是一个空帧, 应当丢弃

  • A 字段:1 个字节,规定为 0xFF(即11111111),没有任何意义,预留使用。

  • C 字段:1 个字节,规定为 0x03(即00000011),没有任何意义,预留使用。

  • 协议字段:2 个字节,当协议字段为 0x0021 时,信息字段为 IP 数据报;当协议字段为 0xC021 时,信息字段为 PPP 链路控制协议 LCP 的数据;当协议字段为 0x8021 时,信息字段为网络层的控制数据。

  • 信息字段:长度可变,但不超过 1500 字节。

  • FCS 字段:2 个字节,使用 CRC 的帧检验序列。

不可避免地,信息字段中有可能出现和标志字段一样的比特(0x7E)组合,这时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中,通常有以下两种方法:

  • 异步传输(字节填充):把转义符定义为 0x7D(即01111101),并使用字节填充,填充方法如下所述:

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

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

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

    由于在发送端进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,但接收端在收到数据后再进行与发送端字节填充相反的变换,就可以正确地恢复出原来的信息

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

    零比特填充的具体做法是:
    在这里插入图片描述

    1. 在发送端,先扫描整个信息字段(通常用硬件实现,但也可用软件实现,只是会慢些),只要发现有 5 个连续 1,则立即填入一个 0,因此经过这种零比特填充后的数据,就可以保证在信息字段中不会出现 6 个连续 1;

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

    以上这样的零比特填充就保证了透明传输,在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

3 PPP 协议的工作状态

当用户拨号接入 ISP 后,就建立了一条从用户个人电脑到 ISP 的物理连接,这时,用户个人电脑向 ISP 发送一系列的链路控制协议 LCP 分组(封装成多个 PPP 帧)以便建立 LCP 连接,这些分组及其响应选择了将要使用的一些 PPP 参数。接着还要进行网络层配置,网络控制协议 NCP 给新接入的用户个人电脑分配一个临时的 IP 地址,这样,用户个人电脑就成为互联网上的一个有 IP 地址的主机了。当用户通信完毕时,NCP 释放网络层连接,收回原来分配出去的 IP 地址,然后 LCP 释放数据链路层连接,最后,物理层的连接被释放。
在这里插入图片描述
上图是 PPP 协议工作的状态图,下面对它进行解读:

  1. 当用户个人电脑通过调制解调器呼叫路由器时(通常是在屏幕上用鼠标点击一个连接按钮),路由器就能够检测到调制解调器发出的载波信号

  2. 在双方建立了物理层连接后,PPP 就进入链路建立(Link Establish)状态,其目的是建立链路层的 LCP 连接,这时 LCP 开始协商一些配置选项,即发送 LCP 的配置请求帧(Configure-Request),这是个 PPP 帧,其协议字段置为 LCP 对应的代码,而信息字段包含特定的配置请求。LCP 配置选项包括链路上的最大帧长所使用的鉴别协议(authentication protocol)的规约(如果有的话),以及不使用 PPP 帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在 PPP 帧的首部中省略这两个字节)。

  3. 链路的另一端接收配置请求帧后,会发送以下几种响应中的一种:

    1. 配置确认帧(Configure-Ack):所有选项都接受;

    2. 配置否认帧(Configure-Nak):所有选项都理解但不能接受;

    3. 配置拒绝帧(Configure- Reject):选项有的无法识别或不能接受,需要协商。

  4. 协商结束后双方就建立了 LCP 链路,接着就进入鉴别(Authenticate)状态,在这一状态,只允许传送 LCP 协议的分组、鉴别协议的分组以及监测链路质量的分组,通常有以下两种鉴别方式:

    1. 使用口令鉴别协议 PAP(Password Authentication Protocol),这需要发起通信的一方发送身份标识符和口令,系统可允许用户重试若干次

    2. 使用口令握手鉴别协议 CHAP(Challenge-Handshake Authentication Protocol), 这相对来说更加复杂,但也保证了更好的安全性,若鉴别身份失败,则转到链路终止(Link Terminate)状态,若鉴别成功,则进入网络层协议(Network-Layer Protocol)状态。

  5. 在网络层协议状态,PPP 链路的两端的网络控制协议 NCP 根据网络层的不同协议互相交换网络层特定的网络控制分组,这个步骤是很重要的,因为现在的路由器都能够同时支持多种网络层协议。因此,PPP 协议两端的网络层可以运行不同的网络层协议,但仍然可使用同一个 PPP 协议进行通信。如果在 PPP 链路上运行的是 IP 协议,则对 PPP 链路的每一端进行配置 IP 协议模块(如分配 IP 地址)时就要使用 NCP 中支持 IP 的协议—— IP 控制协议 IPCP(IP Control Protocol),IPCP 分组也封装成 PPP 帧(其中的协议字段为 0x8021)在 PPP 链路上传送。在低速链路上运行时,双方还可以协商使用压缩的 TCP 和 IP 首部,以减少在链路上发送的比特数。

  6. 当网络层配置完毕后,链路就进入可进行数据通信的链路打开(Link Open)状态,链路的两个 PPP 端点可以彼此向对方发送分组,两个 PPP 端点还可发送回送请求 LCP 分组(Echo-Request)和回送回答 LCP 分组(Echo-Reply),以检查链路的状态。

  7. 数据传输结束后,可以由链路的一端发出终止请求 LCP 分组(Terminate-Request)请求终止链路连接,在收到对方发来的终止确认 LCP 分组(Terminate- Ack)后,转到链路终止状态。如果链路出现故障,也会从链路打开状态转到链路终止状态。当调制解调器的载波停止后,则回到链路静止(Link Dead)状态。

需注意的是,PPP 链路的起始和终止状态永远是链路静止状态,这时在用户个人电脑和 ISP 的路由器之间并不存在物理层的连接

以上的过程可简述为,从设备之间无链路开始,到先建立物理链路,再建立链路控制协议 LCP 链路,经过鉴别后建立网络控制协议 NCP 链路,然后才能交换数据,由此可见,PPP 协议已不是纯粹的数据链路层的协议,它还包含了物理层和网络层的内容

参考资料:《计算机网络》第七版(谢希仁著)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章