3.5 点对点协议PPP
# 3.5 点对点协议PPP
本节课我们介绍点对点协议PPP。
点对点协议,PPP是目前使用最广泛的点对点数据链路层协议。请大家想想看,一般的因特网用户是如何接入到因特网的,通常都是要通过连接到某个因特网服务提供者ISP,例如中国电信、中国联通、中国移动这三大运营商才能接入因特网。
这些ISP已经从因特网管理机构申请到了一批IP地址,用户计算机只有获取到ISP所分配的合法IP地址后,才能成为因特网上的主机。
用户计算机与ISP进行通信时所使用的数据链路层协议,通常就是PPP协议。这里需要说明的是在1999年公布的在以太网上运行的PPP协议,即PPP over ethernet,简称为pppoe。它使得ISP可以通过DSL电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务。另外点对点协议PPP也广泛应用于广域网路由器之间的专用线路。
用户计算机与ISP进行通信时所使用的数据链路层协议,通常就是PPP协议。这里需要说明的是在1999年公布的在以太网上运行的PPP协议,即PPP over ethernet,简称为pppoe。它使得SP可以通过DSL电路调制解调器、以太网等宽带接入技术,以以太网接口的形式为用户提供接入服务。
PPP协议是因特网工程任务组IEFT在1992年制定的,经过1993年和1994年的修订,现在的PPP协议已成为因特网的正式标准。我们可以在IEFT官方网站的相关页面,搜索并查看PPP协议的相关rfc文档
PPP协议为在点对点链路传输各种协议数据报提供了一个标准方法,主要由以下三部分构成。
- 第一,对各种协议数据报的封装方法,也就是我们之前课程中介绍的封装成帧。
- 第二,链路控制协议lcp,用于建立配置以及测试数据链路的连接。
- 第三,一套网络控制协议ncps,其中的每一个协议支持不同的网络层协议
从网络体系结构的角度看,PPP是数据链路层的协议,他将上层交付下来的协议数据单元封装成PPP帧.
为了支持不同的网络层协议,PPP协议包含了一套网络控制协议ncps,其中的每一个协议支持不同的网络层协议,例如tcpip中的IP novell neteware,网络操作系统中的IPX,苹果公司的apple talk等。
链路控制协议LCP,用于建立配置以及测试数据链路的连接,PPP协议能够在多种类型的点对点链路上运行,例如面向字节的异步联络,面向比特的同步链路。
接下来我们来看看PPP协议的帧格式,帧首部由4个字段构成,帧尾部由两个字段构成,各字段的长度以及帧的数据部分的最大长度如图所示。
帧首和帧尾部中的标志字段是PPP间的定界符,取值为16进制的7E。帧首部中的地址字段取值为16进制的ff,控制字段取值为16进制的03,最初曾考虑以后再对这两个字段的值进行其他定义,但至今也没有给出,可见这两个字段实际上并没有携带PPP帧的信息,帧首部中的协议字段,指明了帧的数据部分,应送交哪个协议处理。
当协议字段取值为16进制的0x0021时,PPP帧的数据部分就是IP数据报,如图所示,
当协议字段取值为16进制的0xc021时,PPP帧的数据部分就是链路控制协议LCP的分组,如图所示,
当协议字段取值为16进制的0x8021 10PPP帧的数据部分,就是网络控制协议ncp的分组,如图所示。
帧尾部中的帧检验序列fcs字段,取值是使用循环冗余校验crc计算出的校验位,用于检查PPP帧是否存在误码。
接下来我们来看看PPP协议是如何解决透明传输问题的。当PPP帧的数据部分出现帧手和帧尾中的标志字段时,如果不采取措施,则会造成接收方对PPP帧是否结束的误判。因为标志字段是PPP帧的定界,符取值为16进制的7E,也就是二进制的0111 1110。
PPP协议实现透明传输的方法,取决于所使用的链路类型。:
如果是面向字节的异步电路,则采用字节填充法,也就是插入转移字符。
如果是面向比特的同步电路,则采用比特填充法,也就是插入比特0。
我们来举例说明字节填充法,也就是以字节7E,作为PPP帧的定制符,以字节为单位来讨论问题。来看发送方对PPP帧数据部分的处理,
- 将出现的每一个7E字节转变成两次节序列7D5E 这相当于在7E字节前插入了转移字节7D,并将7E字节减去16进制的20,
- 将出现的每一个7d字节转变成两字节序列7d5d,
- 在出现的每一个ASCII码控制字符前插入一个7d字节,同时将该字符的编码加上16进制的0x20
- 对于PPP帧的接收方只要进行反变换,即可恢复出原来的PPP帧的数据部分。
我们再来举例说明比特填充法也就是以0111 1110作为PPP帧的定界符,以比特为单位来讨论问题,假设PPP帧的数据部分如图所示,其中包含了两个真定界符,来看发送方对PPP帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现,只要发现5个连续的比特1,则立即填充1个比特0,如图所示。
再来看接收方对PPP帧数据部分的处理,对帧的数据部分进行扫描,一般由硬件实现,只要发现5个连续的比特1,就把其后的1个比特0删除,如图所示。
接下来我们来看看PPP协议是如何进行差错检测的,PPP帧的尾部包含有一个两字节的帧检验序列fcs字段,使用循环冗余校验crc来计算该字段的取值。采用的生成多项式如下所示。Rfc1662文档的附录部分,给出了fcs的计算方法的c语言实现。为了减少对CPU的占用,采用查表法来实现fcs的计算范围,如图所示
接收方每收到一个PPP帧就进行crc检验,若crc检验正确,就收下这个帧,反之就要丢弃这个帧,使用PPP的数据链路层,向上不提供可靠传输服务。
最后我们以拨号接入为例,简单介绍一下PPP协议的工作状态,PPP链路的开始和结束状态都是静止状态,这时并不存在物理层的连接。当检测到调制解调器的载波信号,并建立物理层连接后,PPP就进入链路的建立状态。
这时链路控制协议lcp开始协商一些配置选项,若协商成功则进入鉴别状态,若协商失败则退回到静止状态。
所协商的配置选项,包括最大帧长,鉴别协议等,可以不使用鉴别,也可以使用口令鉴别协议pap或挑战握手鉴别协议chap
若通信双方无需鉴别或鉴别身份成功,则进入网络状态,若鉴别失败则进入终止状态,
进入网络状态后,进行ncp配置,配置完成后就要进入打开状态。
PPP链路的两端,通过相互交换网络层特定的ncp分组来进行ncp配置。如果在PPP链路上运行的是IP协议,则使用IP控制协议ipcp来对PPP链路的每一端配置IP模块,例如分配IP地址
只要链路处于打开状态,就可以进行数据通信。当出现故障或链路的一端发出终止请求时,就进入终止状态。
当载波停止后则回到静止状态
本节课的内容小结如下