3.2 点对点协议PPP
在通信线路质量较差的年代,实现可靠传输的高级数据链路控制HDLC(High-level Data Link Control)就成为当时比较流行的数据链路层协议。但现在HDLC已很少使用了。对于点对点的链路,简单得多的点对点协议PPP(Point-to-Point Protocol)则是目前使用得最广泛的数据链路层协议。
3.2.1 PPP协议的主要特点
我们知道,因特网用户通常都要连接到某个ISP才能接入到因特网。PPP协议就是用户计算机和ISP进行通信时所使用的数据链路层协议(见图3-4)。
图3-4 用户到ISP的链路使用PPP协议
现在的PPP协议在1994年就已成为因特网的正式标准。PPP协议最主要的特点就是简单。它只检测差错(检测到有比特差错的帧就丢弃),而不纠正差错。它不使用序号,也不进行流量控制。PPP可同时支持多种网络层协议。
这里特别要提到的是在1999年公布的在以太网上运行的PPP,即PPP over Ethernet,简称为PPPoE,这是PPP协议能够适应多种类型链路的一个典型例子。PPPoE是为宽带上网的主机使用的链路层协议。这个协议把PPP帧再封装在以太网帧中(当然还要增加一些能够识别各用户的功能)。宽带上网时由于数据传输速率较高,因此可以让多个连接在以太网上的用户共享一条到ISP的宽带链路。现在即使是只有一个用户利用ADSL进行宽带上网(并不和其他人共享到ISP的宽带链路),也是使用PPPoE协议。
PPP协议有三个组成部分:
(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol)。通信的双方可协商一些选项。
(3)一套网络控制协议NCP(Network Control Protocol),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及AppleTalk等。
3.2.2 PPP协议的帧格式
1.各字段的意义
PPP的帧格式如图3-5所示。PPP帧的首部和尾部分别为四个字段和两个字段。
图3-5 PPP的帧格式
首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为01111110。标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。连续两帧之间只需要用一个标志字段。如果出现连续两个标志字段,就表示这是一个空帧,应当丢弃。
首部中的地址字段A规定为11111111,控制字段C规定为00000011。最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出。可见这两个字段实际上并没有携带PPP帧的信息。
PPP首部的第四个字段是2字节的协议字段。当协议字段为0000000000100001时,PPP帧的信息字段就是IP数据报。若为1100000000100001, 则信息字段是PPP链路控制协议LCP的数据,而1000000000100001表示这是网络层的控制数据。
信息字段的长度是可变的,但不超过1500个字节。
尾部中的第一个字段(2字节)是使用CRC的帧检验序列。
2.字节填充
当信息字段中出现和标志字段一样的比特(01111110)组合时,为了保证透明传输,必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义符定义为01111101,并使用字节填充,即
(1)把信息字段中出现的每一个01111110字节的前面插入01111101。
(2)若信息字段中出现一个01111101字节(即出现了和转义字符一样的比特组合), 则把01111101的后面插入01011101。
(3)若信息字段中出现ASCII码的控制字符(即数值小于00100000的ASCII字符),则在该字符前面要插入01111101,同时将该控制字符的编码加以改变(具体的改变规则都有详细的规定)。
由于在发送方进行了字节填充,因此在链路上传送的信息字节数就超过了原来的信息字节数。但接收方在收到数据后再进行与发送方字节填充相反的变换,就可以正确地恢复出原来的信息。
3.零比特填充
PPP协议用在SONET/SDH链路时,使用了同步传输(一连串的比特连续传送)而不是异步传输(逐个字符地传送)。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
零比特填充的具体做法是:在发送方,先扫描整个信息字段(通常是用硬件实现,但也可用软件实现,只是会慢些)。只要发现有5个连续的1,则立即填入一个0。因此经过这种零比特填充后的数据,就可以保证在信息字段中不会出现6个连续的1。接收方在收到一个帧时,先找到标志字段F以确定一个帧的边界,接着再用硬件对其中的比特流进行扫描。每当发现5个连续的1时,就把这5个连续1后的1个0删除,以还原成原来的信息比特流(见图3-6)。这样就保证了透明传输:在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的判断错误。
图3-6 零比特的填充与删除
3.2.3 PPP协议的工作状态
上一节我们通过PPP帧的格式讨论了PPP帧是怎样组成的。但PPP链路一开始是怎样被初始化的?PPP链路的起始状态是静止状态。当用户拨号接入ISP后,就建立了一条从用户PC到ISP的物理连接。这时,用户PC向ISP发送一系列的LCP分组(包括键入用户的密码以验证用户的身份),以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC分配一个临时的IP地址。这样,用户PC就成为因特网上的一个有IP地址的主机了。从这里可以看出,PPP协议并不单纯是数据链路层的协议,因为还涉及到物理层和网络层(IP地址)的问题。这里只是为了方便,就把PPP协议放在数据链路层这一章中介绍。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址。接着,LCP释放数据链路层连接。最后释放的是物理层的连接,链路重新回到静止状态。