点对点协议PPP
PPP协议的特点
- PPP协议就是用户计算机与ISP通信时所使用的数据链路层协议
PPP协议应满足的要求
简单:因IETF在设计因特网体系结构时,把最复杂的部分放在了TCP协议中,网际协议IP相对比较简单,所以对数据链路层的帧,不需要纠错,不需要序号,也不需要流量控制。简单为首要要求
简单的设计还可以是协议在实现时不容易出错,从而不同厂商在协议的不同实现上互操作性提高了。封装成帧:PPP协议必须规定特殊字符作为帧定界符(标志一个帧的开始和结束的字符),以便接收端从收到的比特流中能准确地找出帧的开始和结束位置。
透明性:PPP协议必须保证数据传输的透明性。(即如果数据中碰巧出现了和帧界定符一样的比特组合时要采取有效的措施来解决这个问题)
多种网络层协议:PPP协议必须能够在同一条物理链路上同时支持多种网络层协议(例如P和IPX等)的运行。
当点对点链路所连接的是局域网或路由器时,PPP协议必须同时支持在链路所连接的局域网或路由器上运行的各种网络层协议。-
多种类型链路:除了要支持多种网络层协议外,PPP还必须能够在多种类型的链路上运行。
这里特别要提到的是在1999年公布的在以太网上运行的PPP,即PPP over Ethernet, 简称PPPoE,这是PPP协议能够适应多种类型链路的典型例子,PPPoE是为宽带上网的主机使用的 链路层协议。这个协议把PPP帧再封装在以太网帧中。
差错检测:PPP协议必须能够对接收端收到的帧进行检测,并立即丢弃有差错的帧。
检测连接状态:PPP协议必须具有一种机制能够及时自动检测出链路是否处于正常工作状态。
最大传送单元: PPP协议必须对每一种类型的点对点链路设置最大传送单元MTU的标准默认值(至少是1500字节),如果高层协议发送的分组过长并超过MTU的数值,PPP就要丢弃这样的帧,并返回差错。MTU是数据链路层的帧可以载荷的数据部分的最大长度,而不是帧的总长度。
网络层地址协商:PPP协议必须提供一种机制使通信的两个网络层(例如两个IP层)的实体能够通过协商知道或能够配置彼此的网络层地址。协商的算法应尽可能的简单,且能在所有的情况下得出协商结果。
数据压缩协商:PPP协议必须提供一种方法来协商使用数据压缩算法,但PPP协议并不要求将数据压缩算法进行标准化。
在TCP/IP协议族中,可靠运输由运输层的TCP协议负责,因此数据链路层的PPP协议不需要进行纠错,不需要设置序号,也不需要进行流量控制。PPP协议不支持多点线路(即一个主站轮流和链路上的多个从站进行通信),而只支持点对点的链路通信,此外PPP协议只支持全双工链路。
PPP协议的组成
PPP协议有三个组成部分
一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路,IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
一个用来建议、配置和测试数据链路连接的链路控制协议LCP,通信双方可协商一些选项(在RFC 1661中定义了11中类型的LCP分组)
一套网络控制协议NCP,其中每一个协议支持不同的网络层协议,如IP、OSI的网络层、DECnet以及AppleTalk等。
PPP协议的帧格式
1.各字段的意义
PPP帧的首部和尾部分别为四个字段和两个字段。
首部的第一个字段和尾部的第二个字段都是标志字段F(Flag),规定为0x7E
(0x代表它后面的字符是用十六进制表示的。7E即01111110)
标志字段表示一个帧的开始或结束。因此标志字段就是PPP帧的定界符。
连续两帧之间只需要用一个标志字段,如果连续出现两个标志字段,
就表示是一个空帧,应当丢弃。�
首部中的地址字段A规定为0xFF(即11111111),
控制字段C规定为0x03(即00000011)。这两个字段实际上并没有携带PPP帧的信息。
PPP首部的第四个字段是2字节的协议字段。
当协议字段为0x0021时,PPP帧的信息字段就是IP数据报。
当为0xC021时,则信息字段是PPP链路控制协议LCP的数据,
而0x8021表示这是网络层的控制数据。
- 信息字段的长度是可变的,不超过1500字节。
- 尾部的第一个字段(2字节)是使用CRC的帧检测序列FCS。
字节填充
当信息字段中出现和标志字段一样的比特(0x7E)组合时,就必须采取一些措施使这种形式上和标志字段一样的比特组合不出现在信息字段中。
当PPP使用异步传输时,它把转义字符定义为0x7D(即01111101),并使用字节填充。
RFC1662规定了如下所述的填充方法:
- 把信息字段中出现的每一个0x7E字节转变成2字节序列(0x7D,0x5E)。
- 若信息字段出现一个0x7D的字节(即出现了和转义字符一样的比特组合),则把0x7D转变成2字节序列(0x7D,0x5D)。
- 若信息字段出现ASCII码的控制符(即数值小于0x20的字符),则在该字符前加一个0x7D字节,同时将该字节的编码加以改变。例如出现0x03就要把它转变为2字节序列(0x7D,0x23)。
零比特填充
PPP协议在用SONET/SDH链路时,是使用同步传输(一连串的比特连续传送)。这种情况下,PPP协议采用零比特填充方法来实现透明传输。
零比特填充的具体做法是:
- 在发送端,先扫描整个信息字段,只要发现5个连续1,则立即填入一个0
因此经过这种零比特填充后的数据,可以保证信息字段中不会出现6个连续1
- 接收端在接收到一个帧时,先找到标志字段F以确定一个帧的边界。
- 接着再用硬件对期中的比特流进行扫描。每当发现5个连续1时,就把这5个连续1后的一个0删除,以还原成原来的信息比特流。
PPP协议的工作状态
当用户拨号接入ISP之后,就建立一条从PC到ISP的物理连接。这时,PC 向 ISP的发送一系列的链路控制及协议LCP分组(封装成多个PPP帧),以便建立LCP连接。这些分组及其响应选择将要使用的一些PPP参数。接着进行网络层的配置,网络控制协议NCP给新接入PC分配一个临时的IP地址。这样,PC就称为因特网上的一个有IP的主机了。
当用户通信完毕时,NCP释放网络层协议,收回原来分配出去的IP地址。接着LCP释放数据链路层连接。最后释放的是物理层的连接。
PPP链路的起始和终点永远是链路静止状态,这时存在PC和ISP的路由器之间并不存在物理层的连接。
当PC通过调制解调器呼叫路由器时(点击连接),路由器能够检测到调制解调器发出的载波信号。在双方建立了物理层连接后,PPP就进入链路建立状态,其目的是建立链路层的LCP连接。
这时LCP开始协商一些配置选项,即发送LCP的配置请求帧。这是个PPP帧,其协议字段置为LCP对应的代码,而信息字段包含特定的配置请求。链路的另一端可以发送以下几种响应的一种:
- 配置确认帧:所有选项都接受
- 配置否认帧:所有选项都理解但不能接受
- 配置拒绝帧:选项所有的无法识别或不能接受,需要协商。
LCP配置选项包括链路上的最大帧长、所使用的鉴别协议的规约,以及不使用PPP帧中的地址和控制字段(这两个字段的值是固定的,没有信息量)
协商结束后双方就建立了LCP链路,接着就进入了鉴别状态,在这一状态,只允许传送LCP协议的分组、鉴别协议的分组以及监测链路质量的分组。若使用口令鉴别协议PAP,则需要发起通信的一方发送身份标识符和口令。系统可允许用户重试若干次。如需更好的安全性,则可使用更加复杂的口令握手鉴别协议CHAP。若鉴定失败,则转到链路终止状态。若鉴别成功,则进入网络层协议状态。
在网络层协议状态,PPP链路的两端的网络控制协议NCP根据网络层的不同协议互相交换网络层特定的网络控制分组。