(二)数据链路层--点对点协议PPP

点对点协议PPP

继续上文的内容,本文介绍点对点协议PPP。

PPP协议的特点

互联网用户通常需要连接到某个ISP才能接入到互联网,PPP协议就是用户计算机和ISP进行通信时,所使用的数据链路层协议,它应满足如下需求:

  • 简单
    IETF在设计互联网体系结构时,把其中最复杂的部分放在TCP协议中,网际协议IP相对简单,它提供的是不可靠的数据报服务,这样,数据链路层没有必要提供比IP协议更多的功能,对于数据链路层的帧,不需要纠错,不需要序号,不需要流量控制,接收方每收到一个帧,就进行CRC检验,如果检验正确,就收下这个帧,否则丢弃这个帧。
  • 封装成帧
    PPP协议必须规定帧定界符,以便接收端从收到的比特流中能准确的找出帧的开始和结束位置。
  • 透明性
    PPP协议必须保证数据传输的透明性,就是说,如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。
  • 多种网络层协议
    PPP协议必须能够在同一条物理链路上同时支持多种网络层协议(如IP或IPX)的运行。当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。
  • 多种类型链路
    除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如:串行的(一次发送一个比特)、并行的(一次并行发送多个比特)、同步的、异步的、低速的、高速的、电的、光的、交换的(动态的)、非交换的(静态的)。
    1999年公布的在以外网上运行的PPP,即PPP over Ethernet,简称PPPoE,这是PPP协议能够适应多种类型链路上的一个典型例子。PPPoE是为宽带上网的主机使用的链路层协议。这个协议把PPP帧再封装到一个以太网帧中(当然增加了一些能够识别各用户的功能)。宽带上网时由于数据传输速率高,因此可以让多个连接在以太网上的用户共享一条到ISP的宽带链路,即使是只有一个用户利用ADSL进行宽带上网(不和其他人共享到ISP的宽带链路),也是使用PPPoE协议。
  • 差错检测
    PPP协议必须能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。若在数据链路层不进行差错检测,那么已出现差错的无用帧就还要在网络中继续向前转发,会白白浪费许多的网络资源。
  • 检测连接状态
    PPP协议必须具有一种机制能够及时自动检测出链路是否处于正常工作状态。当出现故障的链路隔了一段时间后又重新恢复正常工作时,就特别需要有这种及时检测功能。
  • 最大转送单元
    PPP协议必须对每一种类型的点对点链路设置最大传送单元(MTU)的标准默认值,如果高层协议发送的分组数据部分超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。
  • 网络层地址协商
    PPP协议必须提供一种机制使通信的两个网络层的实体能够通过协商知道或能够配置彼此的网络层地址,这对拨号连接的链路特别重要,因为如果仅仅在链路层建立了连接而不知道对方网络层地址,则还不能保证网络层可以传送分组。
  • 数据压缩协商
    PPP协议必须提供一种方法来协商使用数据压缩算法,但并不要求将数据压缩算法进行标准化。

在TCP/IP协议族中,可靠传输由运输层的TCP协议负责,因此数据链路层的PPP协议不需要纠错,不需要设置序号,不需要进行流量控制。PPP协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),只支持点对点的链路通信。此外,PPP协议只支持全双工链路。

PPP协议的组成

PPP协议有三个组成部分:

  • 一个将IP数据报封装到串行链路的方法
    PPP既支持异步链路(无奇偶校验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其数据部分,它的长度收到MTU的限制。
  • 一个用来建立、配置、和测试数据链路连接的链路控制协议LCP
    LCP,即 Link Control Protocol。通信的双方可协商一些选项。
  • 一套网络控制协议NCP
    NCP,即Network Control Protocol。其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet、AppleTalk等。

PPP协议的帧格式

1、各字段的意义
如下图所示:

首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E(二进制为01111110),标志字段表示一个帧的开始或结束,因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段,如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
首部中的地址字段A规定为0xFF(二进制为11111111),控制字段规定为0x03(二进制为00000011)。最初曾考虑以后对这两个字段的值进行其它定义,但至今也没有给出,可见这个字段实际上并没有携带PPP帧的信息。
PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据报;若为0xC021,信息字段是PPP链路控制协议LCP的数据;若为0x8021,表示这是网络层的控制数据。
信息字段的长度是可变的,不超过1500字节。
尾部中的第一个字段(2字节)使用CRC的帧检验序列FCS。

2、字节填充
因为PPP帧的帧定界符是0x7E,所以当信息字段中出现一样的比特组合时,就必须采取一些措施,使得和帧定界符一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义符定义为0x7D(01111101),并使用字节填充。RFC 1662规定了如下填充方法:

  • 把信息字段处出现的每一个0x7E(帧定界符)转变为2字节序列(0x7D,0x5E)
  • 若信息字段中出现一个0x7D的字节,即出现了和转义字符一样的比特组合,则把0x7D转变为2字节序列(0x7D,0x5D)
  • 若信息字段中出现ASCII码的控制字符,即数值小于0x20的字符,则在该字符前面加入一个0x7D字节,同时转变该字符,例如:出现了0x03(在控制字符中,是“传输结束”ETX),就要把它转变为2字节序列(0x7D,0x23)

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

  • 在发送端,先扫描整个信息字段(通常用硬件实现,也可用软件实现),只要发现有5个连续1,就立即填入一个0。因此经过这种零比特填充后的数据,就可以保证信息字段中不会连续出现6个1(6个1,可能为01111110,与帧定界符一致)。
  • 在接收端,当收到一个帧时,先找到帧定界符F,以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续的1时,就把这5个连续的1后面的一个0删除,以还原成原来的信息比特流。这样就保证了透明传输,在传送的数据比特流中,可以传送任意组合的比特流,而不会引起对帧边界的错误判断。

PPP协议是如何工作的

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

  • 当用户个人电脑通过调制解调器呼叫路由器时(比如点屏幕上点击宽带连接),路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入“链路建立”状态(Link Establish),其目的是建立链路层的LCP连接。
  • 接下来,LCP开始协商一些配置选项,即发送LCP的配置请求帧,这是一个PPP帧,其协议字段为LCP对应的代码(oxC021),信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应中的一种:
    (1)配置确认帧(Configure-Ack):所有选项都接受
    (2)配置否认帧(Configure-Nak):所有选项都理解但不能接受
    (3)配置拒绝帧(Configure-Reject):有的选项无法识别或不能接受,需要协商
    Lcp配置选项包括:链路上的最大帧长、所使用的鉴别协议的规约(如果有)、不使用PPP帧中的地址和控制字段(因为这两个字段的值是固定的,没有任何信息量,可以在PPP帧的首部忽略这两个字节)。
  • 协商结束后,双方就建立了LCP链路,接着就进入“鉴别”状态(Authenticate)。在这一状态,只允许传送LCP协议的分组、鉴别协议的分组、监测链路质量的分组。若使用口令鉴别协议PAP(Password Authentication Protocol),则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如果需要有更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP(Challenge-Handshake Authentication Protocol)。若鉴别身份失败,则转到“链路终止”状态(Link Terminate),若鉴别成功,则进入“网络层协议”状态(Network-Layer Protocol)。
  • 在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组,现在的路由器都能够同时支持多种网络层协议,PPP协议的两端的网络层可以运行不同的网络层协议,但仍然使用同一个PPP协议。如果PPP链路上运行的是IP协议,则对PPP链路的每一端配置IP协议模块时(如分配IP地址)就要使用NCP中支持的协议--IP控制协议IPCP(IP Control Protocol)。IPCP分组也封账成PPP帧(协议字段为OX8021)在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。
  • 当网络层配置完毕后,链路就进入可进行数据通信的“链路打开”状态(Link Open)。链路的两端可以向彼此发送分组。两端还可发送回送请求LCP分组(Echo-Request)和回送回答LCP分组(Echo-Reply),以检查链路的状态。数据传输结束后,可以由链路的一端发出终止请求LCP分组(Terminate-Request),请求终止链路连接。在收到对方发来的终止确认LCP分组后(Terminate-Ack),转到“链路终止”状态。如果链路出现故障,也会从“链路打开”状态转到“链路终止”状态。当调制解调器的载波停止后,则回到“链路静止”状态。
    上图给出了PPP协议的说明。从设备无链路开始,先建立物理链路,再建立链路控制协议LCP链路。经过鉴别后,再建立网络控制协议NCP链路,然后才能交换数据。由此可见,PPP协议已不是纯粹的数据链路层的协议,它包含了物理层和网络层的内容。
posted @ 2021-06-09 23:34  明说  阅读(1691)  评论(0编辑  收藏  举报