3.2 点对点协议PPP
目前使用的最广泛的数据链路层协议就是点对点协议PPP(Point-to-Point Protocol)
1 PPP协议的特点
1.PPP协议应满足的需求:
(1)简单:IETF在设计因特网体系结构时把其中最复杂的部分放在TCP协议中,而网际协议IP则相对比较简单,它提供的是不可靠的数据报服务。在这种情况下,数据链路层没有必要提供比IP协议更多的功能。因此,对数据链路层的帧,不需要纠错,不需要序号,也不要流量控制。当然,在误码率较高的无线链路上可能会需要更多的更为复杂的链路层协议。因此IETF把简单作为首要的需求。
简单的设计还可以使协议在实现时不容易出现错误,因而使得不同的厂商对协议的不同的实现的互操作性提高了。我们知道,协议标准化的一个主要目的就是提高协议的互操作性。总之,这种数据链路层的协议非常简单:在接收方每收到一个帧,就进行CRC检验。如CRC检验正确,就收下这个帧,否则就丢弃这个帧。
(2)封装成帧:PPP协议必须规定特殊字符作为帧定界符,即标志一个帧的开始和结束的字符,以便在接收端从收到的比特流中准确的找出帧的开始和结束的位置。
(3)透明性:PPP协议还必须保证数据传输的透明性。这就是说,如果数据中碰巧出现了和帧定界符一样的比特组合时,就要采取有效的措施来解决这个问题。
(4)多种网络层协议:PPP协议必须能够在同一条物理链路上同时支持多种网络层协议,不如IP和IPX等的运行。当点对点链路所连接的是局域网或者路由器时,PPP协议必须支持所在的链路所连接的局域网或路由器上运行的各种网络层协议。
(5)多种类型链路:除了要支持多种网络层的协议外,PPP还必须能够在多种类型的链路上运行。例如,串行的或并行的,同步的或者异步的,低速的或高速的,电的或光的,交换的或非交换的点对点链路。
(6)差错检验:PPP协议必须能够对接收端收到的帧进行检测,并立即丢掉有差错的帧。若在数据链路层不进行差错检测,那么已出现的差错的无用帧就还要在网络中继续传送,因而会白白浪费许多宝贵的网络资源。
(7)检测连接状态:PPP协议必须有一种机制能够及时自动检测出链路是否处于正常的状态。当出现故障的链路隔了一段时间后又重新恢复了正常工作时,就特别需要这种及时检测的功能。
(8)最大传送单元:PPP协议必须对每一种类型的点对点链路设置最大的传送单元MTU的标准默认值。这样做的目的是为了促进各种实现之间的互操作性。如果高层协议发送的分组过长并超过了MTU的数值,PPP协议就要丢弃这样的帧,并且返回错误。需要强调的是,MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。
(9)网络层地址协商:PPP协议必须提供一种机制是通信的两个网络层的实体通过协商知道能够配置彼此的网络层地址。协商的算法应尽可能的简单,并且能够在所有的情况下得出协商的结果。这对拨号连接的链路特别的重要,因为仅仅在链路层建立了连接而并不知道对方网络层地址时,还不能保证网络层能够传递分组。
(10)数据压缩协商:PPP协议必须提供一种方法来协商使用数据压缩的算法。但是PPP协议并不要求将数据压缩算法进行标准化。
2.PPP协议的组成:
PPP协议有三个组成部分:
(1)一个将IP数据报封装到串行链路的方法。PPP协议既支持异步链路(无奇偶的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分,这个信息部分的长度受最大传送单元MTU的限制。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP(Link Control Protocol),通信的双发可以协商一些选项。
(3)一套网络控制协议NCP,其中每一个协议支持不同的网络层协议,如IP,OSI的网络层,DECnet,以及AppleTalk等。
2 PPP协议的帧格式
1.各字段的意义
PPP的帧格式如图3-10所示:
PPP帧的首部和尾部分别有四个字段和两个字段。
首部的第一个字段和尾部的最后一个字段是标志字段F,规定为0x7E(即01111110),标志字段表示一个帧的开始和结束,标志字段就是帧的定界符。连续两帧之间只需要一个标志字段。如果出现两个连续的标志字段,那么就表示这个帧是个空的帧,应当丢弃。首部中的地址字段A规定为0xFF(即11111111),控制字段为0x03(即00000011),这两个字段的意义至今还没有给出其定义,实际上并没有携带PPP帧的信息。
PPP首部的第四个字段是2个字节的协议字段,当协议字段为0x0021时,PPP帧的信息字段就是IP数据报,当为0xC021时,则信息字段是PPP链路控制协议LCP的数据,而0x8021表示这个网络层的控制数据。
信息字段的长度是可变的,但是不超过1500字节。
尾部的第一个字段是二字节,是使用CRC的帧检验序列FCS。
2.字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时,即必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义符定义为0x7D(即01111101),并使用字节填充,RFC1662规定了如下的填充方法:
(1)把信息字段中出现的每一个0x7E字节转变为2字节序列(0x7D,0x5E)。
(2)若信息中出现一个0x7D的字节,则把它转化为0x7D,0x5D
(3)若信息中出现了ASCII码中的控制字符,即数值小于0x20的字符,则在该字符前面要加入一个0x7D字节,同时将该字符的编码加以改变。例如,出现0x03(在控制字符中是传输结束ETX),需要将它转变为2字节序列0x7D,0x23
由于在发送端进行了字节的填充,因此在链路上传送的信息字节数就超过了原来的信息字节数,在接收端收到的数据后再进行与发送端字节填充相反的变换,就可以正确的恢复原来的信息了。
3.零比特填充
PPP协议用在SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)而不是异步传输。在这种情况下,PPP协议采用零比特填充方法来实现透明传输。
零比特填充的具体做法是:在发送端,先扫描整个信息字段,通常使用硬件来实现,但也可应软件来实现,软件实现相对来说较慢些。只要发现有5个连续的1,就立即填充一个0,经过这种零比特填充后,就保证在信息字段中不会出现6个连续的1。接收端在收到一个帧时,先找到标志字段F以确定一帧的边界,接着再用硬件对其中的比特流进行扫描,每当发现五个连续的1时,就把这五个连续的1后面的0删除,以还原原来的信息比特流。这样就保证了透明传输,在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的判断错误。
3 PPP协议的工作状态
当用户PC机拨号接入ISP后,就建立了一条从用户PC机到ISP的物理连接,这时,用户PC机向ISP发送一序列的LCP分组,封装成PPP帧,以便建立LCP连接。这些分组及其响应选择了将要使用的一些PPP参数。接着还要进行网络层配置,NCP给新接入的用户PC机分配了一个临时的IP地址,这样,用户PC机就称为了因特网上的一个有IP地址的主机了。当用户通信完毕后,NCP释放网络层的连接,回收原来分配出去的IP地址,接着,LCP释放数据链路层连接,最后释放的是物理层的连接。
当用户通信完毕时,NCP释放网络层连接,收回原来分配出去的IP地址,接着LCP释放数据链路层连接,最后释放的是物理层的连接。