免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2495 | 回复: 0
打印 上一主题 下一主题

点到点协议-PPP [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-22 11:53 |只看该作者 |倒序浏览
1.1  PPP概述
  点到点协议(Point to Point Protocol,PPP)是IETF(Internet Engineering Task Force,因特网工程任务组)推出的点到点类型线路的数据链路层协议。它解决了SLIP中的问题,并成为正式的因特网标准。
  PPP协议在RFC 1661、RFC 1662和RFC 1663中进行了描述。
  PPP支持在各种物理类型的点到点串行线路上传输上层协议报文。PPP有很多丰富的可选特性,如支持多协议、提供可选的身份认证服务、可以以各种方式压缩数据、支持动态地址协商、支持多链路捆绑等等。这些丰富的选项增强了PPP的功能。同时,不论是异步拨号线路还是路由器之间的同步链路均可使用。因此,应用十分广泛。
       1  PPP的层次结构
   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过程
  从开始发起呼叫到最终通信完成后释放链路,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协商选项
特 性
解释
协议
身份验证
链路建立成功前要求提供正确的密码
PAP,CHAP
压缩
在带宽有限的链路提供对数据的压缩功能
Predictor,Stacker, MPPC
回叫
由被叫方重新呼叫原呼叫发起方
Cisco Callback,MS Callback
多链路
需要的时候进行多链路捆绑、负载均衡
MP


  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.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选项将提示用户输入用户名和口令而不需要按“回车”键(否则,一个会话过程将自动开始而不会给出用户名和口令的提示)。
点对点协议(PPP)为在点对点连接上传输多协议数据包提供了一个标准方法。PPP 最初设计是为两个对等节点之间的 IP 流量传输提供一种封装协议。在 TCP-IP 协议集中它是一种用来同步调制连接的数据链路层协议(OSI 模式中的第二层),替代了原来非标准的第二层协议,即 SLIP。除了 IP 以外 PPP 还可以携带其它协议,包括 DECnet 和 Novell 的 Internet 网包交换(IPX)。
  PPP 主要由以下几部分组成:
  封装:一种封装多协议数据报的方法。PPP 封装提供了不同网络层协议同时在同一链路传输的多路复用技术。PPP 封装精心设计,能保持对大多数常用硬件的兼容性。
  链路控制协议:PPP 提供的 LCP 功能全面,适用于大多数环境。LCP 用于就封装格式选项自动达成一致,处理数据包大小限制,探测环路链路和其他普通的配置错误,以及终止链路。LCP 提供的其他可选功能有:认证链路中对等单元的身份,决定链路功能正常或链路失败情况。
  网络控制协议:一种扩展链路控制协议,用于建立、配置、测试和管理数据链路连接。
  配置:使用链路控制协议的简单和自制机制。该机制也应用于其它控制协议,例如:网络控制协议(NCP)。
  为了建立点对点链路通信,PPP 链路的每一端,必须首先发送 LCP 包以便设定和测试数据链路。在链路建立,LCP 所需的可选功能被选定之后,PPP 必须发送 NCP 包以便选择和设定一个或更多的网络层协议。一旦每个被选择的网络层协议都被设定好了,来自每个网络层协议的数据报就能在链路上发送了。
  链路将保持通信设定不变,直到有 LCP 和 NCP 数据包关闭链路,或者是发生一些外部事件的时候(如,休止状态的定时器期满或者网络管理员干涉)。

协议结构
8
16
24
40 bits
Variable…
16-32 bits
Flag
Address
Control
Protocol
Information
FCS

  • Flag ― 表示帧的起始或结束,由二进制序列01111110构成。
  • Address ― 包括二进制序列11111111,标准广播地址(注意:PPP 不分配个人站地址)
  • Control ― 二进制序列00000011,要求用户数据传输采用无序帧。
  • Protocol ― 识别帧的 Information 字段封装的协议。
  • Information ― 0或更多八位字节,包含 Protocol 字段中指定的协议数据报。
  • FCS ― 帧校验序列(FCS)字段,通常为16位。PPP 的执行可以通过预先协议采用32位 FCS 来提高差错检测效果。

PPP帧格式:
帧格式和HDLC帧格式相似,如图1所示。二者主要区别:
PPP
是面向字符的,而HDLC是面向位的

图1
PPP
帧格式
可以看出,
PPP
帧的前3个字段和最后两个字段与HDLC的格式是一样的。标志字段F为0x7E(0x表示7E),但地址字段A和控制字段C都是固定不变的,分别为0xFF、0x03。
PPP
协议
不是面向比特的,因而所有的
PPP
帧长度都是整数个字节。
与HDLC不同的是多了2个字节的
协议
字段。
协议
字段不同,后面的信息字段类型就不同。如:
0x0021——信息字段是IP数据报
0xC021——信息字段是链路控制数据LCP
0x8021——信息字段是网络控制数据NCP
0xC023——信息字段是
安全
性认证PAP
0xC025——信息字段是LQR
0xC223——信息字段是
安全
性认证CHAP
当信息字段中出现和标志字段一样的比特0x7E时,就必须采取一些措施。因
PPP
协议
是面向字符型的,所以它不能采用HDLC所使用的零比特插入法,而是使用一种特殊的字符填充。具体的做法是将信息字段中出现的每一个0x7E字节转变成2字节序列(0x7D,0x5E)。若信息字段中出现一个0x7D的字节,则将其转变成2字节序列(0x7D,0x5D)。若信息字段中出现ASCII码的控制字符,则在该字符前面要加入一个0x7D字节。这样做的目的是防止这些表面上的ASCII码控制字符被错误地解释为控制字符。
PPP链路操作:
一、概述
为了通过点对点链路建立通信,
PPP
链路的每一端,必须首先发送LCPpackets以便设定和测试数据链路。在链路建立之后,peer才可以被认证。然后,
PPP
必须发送NCPpackets以便选择和设定一个或更多的网络层
协议
。一旦每个被选择的网络层
协议
都被设定好了,来自每个网络层
协议
的datagrams就能在连路上发送了。链路将保持通信设定不变,直到外在的LCP和NCP关闭链路,或者是发生一些外部事件的时候(休止状态的定时器期满或者网络
管理
员干涉)。
二、阶段划分框图
在设定、维持和终止点对点链路的过程里,
PPP
链路经过几个清楚的阶段,如框图所示。这张图并没有给出所有的状态转换。
三、链路死亡(物理连接不存在)
链路一定开始并结束于这个阶段。当一个外部事件(例如载波侦听或网络
管理
员设定)指出物理层已经准备就绪时,
PPP
将进入链路建立阶段。在这个阶段,LCP自动机器将处于初始状态,向链路建立阶段的转换将给LCP自动机器一个UP事件信号。
执行记录:
典型的,在与调制解调器断开之后,链路将自动返回这一阶段。在用硬件实现的链路里,这一阶段相当的短--仅够侦测设备的存在。
四、链路建立阶段
LCP用于交换配置信息包(Configurepackets),建立连接。一旦一个配置成功信息包(Configure-Ackpacket)被发送且被接收,就完成了交换,进入了LCP开启状态。所有的配置选项都假定使用默认值,除非被配置交换所改变。有一点要注意:只有不依赖于特别的网络层
协议
的配置选项才倍LCP配置。在网络层
协议
阶段,个别的网络层
协议
的配置由个别的网络控制
协议
(NCP)来处理。在这个阶段接收的任何非LCPpackets必须被silentlydiscarded(静静的丢弃)。收到LCPConfigure-Request(LCP配置要求)能使链路从网络层
协议
阶段或者认证阶段返回到链路建立阶段。
五、认证阶段
在一些链路上,在允许网络层
协议
packets交换之前,链路的一端可能需要peer去认证它。默认的,认证是不需要强制执行的。如果一次执行希望peer根据某一特定的认证
协议
来认证,那么它必须在链路建立阶段要求使用那个认证
协议
。应该尽可能在链路建立后立即进行认证。而,链路质量检查可以同时发生。在一次执行中,禁止因为交换链路质量检查packets而不确定地将认证向后推迟这一做法。在认证完成之前,禁止从认证阶段前进到网络层
协议
阶段。如果认证失败,认证者应该跃迁到链路终止阶段。
在这一阶段里,只有链路控制
协议
、认证
协议
,和链路质量监视
协议
的packets是被允许的。在该阶段里接收到的其他的packets必须被静静的丢弃。
执行记录:
一次执行中,仅仅是因为超时或者没有应答就造成认证的失败是不应该的。认证应该允许某种再传输,只有在若干次的认证尝试失败以后,不得已的时候,才进入链路终止阶段。在执行中,哪一方拒绝了另一方的认证,哪一方就要负责开始链路终止阶段。
六、网络层
协议
阶段
一旦
PPP
完成了前面的阶段,每一个网络层
协议
(例如IP,
IPX
,或AppleTalk)必须被适当的网络控制
协议
(NCP)分别设定。每个NCP可以随时被打开和关闭。
执行记录:
因为一次执行最初可能需要大力浪的时间用于链路质量检测,所以当等待peer设定NCP的时候,执行应该避免使用固定的timeouts。当一个NCP处于Opened状态时,
PPP
将携带相应的网络层
协议
packets。当相应的NCP不处于Opened状态时,任何接收到的被支持的网络层
协议
packets都将被静静的丢弃。
执行记录:
当LCP处于Opened状态时,任何不被该执行所支持的
协议
packets必须在Protocol-Reject里返回。只有支持的
协议
才被静静的丢弃。在这个阶段,链路通信量由LCP,NCP,和网络层
协议
packets的任意可能的联合组成。
七、链路终止阶段
PPP
可以在任意时间终止链路。引起链路终止的原因很多:载波丢失、认证失败、链路质量失败、空闲周期定时器期满、或者
管理
员关闭链路。LCP用交换Terminate(终止)packets的方法终止链路。当链路正被关闭时,
PPP
通知网络层
协议
,以便他们可以采取正确的行动。交换Terminate(终止)packets之后,执行应该通知物理层断开,以便强制链路终止,尤其当认证失败时。   Terminate-Request(终止-要求)的发送者,在收到Terminate-Ack(终止-允许)后,或者在重启计数器期满后,应该断开连接。收到Terminate-Request的一方,应该等待peer去切断,在发出Terminate-Request后,至少也要经过一个Restarttime(重启时间),才允许断开。
PPP
应该前进到链路死亡阶段。在该阶段收到的任何非LCPpackets,必须被静静的丢弃。
执行记录:
LCP关闭链路就足够了,不需要每一个NCP发送一个Terminatepackets。相反,一个NCP关闭却不足以引起
PPP
链路的终止,即使那个NCP是当前唯一一个处于Opened状态的NCP。




本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/20526/showart_405084.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP