7E | FF | 03 | 7E | |||
标志 | 地址 | 控制 | 协议域 | 信息域 | 校验 | 标志 |
1B | 1B | 1B | 2B | 缺省1500B | 2B | 1B |
0×C021 | LCP数据报文 | 校验 |
0×8021 | NCP数据报文 | 校验 |
0×0021 | IP数据报文 | 校验 |
点到点协议(Point to Point Protocol,PPP)是IETF(Internet Engineering Task Force,因特网工程任务组)推出的点到点类型线路的数据链路层协议。它解决了SLIP中的问题,并成为正式的因特网标准。
PPP协议在RFC 1661、RFC 1662和RFC 1663中进行了描述。
PPP支持各种类型的硬件,包括EIA/TIA 232、EIA/TIA 449、EIA/TIA 530、V.35、V.21等。只要是点到点类型的线路都可以运行PPP。在数据链路层,PPP通过LCP协议进行链路管理,相当于以太网数据链路层的MAC子层。而在网络层,由NCP为不同的协议提供服务。这里的NCP相当于以太网数据链路层的LLC子层。如图1所示。
图1 PPP的层次结构
2 PPP的功能PPP主要完成了以下功能:
链路控制
PPP为用户发起呼叫以建立链路;在建立链路时协商参数选择;通信过程中随时测试线路,当线路空闲时释放链路等。PPP中完成上述工作的组件是链路控制协议LCP(Link Control Protocol,LCP)。
网络控制
当LCP将链路建立好了以后,PPP要开始根据不同用户的需要,配置上层协议所需的环境。PPP使用网络控制协议NCP(Network Control Protocol,NCP)来为上层提供服务接口。针对上层不同的协议类型,会使用不同的NCP组件。如对于IP提供IPCP接口,对于IPX提供IPXCP接口,对于APPLETALK提供ATCP接口等。
1.2 PPP过程在这步骤中,通信双方开始交换一系列的NCP分组来配置网络层。对于上层使用的是IP协议的情形来说,此过程是由IPCP完成的。
当NCP配置完成后,双方的逻辑通信链路就建立好了,双方可以开始在此链路上交换上层数据。
当数据传送完成后,一方会发起断开连接的请求。这时,首先使用NCP来释放网络层的连接,归还IP地址;然后利用LCP来关闭数据链路层连接;最后,双方的通信设备或模块关闭物理链路回到空闲状态。
图2给出了上述过程的示意图。
图2 PPP过程
1.3 PPP帧格式PPP帧格式以HDLC帧格式为基础,做了很少的改动。二者的主要区别是:PPP是面向字符的,而HDLC是面向位的。PPP在点到点串行线路上使用字符填充技术。所以,所有的帧的大小都是字节的整数倍。
图3中给出了PPP的帧格式。
图3 PPP的帧格式
PPP帧是以标准HDLC标志字节(01111110)开始和结束的。
接下来是地址字段,缺省情况下,被固定设成二进制数11111111,因为点到点线路的一个方向上只有一个接收方。
地址字段后面是控制字段,缺省情况下,被固定设成二进制数00000011。
因为缺省情况下,地址字段、控制字段总是常数。因此,这两部分实际可以省略不要(需要通过LCP进行协商)。
接下来是协议字段。用来标明后面携带的是什么类型的数据。其缺省大小为2个字节。但如果是LCP包,则可以是1字节。
接下来是数据字段。其长度可变,缺省最大长度为1500字节。
接下来是校验和字段,通常情况下是2个字节,但也可以是4字节。
1.4 LCP协商选项LCP用来在通信链路建立初期,在通信双方之间协议功能选项。表1列出了其中主要的选项。它们是身份验证、压缩、回叫、多链路。
表1 PPP LCP协商选项
特 性 |
解释 |
协议 |
身份验证 |
链路建立成功前要求提供正确的密码 |
PAP,CHAP |
压缩 |
在带宽有限的链路提供对数据的压缩功能 |
Predictor,Stacker,MPPC |
回叫 |
由被叫方重新呼叫原呼叫发起方 |
Cisco Callback,MS Callback |
多链路 |
需要的时候进行多链路捆绑、负载均衡 |
MP |
除了身份认证方法之外,PPP的LCP还提供了链路压缩、回叫、多链路捆绑等选项。
1 链路压缩PPP协议运行在速率十分有限的点到点串行链路上。为了提高数据发送效率,可以采用对数据进行压缩后再传送的方法,我们将其称为链路压缩。
LCP支持以下一些链路压缩方法:Stac、Predictor、MPPC以及TCP头部压缩。不同的方法对CPU及内存的需求并不相同。有些需要更多的内存(内存密集型),有些则需要占用更多的CPU时间(CPU密集型)。压缩原理和效果也不相同。
Stac:Stac压缩算法基于Lempel-Ziv理论,它通过查找、替换传送内容中的重复字符串的方法达到压缩数据的目的。使用Stac压缩算法可以选择由各种硬件(适配器、模块等)压缩或者由软件进行压缩,还可以选择压缩的比率。Stac压缩算法需要占用较多的CPU时间。
MPPC:MPPC是微软的压缩算法实现,它也是基于Lempel-Ziv理论,也需要占用较多的CPU时间。
Predictor:Predictor—预测算法通过检查数据的压缩状态(是否已被压缩过)来决定是否进行压缩。因为,对数据的二次压缩一般不会有更大的压缩率。相反,有时经过二次压缩的数据反而比一次压缩后的数据更大。Predictor算法需要占用更多的内存。
TCP头部压缩:TCP头部压缩基于Van Jacobson算法,该算法通过删除TCP头部一些不必要的字节来实现数据压缩的目的。
2 回叫回叫又称为回拨,是指当通信一方拨号到另一方后,由另一方断开拨号连接并进行反向的拨号。
这对于从甲地到乙地的电话费大于从乙地到甲地的电话费的情形。这时,可以由甲方首先发起到乙方的呼叫连接,当乙方收到甲方的呼叫请求后,断开乙方的呼叫。然后,从乙方发起到甲方的回叫。甲方应答后,双方的通信链路就建立起来了。
回叫还有更安全的优点。因为乙方在回叫之前可以验证对方是否是合法用户,或者可以用口令数据库的方法或者可以用检验对方电话号码的方法。
3 多链路捆绑LCP的多链路捆绑(MP)选项通过将通信两端之间的多条通信链路捆绑成一条虚拟的链路而达到扩充链路可用带宽的目的。
LCP的多链路捆绑可以在多种类型的物理接口上实现,包括异步串行接口、同步串行接口、ISDN基本速率接口BRI、ISDN主速率接口PRI。LCP的多链路捆绑也支持不同的上层协议封装类型,如X.25、ISDN、帧中继等。
限于篇幅,关于以上LCP协商选项的配置这里就不再详细介绍了。
2 PPP配置(Cisco) 2.1 PPP基本配置 1 封装对于同步串行接口,默认的封装格式是HDLC(Cisco私有实现)。可以使用命令encapsulation ppp将封装格式改为PPP。如图4所示。
图4 PPP串行封装
当通信双方的某一方封装格式为HDLC,而另一方为PPP时,双方关于封装协议的协商将失败。此时,此链路处于协议性关闭(protocol down)状态,通信无法进行。如图5所示。
图5 两端路由器串行接口封装格式不一致
这时,在路由器RouterA与路由器RouterB的链路没有成功建立之前,路由器RouterA及RouterB的路由表将为空。
当路由器RouterA的串行接口Serial 0/0又改为封装成PPP协议时,双方的通信将恢复正常。如图6所示,是在路由器RouterA上产生的debug ppp events的输出。可以发现,成功地安装了此链路的路由条目。同时,系统提示该链路协议被激活,链路可用。
图6 命令debug ppp events的输出
同时,使用show ip route命令可以看到RouterA安装了两条路由条目,一条是到达网络192.168.0.0/24的一条直连路由,另一条是到达主机192.168.0.2/32的一条直连主机路由。如图7所示。
图7 命令show ip route的输出
当将路由器RouterA的Serial 0/0的封装格式再次改为HDLC时,命令debug ppp events将给出如图8所示的提示信息,提示该链路上的路由条目被删除。同时,系统通告该接口协议性关闭。
图8 命令debug ppp events的输出
同时,debug ppp negotiation的输出也表明了这一点,如图9所示。
图9 命令debug ppp negotiation的输出
2 autoselect可以配置一个接口根据接收到的字符自动判断远程拨号用户协议类型并调用相应的处理过程。如图10所示。
图10 autoselect命令过程
例如,如果远程拨号用户使用PPP协议拨入线路,线路将检测到PPP帧的起始字符0x7E(01111110),并调用PPP处理过程。又如,当线路检测到“回车”符后将开始一个Exec会话过程等。
autoselect命令允许线路被设置成可以接受多种类型协议的连接,如PPP、SLIP、ARAP等。以下是Autoselect命令的使用格式。
autoselect [arap|ppp|slip|during-login]
其中,命令中的during-login选项将提示用户输入用户名和口令而不需要按“回车”键(否则,一个会话过程将自动开始而不会给出用户名和口令的提示)。