PPP点对点协议分析

简介

       PPP(Point to Point Protocol)即点对点协议,为在点对点连接上传输多协议数据包提供了一个标准方法。设计目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP/IP 协议集中它是一种用来同步调制连接的数据链路层协议,替代了原来非标准的第二层协议SLIP。除了IP以外PPP还可以携带其它协议,包括DECnet和Novell的Internet网包交换(IPX)。
三个组成部分:
        一个将IP数据报封装到串行链路的方法。PPP既支持异步链路(无奇偶检验的8比特数据),也支持面向比特的同步链路。IP数据报在PPP帧中就是其信息部分。这个信息部分的长度受最大传送单元MTU的限制。
        一个用来建立、配置和测试数据链路连接的链路控制协议LCP( Link Control Protoco )。通信的双方可协商一些选项。在RFC1661中定义了11种类型的LCP分组。
        一套网络控制协议NCP( Network Control protocol ),其中的每一个协议支持不同的网络层协议,如IP、OSI的网络层、 Decnet ,以及 Appletalk 等。

功能:
(1)PPP具有动态分配IP地址的能力,允许在连接时刻协商IP地址;
(2)PPP支持多种网络协议,比如TCP/IP、NetBEUI、NWLINK等;
(3)PPP具有错误检测以及纠错能力,支持数据压缩;
(4)PPP具有身份验证功能。
(5)PPP可以用于多种类型的物理介质上,包括串口线、电话线、移动电话和光纤(例如SDH),PPP也用于Internet接入。

基本帧封包格式及各字段分析

封包格式:

PPP点对点协议分析_第1张图片
字段解析:

标志:占16位,帧开始标志
地址:占8位,在HDLC中,地址字段用于指定哪个站正在处理,但是由于PPP只关心一个目的地,这个字段总是被设置为0xFF (所有站)
控制:占16位,用于指示帧序列和重传行为。由于这些链路层的可靠性功能通常不是由PPP实现,所以控制字段设置为固定值0x030,由于地址和控制字段在PPP中都是固定的常数,所以在传输过程中经常通过一个称为地址和控制字段压缩(ACFC)的选项来省略它们,该选项实质上是消除了这两个字段。
协议:占8或16位,表明携带的数据类型。根据 HDLC规范,协议号的分配方式为:高位字节的最低有效位为0,低位字节的最低有效位为1。 0x0000-0x3FFF范围内的值表示网络层协议,。0x8000-0xBFFF范围内的值表示NCP的相关数据。 0x4000-0x7FFF范围内的值用于NCP不相关的"很少使用的"协议。 0xC000-0xEFFF范围内的值表示控制协议,例如LCP。在某些情况下,如果协议字段压缩(PFC)选项在链路建立时协商成功,协议字段可被压缩为1字节。  LCP分组总是使用 2字节的未压缩格式。
FCS:占16或32位,(一个CRC16,生成多项式为10001000000100001 ), 涵盖除FCS字段本身和标志字节之外的整个帧。注意, FCS的值涵盖任何字节或位被填充之前的帧。LCP选项可将CRC从16位扩展到32位。在这种情况下,可采用与前面提到的以太网相同的CRC32多项式。
标志:占8位,帧结束标志

其他:

标志冲突:
        如果0x7E值出现在帧内部,这时会带来一个小问题。它可通过两种方式来处理,这取决于PPP工作在异步还是同步链路上。
对于异步链路, PPP使用字符填充(也称为字节填充)。如果标志字符出现在帧中其他地方,则用2字节序列0x7D5E (0x7D称为“ppp转义字符”)替换。如果转义字符本身出现在帧中,则用2字节序列0x7D5D替换。因此,接收方用0x7E替换接收的0x7D5E,并用0x7D替换接收的0x7D5D0。
在同步链路(例如T1线路、T3线路)上, PPP使用位填充。注意,标志字符的位模式为01111110 (连续6个1的位序列),在除了标志字符之外的任何地方,位填充在5个连续1之后填充一个00这样做意味着,发送的字节可能超过8位,但这通常是正常的,因为低层串行处理硬件能去掉填充的比特流,并将它恢复成未填充时的样子。

缺少长度字段:
        由于PPP缺少一个长度字段,并且串行线路通常不提供帧封装,所以在理论上对一个 PPP帧的长度没有硬性限制。实际上,最大帧大小通常由MRU指定。当一台主机指定一个 MRU选项(类型0x01)时,它要求对方不发送比MRU选项提供的值更长的帧。MRU值是数据字段的字节长度,它不计算其他PPP开销字段(即协议、 FCS、标志字段)。它的典型值是1500或1492,但也可能多达65535。 Pv6操作需要的长度最小为1280。 PPP标准要求具体实现能接收最大1500字节的帧, MRU更多的是建议对方选择帧大小,而不是硬性限制帧大小。当小分组和大分组在同一条PPP链路上交错传输时,较大分组可能占用一条低带宽链路的大部分带宽,并影响小分组的正常传输。这可能导致抖动(延迟变化),对交互式应用 (例如远程登录和VoIP)产生负面影响。配置较小的MRU (或MTU)有助于缓解这个问题, 但会产生更大的开销。

LCP(Link Control Protocol)链路控制协议:

LCP的主要工作是使一条点到点链路达到最低要求。
配置消息使链路两端开始基本配置过程,并建立商定的选项。
终止消息用于在完成后清除一条链路。LCP也提供了前面提到的 一些附加功能。
回送请求/应答消息可由LCP在一条活跃链路上随时交换,以验证对方的操作。
放弃请求消息可用于性能测试,指示对方丢弃没有响应的分组。
标识和剩余时间消息用于管理,了解对方的系统类型,指出链路保持建立的时间(例如出于管理或安全原因)。

LCP分组格式

PPP点对点协议分析_第2张图片
LCP的PPP协议字段值始终是0xC021它不能用PFC删除,以免产生歧义。

字段解析:

代码:占8位,给出了请求或响应的操作类型:配置请求(0x01)、配置接受ACK (0x02)、配置部分拒绝NACK (0x03)、配置完全拒绝REJECT(0x04)、终止请求(0x05 )、终止ACK(0x06)、代码REJECT(0x07)、协议REJECT(0x08 )、回送请求(0x09)、回送应答(0x0A)、放弃请求(0x0B)、标识(0x0C)和剩余时间(0x0D)。ACK消息通常表明接受一组选项, NACK消息用建议选项表明部分拒绝。REJECT消息完全拒绝一个或多个选项。
标识:占8位,由LCP请求帧的发送方提供的序列号,并随着每个后续消息进行递增。
长度:占16位,给出了LCP分组的字节长度,它不能超过链路的最大接收单元(MRU)。注意,长度字段是LCP协议的一部分,PPP协议通常不提供这个字段。  

MP (MP:Multi-Link PPP) 多链路点对点协议

        可用于将多条点到点链路聚合为一条链路。这种想法与链路聚合相似,并被用于多个电路交换信道(例如ISDNB信道)的聚合。MP包含一个特殊的LCP选项,表示支持多链路,以及一个用于多链路上PPP帧分片与重组的协商协议。一条聚合链路(称为一个捆绑)可作为一条完整的虚拟链路来操作,并包含自已的配置信息。链路捆绑由大量成员链路组成。每个成员链路可能有自已的选项集。
        实现MP的典型方法是使分组轮流经过备个成员链路传输。这种方法称为银行柜员算 法,它可能导致分组重新排序,可能为其他协议带来不良的性能影响。 (例如,虽然TCP/ IP可以正确处理重新排序后的分组,但也可能不如没有重新排序处理得好。) MP在每个分组中添加一个2 - 4字节的序列头部,而远程MP接收方的任务是重建正确的顺序。

MP帧格式

PPP点对点协议分析_第3张图片

字段解析:

        头部支持2种格式:短头部(2字节)和长头部(4字节)。 LCP的短序列号选项(类型18)用于选择使用的格式。如果一个帧没有被分片,但使用这种格式传输,则B和E位都被置位,表明该分片是第一个和最后一个(即它是整个帧)。否则,第一个分片的B、E位组合被设置为10,最后一个分片的B、E位组合被设置为01 ,它们之间的所有分片被设置为00。序列号给出相对第一个分片的分组号偏移量。 

网络控制协议

        对于IPv4, NCP被称为IP控制协议(IPCP)。对于IPv6, NCP被称为IPV6CP。在LCP完成链路建立和认证之后,该链路每端都进入网络状态,并使用一个或多个NCP(例如典型的是一个IPCP)进行网络层的相关协商。
        IPCP (针对IPv4的标准NCP)可用于在一条链路上建立IPv4连接,以及配置VinJacobson头部压缩(VJ压缩)。 IPCP分组在PPP状态机进人网络状态之后交换。IPCP分组使用与LCP相同的分组交换机制和分组格式,除非协议字段被设置为0x8021,并且代码字段被限制在范围0 - 7。代码字段的值对应于消息类型:特定供应商配置请求、配置ACK、配置REJECT、终止请求、终止ACK和代码REJECT。 IPCP可协商一系列选项,包括IP压缩协议(2)、 IPv4地址(3)和移动IPv4 (4)。其他选项可用于获得主要和次要的域名服务器。
        IPV6CP使用与LCP相同的分组交换机制和分组格式,但它有两种不同的选择:接口标识符和IPv6压缩协议。接口标识符选项用于传输一个64位的ⅡD值,它作为形成一个链路本地IPv6地址的基础。由于它仅在本地链路上使用,因此不需要具有全球唯一性。这通过在IPv6地址的高位使用标准链路本地前缀,在低位设置某种功能的接口标识符来实现。

压缩控制协议

        PPP是相对较慢的拨号调制解调器使用的协议。因此,针对PPP链路上 压缩后发送数据已提出一些方法。压缩类型是不同的,无论是调制解调器硬件支持的压缩类型(例如V42bis、 V44),还是我们以后讨论的协议头部压缩。目前,有几个压缩选项可选。可在一条PPP链路的两个方向做出选择, LCP可协商一个使压缩控制协议(CCP)生效的选项。ccp的作用就像NCP,只不过在LCP链路建立交换阶段指明压 缩选项时才开始处理配置压缩细节。
        CCP在行为上很像NCP,仅在链路进入网络状态时协商。它使用与LCP相同的分组交换过程和格式(除协议字段被设置为0x80FD之外),另外还有一些特殊选项,并对常见的代码字段值(1~ 7)定义了2个新的操作:复位请求(0x0e)和复位确认(0x0f)。如果在一 个压缩帧中检测到一个错误,复位请求可用于要求对方复位压缩状态(例如字典、状态变量、 状态机等)。在复位后,对方响应一个复位确认。 
        一个或多个压缩帧可作为一个PPP帧的一部分(即包括LCP数据和可能的填充部分)。 压缩帧携带的协议字段值为0x00FD,但是如何指明存在多个压缩帧,这依赖于使用的特定压缩算法。当CCP与MP结合使用时,既可用于一个捆绑,也可用于多条成员链路的某些组合。如果只用于成员链路,协议字段设置为0x00FB (单个的链路压缩数据报)。

PPP认证

口令验证协议(PAP):是不提供认证相比,最简单、安全性最低的认证方案。这种协议非常简单,一方请求另一方发送一个密码。由于该密码在PPP链路上未加密传输,窃听者在线路上可轻易捕获密码并使用它。由于这个重大的漏洞,不建议使用PAP进行认证。 PAP分组像LCP分组那样编码,协议字段值设置为0xC023。
查询一握手认证协议(CHAP):提供了一种更安全的认证方法。在使用CHAP时,一个随机值从一方(称为认证方)发送到另一方。响应通过一种特殊的单向(即不可逆)功能,将一个随机值和一个共享密钥(通常由密码生成)结合形成响应中的一个数字。在接收到这个响应之后,认证方能更可靠地验证对方密钥是否正确。这个协议在链路上不会以明文形式发送密钥或密码,因此窃听者难以了解相关信息。由于每次使用不同的随机值,每个查询/响应的结果会改变,即使一个窃听者有可能捕捉到这个值,也无发通过重新使用(回放)来欺骗对方。
可扩展身份验证协议(EAP):是一个可用于备种网络的认证框架。它支持很多(约40个)不同的认证方法,从简单密码(例如PAP和CHAP)到更可靠的认证类型(例如智能卡、生物识别)。 EAP定义了一种携带各种认证的消息格式,但需要额外的规范定义EAP消息如何在特定的链路上传输。当EAP被用于PPP时。EAP不是在链路建立(LCP 建立)阶段协商一种认证方法,认证操作将被推迟到认证状态(网络状态的前一个状态)。这 允许更多信息类型用于影响远程访问服务器(RAS)的访问控制决策。当某种标准的协议用 于执行各种认证机制,网络访问服务器可能无须处理EAP消息内容,但可依靠其他基础设施的认证服务器(例如RADIUS服务器)确定访问控制决策。这是当前的企业网和ISP设计中的首选方案。

你可能感兴趣的:(网络,协议,TCP/IP协议簇分析)