PPP(点对点协议)

2023-02-19 49阅读

温馨提示:这篇文章已超过517天没有更新,请注意相关的内容是否还可用!

PPP

点对点协议

点对点协议(PPP,Point to Point Protocol)通常用在两节点间建立直接的连接。点对点协议最初设计是为两个对等节点之间的IP流量传输提供一种封装协议;主要用于利用电话线来连接两台计算机,现在也有用在宽带计算机连接上。

中文名点对点协议
英文名Point to Point Protocol
适用领域范围传输数据包
简称ppp
支 持面向比特的同步链接

概述

为了建立点对点链路通信,PPP链路的每一端,必须首先发送LCP包以便设定和测试数据链路。

在链路建立,LCP所需的可选功能被选定之后,PPP必须发送NCP包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在链路上发送了。链路将保持通信设定不变,直到有LCP和NCP数据包关闭链路,或者是发生一些外部事件的时候。PPP是为在同等单元之间传输数据包这样的简单的链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。让PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。

主要组成

封装

在串行链路上封装数据报的方法。PPP封装提供了不同网络层协议同时在同一链路传输的多路复用技术。PPP封装精心设计,能保持对大多数常用硬件的兼容性。

链路控制协议

建立,配置和测试数据链路链接(the data link connection)的LCP协议(Link Control Protocol)。PPP提供的LCP功能全面,适用于大多数环境。LCP用于就封装格式选项自动达成一致,处理数据包大小限制,探测环路链路和其他普通的配置错误,以及终止链路。LCP提供的其他可选功能有:认证链路中对等单元的身份,决定链路功能正常或链路失败情况。

网络控制协议

一种扩展链路控制协议,用于建立、配置、测试和管理数据链路连接。

配置使用链路控制协议的简单和自制机制。该机制也应用于其它控制协议,例如:网络控制协议(NCP)。

为了建立点对点链路通信,PPP链路的每一端,必须首先发送LCP包以便设定和测试数据链路。在链路建立,LCP所需的可选功能被选定之后,PPP必须发送NCP包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在链路上发送了。

链路将保持通信设定不变,直到有LCP和NCP数据包关闭链路,或者是发生一些外部事件的时候(如,休止状态的定时器期满或者网络管理员干涉)。

应用

假设同样是在Windows 98,并且已经创建好“拨号连接”。那么可以通过下面的方法来设置PPP协议:首先,打开“拨号连接”属性,同样选择“服务器类型”选项卡;然后,选择默认的“PPP:Internet,Windows NT Server,Windows 98”,在高级选项中可以设置该协议其它功能选项;最后,单击“确定”按钮即可。

协议规范

PPP是为在同等单元之间传输数据包这样的简单的链路而设计的。这种链路提供全双工操作,并按照顺序传递数据包。有意让PPP为基于各种主机、网桥和路由器的简单连接提供一种共通的解决方案。

PPP封装提供了不同网络层协议同时通过统一链路的多路技术。精心的设计PPP封装,使其保有对常用支持硬件的兼容性。当使用默认的类HDLC帧(HDLC like framing)时,仅需要8个额外的字节,就可以形成封装。在带宽需要付费时,封装和帧可以减少到2或4个字节。为了支持高速的执行,默认的封装只使用简单的字段,多路分解只需要对其中的一个字段进行检验。默认的头和信息字段落在32bit边界上,尾字节可以被填补到任意的边界。

链路建立

PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。PPP协议包含这样几个部分:链路控制协议LCP(Link Control Protocol);网络控制协议NCP(Network Control Protocol);认证协议,最常用的包括口令验证协议PAP(Password Authentication Protocol)和挑战握手验证协议CHAP(Challenge Handshake Authentication Protocol)。LCP负责创建,维护或终止一次物理连接。NCP是一族协议,负责解决物理连接上运行什么网络协议,以及解决上层网络协议发生的问题。

链路建立过程

PPP链路状态机如图1所示。一个典型的链路建立过程分为三个阶段:创建阶段、认证阶段和网络协商阶段。

创建PPP链路

LCP负责创建链路。在这个阶段,将对基本的通讯方式进行选择。链路两端设备通过LCP向对方发送配置信息报文(Configure Packets)。一旦一个配置成功信息包(Configure Ack packet)被发送且被接收,就完成了交换,进入了LCP开启状态。应当注意,在链路创建阶段,只是对验证协议进行选择,用户验证将在第2阶段实现。

用户验证

在这个阶段,客户端会将自己的身份发送给远端的接入服务器。该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。在认证完成之前,禁止从认证阶段前进到网络层协议阶段。如果认证失败,认证者应该跃迁到链路终止阶段。在这一阶段里,只有链路控制协议、认证协议,和链路质量监视协议的packets是被允许的。在该阶段里接收到的其他的packets必须被静静的丢弃。最常用的认证协议有口令验证协议(PAP)和挑战握手验证协议(CHAP)。认证方式介绍在第三部分中介绍。

调用网络层协议 

认证阶段完成之后,PPP将调用在链路创建阶段(阶段1)选定的各种网络控制协议(NCP)。选定的NCP解决PPP链路之上的高层协议问题,例如,在该阶段IP控制协议(IPCP)可以向拨入用户分配动态地址。

这样,经过三个阶段以后,一条完整的PPP链路就建立起来了。

认证方式

PAP

口令验证协议(PAP)是一种简单的明文验证方式。NAS(网络接入服务器,Network Access server)要求用户提供用户名和口令,PAP以明文方式返回用户信息。很明显,这种验证方式的安全性较差,第三方可以很容易的获取被传送的用户名和口令,并利用这些信息与NAS建立连接获取NAS提供的所有资源。所以,一旦用户密码被第三方窃取,PAP无法提供避免受到第三方攻击的保障措施。

CHAP

挑战-握手验证协议(CHAP)是一种加密的验证方式,能够避免建立连接时传送用户的真实密码。NAS向远程用户发送一个挑战口令(challenge),其中包括会话ID和一个任意生成的挑战字串(arbitrary challengestring)。远程客户必须使用MD5单向哈希算法(one-way hashing algorithm)返回用户名和加密的挑战口令,会话ID以及用户口令,其中用户名以非哈希方式发送。CHAP对PAP进行了改进,不再直接通过链路发送明文口令,而是使用挑战口令以哈希算法对口令进行加密。因为服务器端存有客户的明文口令,所以服务器可以重复客户端进行的操作,并将结果与用户返回的口令进行对照。CHAP为每一次验证任意生成一个挑战字串来防止受到再现攻击(replay attack)。在整个连接过程中,CHAP将不定时的向客户端重复发送挑战口令,从而避免第3方冒充远程客户(remote client impersonation)进行攻击。

在某些连接时,在允许网络层协议数据包交换之前希望对对等实体进行认证。缺省时,认证不是必要的。如果应用时希望对等实体使用某些认证协议进行认证,这种要求必须在建立连接阶段提出。 认证阶段应该紧接在建立连接阶段后。然而,可能有连接质量的决定并行出现。应用时绝对不允许连接质量决定数据包的交换使认证有不确定的延迟。认证阶段后的网络层协议阶段必须等到认证结束后才能开始。如果认证失败,将转而进入终止连接阶段。仅仅是连接控制协议、认证协议、连接质量监测的数据包才被允许在此阶段中出现。所有其它在此阶段中接收到的数据包都将被静默丢弃。 应用时不能简单的因为超时或缺少回应就认为认证失败。应该允许重传,仅当试图认证的次数超过一定的限制时才进入终止连接阶段。如果对方拒绝认证,己方有权进入终止连接阶段。

网层协议

每一个网络层协议(例如IP、IPX、AppleTalk)必须单独的由相应的网络控制协议(NCP)配置。每一个网络控制协议可以随时打开或关闭。

应用注意事项:因为可能一开始就会使用需要花费大量时间的连接质量决定,所以当等待对方进行网络控制协议配置时应该避免使用固定的超时限制。当一个网络控制协议自动机达到已打开的状态时,PPP连接上就可以传送相应的网络层协议数据包。当接收到的任何所支持的网络层协议数据包时,只要相应的网络控制协议状态自动机未进入已打开状态,都将作静默丢弃处理。

应用注意事项:只要LCP协议状态自动机处于已打开的状态,任何接收到的不支持的协议数据包都将返回协议拒绝包(后面将提到)。所支持的协议数据包都将静默丢弃。在此阶段,连接上流通的包括LCP数据包、NCP数据包和网络层协议数据包。

终止连接

PPP连接可以随时终止。原因可能是载波丢失、认证失败、连接质量失败、超时计数器溢出,或者网络管理员关闭连接。LCP通过交换连接终止包来终止连接。当连接正在被终止的时候,PPP会通知网络层以便它采取相应的动作。

在交换过终止请求包后,将通知物理层断开以便使连接真正终止,尤其是在认证失败的时侯。发送连接终止请求包的一方应该等待接收到连接终止确认包之后或超时计数器计满之后再断开。收到连接终止确认包的一方应该等待对方首先断开,并且决不能断开直到至少有一个超时计时器在发送了终止连接确认包之后溢出。然后PPP应该进入连接死亡阶段。在此阶段所有接收到的非LCP数据包都将被静默丢弃。

应用注意事项:关闭时使用LCP就已足够。并不需要每一个NCP都发送终止连接数据包。相反的,一个NCP协议自动机关闭并不能关闭整个PPP连接,即使这个NCP协议自动机是当前唯一处于已打开状态。

协议应用

PPP协议是目前广域网上应用最广泛的协议之一,它的优点在于简单、具备用户验证能力、可以解决IP分配等。

家庭拨号上网就是通过PPP在用户端和运营商的接入服务器之间建立通信链路。 目前,宽带接入正在成为取代拨号上网的趋势,在宽带接入技术日新月异的今天,PPP也衍生出新的应用。典型的应用是在ADSL(非对称数据用户环线,Asymmetrical Digital Subscriber Loop)接入方式当中,PPP与其他的协议共同派生出了符合宽带接入要求的新的协议,如PPPOE(PPP over Ethernet),pppoa(PPP over ATM)。

利用以太网(Ethernet)资源,在以太网上运行PPP来进行用户认证接入的方式称为PPPOE。PPPOE即保护了用户方的以太网资源,又完成了ADSL的接入要求,是目前ADSL接入方式中应用最广泛的技术标准。

同样,在ATM(异步传输模式,Asynchronous Transfer Mode)网络上运行PPP协议来管理用户认证的方式称为PPPOA。它与PPPOE的原理相同,作用相同;不同的是它是在ATM网络上,而PPPOE是在以太网网络上运行,所以要分别适应ATM标准和以太网标准。

PPP协议的简单完整使它得到了广泛的应用,相信在未来的网络技术发展中,它还可以发挥更大的作用。

安全问题

安全问题是主要话题。PPP中的验证协议的交互操作很大程度上依靠于实现者。在文档中通篇使用SHOULD表明了这点。

例如,一旦验证失败,有些实现者并不终止链路。相反,实现者限制网络层的通信量的类型构造子网,这样反过来允许用户有机会更新秘密或者发邮件给网络管理员说明问题。对于验证失败没有重试机制。然而,LCP状态机可以在任何时候重新磋商验证协议,这样就允许了一个新的重试。建议任何用来为验证失败的计数器在成功验证前或者终止失败的链路前不要重置。

不要求验证是双向的或者在两个方向使用相同的协议。在任一个方向上使用不同的协议是完全可以接受的。当然,这依靠于在磋商时指定的协议。在实践中,在每个PPP服务器上有一个数据库,它联合验证信息的用户名字。不期望使用多个方法验证特殊的命名用户。这样使用户容易受到攻击。

作为代替的,对于每一个命名用户有一个准确的方法用来验证用户名。如果一个用户在不同的环境下需要使用不同的验证方法,那么应该采用截然不同的用户名,每一个准确代表一个验证方法。密码和其他的秘密应该保存在各自的端点以至于对它们的访问尽可能的受到限制。理想的,只能是为了完成验证而需要访问的过程可以访问秘密。

应该使用一种机制分发秘密,这种机制能够限制处理秘密实体的数目。理想的,没有通过验证的人不会再得到秘密的内容。使用SNMP安全协议可以实现这个目标,但是这样的机制不在这个规范的范围内。目前正在研究和试验其他的分发机制。SNMP安全文档很好的概括了对网络的威胁。

参考资料

1.PPP协议:关于在点到点链路上进行多协议包传送的建议·协议分析网

目录[+]