目标:

1理解在广域网上数据的封装形式

2最初的SLIP协议

3PPP协议的组件

4理解并取证:PPP协议中LCP的工作原理(从数据帧的角度分析)

5理解并取证:PPP协议中NCP的工作原理(从数据帧角度分析)

6演示:思科路由器PPP链路的配置


理解在广域网上数据的封装形式

任可处于OSI第三层(网络层)的协议要穿越广域网,就必须封装相应的数据链路层协议。如下8.13所示,目标在于更方便的把上层数据进行传输,在网络层与物理层之间提供一种数据运载的方式,而这种数据运载的方式则以WAN协议进行体现,常见的WAN协议有SLIP、PPP、HDLC、X.25、Frame-rely、ATM等。

091137357.png

最初的SLIP协议

SLIP(Serial Line Internet Protocol串行线路网际协议)是早期用于点对点连接的WAN常见协议,其主要的作用是为使用TCP/IP协议的数据提供第二层的“帧封装”,它是PPP协议的前身,它的实现特别简单,而且易于应用,所以在某一个阶段,该协议深受WAN用户的喜爱。它的工作原理就是将IP数据封装成帧进行传输,第三层的IP数据向下传递给SLIP,然后SLIP将其转换在字节,并在链路上以每次发送一个字节的方式来传输这些IP数据,当面对传输的最后一个字节时,会加上一个SLIP END标记。所以在这里可以这样表达SLIP的作用,SLIP的唯一作用就是将IP数据封装成帧,进行传输。需要注意的是SLIP仅支持IP报文的成帧(封装),如果使用了非IP协议(如IPX/SPX),那么SLIP不能对其进行第二层的封装,SLIP不提供数据在链路上传输的基本安全性保障,不提供身份鉴别与数据加密,这将无法满足现今Internet的需求。而且SLIP没有提供数据传输过程中的长度标准、差错控制、传输管理、相关的压缩机制等,所以SLIP退出Internet的舞台,被PPP协议所代替是不可避免的事实。


理解PPP协议的组件

PPP(Point to Point Protocol点对点协议)是为了在点对点连接上传输多协议数据包提供的一种标准方法,它克服了SLIP的所有局限性,被作为一个完整的协议族进行开发。为什么这样说?因为PPP不只是单纯的支持对IP报文的成帧(封装),还可以对其它非IP报文如IPX报文进行封装,并且提供良好的差错控制、安全保障、传输消息管理等功能。PPP协议由两个主要的部件构成:LCP链路控制协议和NCP网络控制协议。它工作原理也是依赖这两个核心组件完成的。

 nLCP的作用:主要负责两个网络设备之间链路的创建、维护、安全鉴别、完成通信后的链路终止等。

nNCP的作用:主要负责将许多不同的第三层网络协议报文,如TCP/IPIPX/SPXNetBEUI等进行封装,NCP工作在LCP阶段过后进行操作。

除此之外,PPP协议还可以作为后期应用扩展的一种基础协议,比如现今流行在DSL上的PPPOE协议就是PPP协议的一个扩展。在本小节不作多述,现在理解了PPP的两个核心组件LCPNCP的定义,接下来我们需要详解LCPNCP的具体工作过程,并取证这个工作过程。


理解并取证:PPP协议中LCP的工作原理


如下图8.14所示为PPP协议的核心组件LCP的工作原理示意图,在这个环境中将详细描述每一步的工作原理,并对照每一步的原理取出网络设备实时运行时的“数据帧”配合本书惯用的取证法来证实原理。

091355216.png

第一步:路由器R1作为发起PPP会话的初始设备,向路由器R2发出Configure-Request配置请求消息,也是发起方初始化LCP配置的第一步,路由器R1上会产生如下图8.15所示数据帧,可以看出处理PPP的LCP阶段。分析PPP协议的帧体部分,Address:0xff表示数据帧的“目的地址”字段,但是PPP是用于点对点链路的协议,一个链路上就只有两个通信点,所以这个字段在这里没有任何实在的意义,总是被设置为0xff,实际上就是二进制的11111111和十进制的255,表示广播。Control:0x03表示“控制字段”,0x03表示用于多种控制目的,在PPP中一般都是0x03。Protocol:LinkControl Protocol(0xc021)表示PPP数据帧中的“协议字段”,其中0xc021指示PPP协议正在使用LCP协议。常见的协议值如下表8.1所示。然后在PPPLink Control Protocol部分中有三个字段,分别是Code(代码)、Identifier(标识)、Length(长度),其中Code字段的值为0x01表示正在使用LCP中的Configure-Request配置请求消息,常见的代码值如下表8.2所示。Identifier表示“标识符字段”,用于匹配一个请求消息与回应消息的标签字段。使用一个唯一的数据表示,该环境是0x01,换而言之,Configure-Request配置请求消息与Configure-ACK配置确认回应消息中它们的Identifier值应该一样,这表示它们是一对完整的请求应答会话。Length表示长度字段,指示LCP数据帧中控制帧的长度,因为数据字段是可变的,以字节为单位,这里是10个字节的长度。Options为“选项字段”,其中有6个字节的Magic number值,该值用于检测环回链路和连接中的异常。

091619333.png

091825843.png

091941459.png

091941934.png

第二步:响应设备路由器R2收到路由器R1发来的Configure-Request配置请求消息后,处理LCP的请求并回送一个Configure-ACK配置确认消息,来完成LCP的配置,该回应消息的数据帧如下图8.16所示,该数据帧中各个字段的作用与意义在第一步中已做出详细的描述,所以在这里不再得复,但是需要注意是各个字段值的细小变化,这些值所对应的意义请参看表8.1和表8.2.


092130481.png

第三步:事实上在第一步和第二步完成后,LCP的初始配置阶段就完成了。在第三步中PPP的对等体,需要完成的是确定是否启用了安全机制,如果启动了安全机制,就进行安全鉴别和安全协商,然后是NCP对不同的三层协议进行封装,而本小节主要以讲解LCP的过程为重点,所以不在此处对LCP的安全鉴别和NCP的封装做详细描述,关于LCP的安全鉴别的详细过程请参看本章的“理解PPP的安全认证”部分,而关于NCP的具体封装过程请参看本书的“理解并取证:PPP协议中NCP的工作原理”部分。

spacer.gif注意:在这里的第三步,实际上是由多个会话过程完成,并且以LCP负责的安全鉴别和NCP负责的不同协议封装,但是笔者在图8.14的环境中描述关于LCP的工作原理中将多个步骤合并到一个步骤(也就是第三步),这是为了一种便于表达的方式。因为LCP还有其它的过程,而这些过程又必须在第三步以后才能进行,所以再次提示必须要有第三步的过程,才能更好的过渡到后面的过程,但事实上第三步又由后面小节所述的多个步骤来完成。


第四步:路由器R2会发起LCP的Echo-Request响应请求消息,用于链路的环回测试,其消息的数据帧如下图8.17所示,注意该消息是周期性间隔发送,起到链路测试的作用。

092401830.png

第五步:路由器R1收到R2发来的Echo-Request响应请求消息后,会回送Echo-Reply应答消息给路由器R2,来证实链路操作,该消息的数据帧如下8.18所示。

092509300.png

第六步:PPP链路开始正式的数据收发。


第七步:当完成数据收发后,路由器R2会发出LCP的Terminate-Request链路终止请求,路由器R1如果确定终止链路则会发出Terminate-ACK确认终止,整个LCP的会话切断。关于Terminate-Request链路终止请求数据帧如下图8.19所示。

092620112.png

理解并取证:PPP协议中NCP的工作原理

上一小节描述了PPP的LCP的工作过程,在这一小节中主要以描述PPP的NCP的工作原理为重点。如下图8.20中NCP的工作原理所示,把NCP的工作过程分为5个步骤,并对照每一步的原理取出网络设备实时运行时的“数据帧”配合本书惯用的取证法来证实原理。

092803664.png

第一步:这步事实上并不是NCP的工作过程,而是前一小节所述的LCP的协商过程,而且是由多个步骤组成,由于NCP必须是工作在LCP阶段之后,所以为了不让读者发生歧义,误认为NCP是一个独立协商的过程,在此外特别使用一个LCP的协步骤来申明NCP发生在LCP阶段之后。


第二步:这个步骤是NCP协商的开始,路由器R1发起NCPConfigure-Request配置请求消息。为什么要以IPCP Configure-Request形式表现,而不是NCP Configure-Request来体现?IPCP表示NCPIP的封装形式,因为NCP可以封装不同的第三层协议,如果是对IPX协议进行封装那么NCP的表现形式将是IPXCPNCPConfigure-Request配置请求消息数据帧如下图8.21所示,从该数据帧中可以明确看到PPP处于NCP阶段,以及发送的是Configure-Request配置请求消息。需要注意:该数据帧的“Options(选项)”字段中携带了IP address:192.168.3.1的三层信息,指示路由器R1使用该地址在PPP链路上发送NCP的配置请求消息。

092925622.png

第三步:路由器R2收到路由器R1发来的NCP配置请求消息后,会回应给路由器R1一个关于NCPConfigure-ACK配置确认消息,以完成NCP过程的协商。该消息的具体数据帧如下8.22所示。

093019574.png


第四步:正式开始收发IP数据。


第五步:当路由器R1完成数据传输后,会向路由器R2NCPIPCP Terminate-Request的IP链路终止请求,此时的R2应该还会回应一个IPCP Terminate-ACK终止IP链路的确认消息。


注意:如果不需要NCP的连接,可以通过IPCP Terminate-Request和IPCP Terminate-ACK来终止NCP阶段。但是LCP链路将仍然保持打开,因为可能还有其它类型的数据需要传输,而NCP是为不同的第三层网络协议各自建立封装过程。


演示:思科路由器PPP链路的配置


演示目标:配置思科路由器上点对点的PPP链路

演示环境:如下图8.23所示。

093151548.png

演示工具:两台具备同步串行接口的思科路由器及相关连接介质。

演示背景:在实验室使用一根同步串行线缆(如:V.35线缆),将两台路由器进行点对点的连接,注意区分线缆接头上的DCE标记端。在该演示环境中,DCE接头被连接到路由器R1s1/0接口上,那么该接口就需要配置时钟频率以为并行串口提供时钟同步,而路由器R2就是点对点链路上的DTE端。

注意:在图8.23中所使用PPP专线链路,就是采取了将DSU/CSU集成到设备接口上的方案,所以不需要再连接一个独立的DSU/CSU;关于如何确定链路上的DTEDCE,请参看本章前面的“怎么确定专线的两个连接点上谁是DTE;谁是DCE?”部分内容。


演示步骤


第一步:配置PPP链路上的路由器R1

路由器R1的配置

R1#configureterminal

从特权模式进入全局配置模式。

R1(config)#interface s1/0

从全局配置模式进入路由器R1S1/0接口配置模式。

R1(config-if)#encapsulation ppp

为该接口封装PPP协议。

R1(config-if)clock rate 56000

为该接口配置时钟频率,以便为整个PPP链路提供时钟同步。

R1(config-if)#ip address 192.168.3.1255.255.255.252

为该接口配置IP地址。

R1(config-if)#no shutdown

激活该接口。


路由器R2的配置:

R2#configure terminal

R2(config)#interface s1/0

R2(config-if)#encapsulation ppp

R2(config-if)#ip address 192.168.3.2255.255.255.252

R2(config-if)#no shutdown

注意:路由器R2的配置与R1的配置基本相同,只是IP地址的差异,这里不再对指令作重复说明,用户在配置PPP链路时,值得强调的是必须通过连接线缆成功的识别链路的DCE端和DTE端,而且必须为链路的DCE端提供时钟频率,否则链路将无法正常工作。


第二步:在完成PPP的配置后,在R1上可以通过指令show interface s1/0来查看S1/0接口的状态,如下图8.24所示,接口状态为UP,指示运行良好。然后再检查与路由器R2的连通性,在R1上ping 路由器R2(192.168.3.2),如下图8.25所示,成功通信。

093329242.png

第三步:当完成上述的配置后,可以通过路由器的debug过程,查看两台路由器PPP的LCP与NCP协商过程,在路由器R1或者R2上执行debug ppp negotiation指示,启动PPP的邻居协商debug过程。如下图8.26所示,为LCP的Configuration Request与ACK的协商过程,并指示LCP最终的状态为Open。下图8.27指示基于IP的NCP过程中的阶段,关于这两个阶段的具体细节请参看本书前面对其工作原理描述部分。


R2#debug ppp negotiation

093502983.png

093502323.png

注意:使用debug 指令调试PPP的协商状态时,必须在激活接口前开启debug ppp negotiation指令,如果是待接口都已经成功启动后再开启debug指令,将无法获得完整的协商过程,因为PPP的协商过程是在链路初始化时完成的。如果你的链路已经成功启动,那么请在执行debugppp negotiation前关闭路由器的相应接口,并重新启动该接口,以促使设备重新初始化PPP的协商过程。