PPP协议叫做点对点协议,是目前使用的最广泛的数据链路层协议。
1 PPP协议的特点
用户通常需要连接到某个ISP才能接入互联网,PPP协议就是用户计算机和ISP进行通信所使用的数据链路层协议。
1.1 PPP协议应满足的需求
(1)简单:PPP协议,简单是首要的需求,不需要设计的太麻烦;
(2)封装成帧:PPP协议必须使用规定的特殊字符作为帧定界符,以便接收端收到的比特流中能够找出帧的开始和结束位置;
(3)透明性:PPP协议必须保证数据传输的透明性;
(4)多种网络层协议:PPP协议必须能够在同一条物理链路上同时支持多种网络层协议的运行(此时PPP协议承载着上层网络层协议)
(5)多种类型链路:PPP协议必须能够在多种类型的链路上运行。比如:同步、异步、低速或高速、电的或光的等;
(6)差错控制:PPP协议必须能够对接受到的帧进行检测,并立即丢弃有差错的帧;
(7)检测连接状态:PPP协议必须具有一种检测机制,能够即使的自动检测链路书否处于正常工作状态;
(8)最大传输单元:PPP协议必须对每一种类型的点对点链路设置最大的传送单元MTU的标准默认值。MTU是数据部分的最大长度,不是帧的总长度,帧的总长度包括:帧头+数据部分+帧尾。
(9)网络层地址协商:PPP协议必须提供一种机制使通信的两个网络层的尸体能够 通过协商指导或能够配置彼此的网络层地址;
(10)数据压缩协商:PPP协议必须提供一种方法来协商使用数据压缩算法。
1.2 PPP协议的组成
PPP协议有三个部分组成:
(1)一个将IP数据报封装到串行链路的方法。PPP既支持异步链路,也支持面向比特的同步链路。IP数据包在PPP帧中就是其信息部分。这部分数据长度受最大传输单元MTU限制。
(2)一个用来建立、配置和测试数据链路连接的链路控制协议LCP。通信双方可协商一些选项。
(3)一套网络控制协议NCP,其中每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet,以及appletalk.
1.3 ppp协议帧的格式
1、各字段的意义
首部第一个字段和尾部的第二个字段都是标志字段F(flag),规定为0x7E,十六进制表示。十六进制的7E转换为二进制为:01111110。标志字段表示一个数据帧开始和或结束,字段F就是PPP帧的界定符。连续的连个帧之间只需要用一个标志字段即可,但如果出现了两个连续的标志字段,则表示这是一个空帧,应当丢弃。
首部中的字段A(0xFF)和控制字段C(0x03)没有意义,不携带PPP帧的信息。
PPP首部的第四个字段是2字节的协议字段。当协议字段为0x0021时,PPP帧的信息字段就是IP数据包;当为0xC021时,则信息部分为LCP的数据;当协议字段为0x8021时,则表示为网络层的控制数据。
信息部分的长度为可变的,最大受MTU的控制,不超过1500字节。
尾部的第一个字段是2字节的FCS字段,用来进行CRC帧序列检测。
2、字节填充
为了避免信息字段部出现与标志字段(F:0x7E)一样的比特组合时候,采用字节填充的措施使这种情况不出现在信息字段,RFC1662规定了如下的填充方法:
(1)把信息字段中出现的每一个0x7E字节转换为2字节的序列(0x7D,0x5E);
(2)把信息字段中出现的每一个0x7D字节转换为2字节序列的(0x7D,0x23),(即当数据字段中原先就在存在0x7D也要转换);
(3)若信息字段出现了ASCII码的控制字符(数值小于0x20的字符),则该字符要加入一个0x7d字符,同时该字符的编码加以改变。例如:0x03(表示传输结束的ETX),就要把他转变为2字节的序列0x7d,0x23.
由于在发送端进行了字节填充,因此在链路传送上传送的信息字节就超过了原来信息的字节数。但在接收端接收到数据后在进行与发送端自己填充相反的转换,就可转换出原来正确的信息。
3、零比特填充
PPP协议在使用SONTE/SDH链路时,使用同步传输而不是异步传输。PPP协议采用零比特填充的方法来实现透明传输。
具体方法:在发送端,先扫描整个信息字段,只要发现有5个连续的1,则立即填充一个0。因此在填充后的比特流中,不会出现连续的6个1.接收端在收到一个数据帧时,先找到标志字段F以确定帧的边界,然后对其中的比特流进行扫描,每当出现5个连续的1时,就把后面的一个0删除掉,以此类推,最终完成原数据帧比特流的还原。在所传送的数据比特流中可以传送任意组合的比特流,而不会引起对帧边界的错误判断,达到透明传输。