首页 > 技术文章 > 数据链路层-点对点协议PPP

dacuotecuo 2013-12-02 14:55 原文

  在通信质量较差的年代,在数据链路层使用可靠传输协议曾是一个好的办法。因此,能实现可靠传输的高级数据链路控制HDLC(High-Level Data Link Control)就称为当时比较流行的数据链路层协议。但现在DHLC已经很少使用了,对于点对点的链路,相对比较简单的点对点协议PPP(Point-to-Point Protocol)则是目前使用最为广泛的数据链路层协议。

  PPP协议的特点

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

  PPP协议是IEIF在1992年制定的。经过1993年和1994年的修订,现在的PPP协议在1994年就已成为因特网的正式标准。

  1.PPP协议需要满足的要求

  IEIF认为,在设计PPP协议时必须考虑的以下诸多方面的要求:

  简单

  IEIF在设计因特网体系结构时把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,它提供的是不可靠的数据报服务。在这种情况下,数据链路层没有必要提供比IP协议更多的功能。因此,对数据链路层的帧,不需要纠错,不需要序号,也不要流量控制。当然,在误码率较高的无线链路上可能会需要更多的更为复杂的链路层协议。因此IEIF把简单作为首要的需求。

  简单的设计还可以使协议在实现时不容易出现错误,因而使得不同的厂商对协议的不同的实现的互操作性提高了。我们知道,协议标准化的一个主要目的就是提高协议的互操作性。总之,这种数据链路层的协议非常简单:在接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧,否则就丢弃这个帧。

  封装成帧

  PPP协议必须规定特殊字符作为帧定界符,即标志一个帧的开始和结束的字符,以便在接收端从收到的比特流中准确的找出帧的开始和结束的位置。

  透明性

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

  多种网络层协议

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

  多种类型链路

  除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的或并行的,同步的或者异步的,低速的或高速的,电的或光的,交换的或非交换的点对点链路。

  差错检验

  PPP协议必须能够对接收端收到的帧进行检测,并立即丢掉有差错的帧。若在数据链路层不进行差错检测,那么已出现的差错的无用帧就还要在网络中继续传送,因而会白白浪费许多宝贵的网络资源。

  检测连接状态

  PPP协议必须有一种机制能够及时自动检测出链路是否处于正常的状态。当出现故障的链路隔了一段时间后又重新恢复了正常工作时,就特别需要这种及时检测的功能。

  最大传送单元

  PPP协议必须对每一种类型的点对点链路设置最大的传送单元MTU的标准默认值。这样做的目的是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过了MTU的数值,PPP协议就要丢弃这样的帧,并且返回错误。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。

  网络层地址协商

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

  数据压缩协商

  PPP协议必须提供一种方法来协商使用数据压缩的算法。但是PPP协议并不要求将数据压缩算法进行标准化。

  2.PPP协议不需要的功能

  纠错

  在TCP/IP协议族中,可靠传输由运输层的TCP协议负责,而数据链路层的PPP协议只进行检错。这就是说,PPP协议是不可靠传输协议。

  流量控制

  在TCP/IP协议族中,端倒短的流量控制由TCP负责,因而链路级的PPP协议就不需要再重复进行流量控制。

  序号

  PPP协议是不可靠传输,因此不需要使用真的需要。许多曾经很流行的停止等待协议或连续ARQ协议都使用序号。在噪声比较大的环境下,如无线网络,则可以使用有序号的工作方式,这样就可以提供可靠传输服务。

  多点线路

  PPP协议不支持多点线路,即一个主站轮流和链路上的多个从站进行通信,而只支持点对点的链路通信。

  半双工或单工链路

  PPP协议只支持全双工链路。

  3.PPP协议的组成

  PPP协议的组成由三部分组成:

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

  (2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信的双发可以协商一些选项。

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

  4.PPP协议的帧的格式

  字段的意义

  

  PPP帧的格式如图所示,PPP帧的首部和尾部分别有四个字段和两个字段。

  首部的第一个字段和尾部的最后一个字段是标志字段F,规定为0x7E,标志字段表示一个帧的开始和结束,标志字段就是帧的定界符。连续两帧之间只需要一个标志字段。如果出现两个连续的标志字段,那么就表示这个帧是个空的帧,应当丢弃。首部中的地址字段A规定为0xFF,控制字段为0x03,这两个字段的意义至今还没有给出其定义,实际上并没有携带PPP帧的信息。

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

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

  尾部的第一个字段是二字节,是使用CRC的帧检验序列FCS。

  2.字节填充

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

  当PPP使用异步传输时,它把转义符定义为0x7D,并使用字节填充,RFC1662规定的的填充方法:

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

  (2)若信息中出现一个0x7D的字节,则把它转化为0x7D,0x5D

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

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

  零比特填充

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

  零比特填充的具体做法是:在发送端,先扫描整个信息字段,通常使用硬件来实现,但也可应软件来实现,软件实现相对来说较慢些。只要发现有5个连续的1,就立即填充一个0,经过这种零比特填充后,就保证在信息字段中不会出现6个连续的1。接收端在收到一个帧时,先找到标志字段F以确定一帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现五个连续的1时,就把这五个连续的1后面的0删除,以还原原来的信息比特流。这样就保证了透明传输,在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对真边界错误判断。

  5.PPP协议的工作状态

  当用户PC机拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接,这时,用户PC机向ISP发送一序列的LCP分组,封装成PPP帧,以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC机分配了一个临时的IP地址,这样,用户PC机就称为了因特网上的一个有IP地址的主机了。当用户通信完毕后,NCP释放网络层的连接,回收原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放的是物理层的连接。

  当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,接着LCP释放数据链路层连接,最后释放的物理层的连接。

  

  PPP链路的起始和终止状态都是链路静止状态,这种状态下,用户PC机和ISP的路由器之间并不存在物理层的连接。

  当用户的PC机通过调制解调器呼叫路由器时,路由器就能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入了链路建立的状态,其目的是建立链路层的LCP连接。

  这时LCP开始协商一些配置选项,即对发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下的相应:

  1.配置确认帧-所有选项都接收

  2.配置否认帧-所有选项都理解但是不能接收。

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

  LCP配置选项包括链路上的最大帧长,所使用的鉴别协议的规约,以及不适用PPP帧中的地址和控制字段。协商结束后双方就建立了LCP链路,接着进入“鉴别“状态,在这一状态下,只允许传送LCP分组、鉴别协议的分组以及检测链路质量的分组。若使用口令鉴别协议,则需要发起通信的一方发送身份标识符和口令。系统允许用户重试多次。如果需要更好的安全性,则可使用复杂的口令握手鉴别协议,若身份鉴别失败,则转到链路终止状态,若鉴别成功,则进入到网络层协议状态。

  在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。这个步骤很重要,因为现在的路由器都能够同时支持多种的网络层协议。总之,PPP协议的两端可以运行不同的网络层协议,但仍然可以使用同一个PPP协议进行通信。如果在PPP链路上运行的是IP协议,则对PPP链路的每一段配置IP协议模块,IPCP分组也封装成PPP帧在PPP链路上传送。在低速链路上运行时,双方还可以协商使用压缩的TCP和IP首部,以减少在链路上发送的比特数。当网络层配置完毕后,链路就进入可进行数据通信的链路打开状态。链路的两个PPP端点可以彼此向对方发送分组。两个PPP端点还可以发送会送请求LCP分组和回送回答LCP分组,以检查链路的状态。数据传输结束后,可以由链路的一段发送终止请求LCP分组请求终止链路连接,在接收到对方发送来的终止确认LCP分组后,就转到链路终止状态。如果链路出现故障,则也会从链路打开到链路终止状态。当调制解调器的载波结束后,则回到链路静止状态。

  PPP协议已不是纯粹的数据链路层协议,它还包含了物理层和网络层中的内容。

推荐阅读