from http://xiyudan1988.blog.163.com/blog/static/95993114200810145047212/ |
PPP是链路层协议,因此咱们将它的数据单位称为帧: 算法
紧接在起始标志字节后的一个字节是地址域,该字节为0xFF。咱们熟知网络是分层的,且对等层之间进行相互通讯,而下层为上层提供服务。当对等层进行通讯时首先需获知对方的地址,而对不一样的网络,在数据链路层则表现为须要知道对方的MAC地址、X.121地址、ATM地址等;在网络层则表现为须要知道对方的IP地址、IPX地址等;而在传输层则须要知道对方的协议端口号。例如若是两个以太网上的主机但愿可以通讯的话,首先发送端需获知对端的MAC地址。但因为PPP协议是被运用在点对点的链路上的特殊性,它不像广播或多点访问的网络同样,由于点对点的链路就能够惟一标示对方,所以使用PPP协议互连的通讯设备的两端无须知道对方的数据链路层地址,因此该字节已无任何意义,按照协议的规定将该字节填充为全1的广播地址。同地址域同样,PPP数据帧的控制域也没有实际意义,按照协议的规定通讯双方将该字节的内容填充为0x03。(既然无心义,就能够随便赋值了吧,呵呵,只要你们都遵照一个标准就行) 数据库 就PPP协议自己而言,咱们最关心的内容应该是它的协议域和信息域。协议域可用来区分PPP数据帧中信息域所承载的数据报文的内容。协议域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也便是要求低字节的最低位为“1”,高字节的最低位为“0”。若是当发送端发送的PPP数据帧的协议域字段不符合上述规定,则接收端会认为此数据帧是不可识别的,那么接收端会向发送端发送一个Protocol-Reject报文,在该报文尾部将完整地填充被拒绝的报文。 安全 信息域缺省时最大长度不能超过1500字节,其中包括填充域的内容,1500字节大小等于PPP协议中配置参数选项MRU(Maximum Receive Unit)的缺省值,在实际应用当中可根据实际须要进行信息域最大封装长度选项的协商。信息域若是不足1500字节时可被填充,但不是必须的,若是填充则需通讯双方的两端能辨认出有用与无用的信息方可正常通讯。 服务器 协议域和信息域是须要合在一块儿看的,目前主要用到的协议类型有LCP、NCP和普通的IP协议,而他们相对应的协议域字段则为0×C02一、0×8021和0×0021,能够看到应证了这句话:也便是要求低字节的最低位为“1”,高字节的最低位为“0”。然后面的信息根据不一样协议包含了不一样的报文内容。 网络
其实这3种不一样协议就对应PPP协议在运行过程当中的不一样状态,之后会在PPP状态转移中介绍到,咱们能够很容易根据PPP帧的协议域就判断目前处于PPP的哪一个阶段。遇到PPP问题,咱们一般经过抓包,而后判断PPP哪一个阶段有问题,再进行分析和问题定位。注意一点的就是,NCP不是一种协议,它的全称是网络控制协议,也就是说最后双方都遵循的数据传输协议,能够是IPCP,也能够是IPXCP。 负载均衡 CRC校验域主要是对PPP数据帧传输的正确性进行检测的,固然在数据帧中引入了一些传输的保证机制是好的,但能够反过来讲,一样咱们会引入更多的开销,这样可能会增长应用层交互的延迟。 异步 最后给你们一个经过Ethereal抓下来的PPP帧,对应上面的说明,看看你们是否能够看懂: 测试 7E FF 03 C021 01 01 00 17 02 06 00 0A 00 00 05 06 00 0B 42 CB 07 02 08 02 0D 03 06 7E spa 1.1 PPP概述 计算机网络 点到点协议(Point to Point Protocol,PPP)是IETF(Internet Engineering Task Force,因特网工程任务组)推出的点到点类型线路的数据链路层协议。它解决了SLIP中的问题,并成为正式的因特网标准。 PPP协议在RFC 166一、RFC 1662和RFC 1663中进行了描述。 PPP支持在各类物理类型的点到点串行线路上传输上层协议报文。PPP有不少丰富的可选特性,如支持多协议、提供可选的身份认证服务、能够以各类方式压缩数据、支持动态地址协商、支持多链路捆绑等等。这些丰富的选项加强了PPP的功能。同时,不管是异步拨号线路仍是路由器之间的同步链路都可使用。所以,应用十分普遍。 1 PPP的层次结构 PPP支持各类类型的硬件,包括EIA/TIA 23二、EIA/TIA 44九、EIA/TIA 530、V.3五、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过程 从开始发起呼叫到最终通讯完成后释放链路,PPP的工做经历了一系列的过程。下面,是这一过程的描述。 当一个PC终端拨号用户发起一次拨号后,此PC终端首先经过调制解调器呼叫远程访问服务器,如提供拨号服务的路由器。 当路由器上的远程访问模块应答了这个呼叫后,就创建起一个初始的物理链接。 接下来,PC终端和远程访问服务器之间开始传送一系列通过PPP封装的LCP分组,用于协商选择将要采用的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协商选项
1.5 LCP协商的其余选项 除了身份认证方法以外,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.2五、ISDN、帧中继等。 |