PPP拨号流程

1、PPP概述
1.1 PPP(点对点协议)概述
PPP(点到点协议)在拨号过程中用于MS和PC间数据交互、协商。在拨号流程的初期首先开启的就是PC和MS直接的PPP过程,在拨号成功后,还需要依靠PPP协议对IP包进行封装传输数据。
PPP是数据链路层的协议,提供了一种在点对点的链路上封装多协议数据报(IP、IPX和AppleTalk)的标准方法。它不仅能支持IP地址的动态分配和管理;同步(面向位的同步数据块的传送)或异步(起始位+数据位+奇偶校验位+停止位)物理层的传输;网络层协议的复用;链路的配置、质量检测和纠错,而且还支持多种配置参数选项的协商。

1.2 PPP协议的三组件
ISO参考模型共分七层,自下而上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。通常我们会依据协议所完成的功能将它与这七层进行对照,PPP协议就属于数据链路层。

PPP协议主要包括三部分:LCP(Link Control Protocol)链路控制协议、NCP(Network Control Protocol)和PPP的扩展协议(如Multilink Protocol)。随着网络技术的发展,网络带宽不再是瓶颈,所以PPP扩展协议的应用越来越少,因此往往人们在叙述PPP协议时经常会忘记它的存在。而且大部分网络教材上会将PPP的认证作为PPP协议的一个主要部分,实际上这是一个错误概念的引导。PPP协议默认是不进行认证配置参数选项的协商,它只作为一个可选的参数,当点对点链路的两端需要进行认证时才需配置。当然在实际应用中这个过程是不可忽略的,例如我们使用计算机上网时,需要通过PPP协议与NAS设备互连,在整个协议的协商过程中,我们需要输入用户名和密码。因此当别人说PPP协议主要包括LCP、认证和NCP协议三个部分时,不要认为他的说法有误,而只是不够准确罢了。
LCP链路控制协议用来协商PPP协议的一些配置参数选项;处理不同大小的数据帧;检测链路环路、一些链路的错误;终止一条链路。
NCP协议的数据报文是在网络层协议阶段被交换的,在这个阶段所需的一些配置参数选项协商完后,就可以进行网络层的通信,也即是在点对点的链路上可以开始传送网络层的数据报文了,最常用的NCP协议为IPCP协议,主要是用来通信双方的网络层地址。

1.3 PPP状态转移
1)发起
数据通信设备的两端如果希望通过PPP协议建立点对点的通信,无论哪一端的设备都需要发送LCP数据报文来配置链路(测试链路)。
2)建立至可用
一旦LCP得配置参数选项协商完成后,通信的双方就会根据LCP配置请求报文中所协商的认证配置参数选项来决定链路两端设备所采用的认证方式。协议缺省情况下双方是不进行认证的,而直接进入到NCP配置参数选项的协商,直至所经历的几个配置过程全部完成后,点对点的双方就可以开始通过已建立好的链路进行网络层数据报文的传送了,整个链路就处于可用状态。实际情况中,都会进行认证。
3)拆除
当任何一端受到LCP或NCP得链路关闭报文时(一般而言协议是不要求NCP有关闭链路的能力的,因此通常情况下关闭链路的数据报文是在LCP协商阶段或应用程序会话阶段发出的);物理层无法检测到载波或管理人员对该链路进行关闭操作,都会将该条链路断开,从而终止PPP会话。

2、PPP数据帧封装格式
2.1 PPP数据帧封装格式
PPP数据帧的封装格式如下图所示:

1)每个PPP数据帧都是以一个标志字节起始和结束的,该字节填充0x7E(协议缺省);
2)紧接着起始标志字节后面的是地址域,占1个字节,该字节填充为0xFF(协议缺省);
3)地址域后是控制域,占1个字节,该字节填充为0x03(协议缺省);
4)就PPP协议而言,最值得关注的应该是它的协议域和信息域。协议域用来区分PPP数据帧中信息域中所承载的报文的内容,占2个字节。协议域的内容必须依据ISO 3309的地址扩展机制所给出的规定。该机制规定协议域所填充的内容必须为奇数,也即是要求低字节的最低位为“1”,高字节的最低位为“0”。协议域的具体的取值如下表所示:


协议域类型
说明
ISO标准
0x0*** - 0x3***
信息域中承载的是网络层的数据报文
0x4*** - 0x7***
信息域中承载的是与NCP无关的低整流量
0x8*** - 0xb***
信息域中承载的是网络控制协议(NCP)的数据报文
0xc*** - 0xf***
信息域中承载的是链路控制协议(LCP)的数据报文
最典型的几种
取值
【PPP拨号流程】0xc021
信息域中承载的是链路控制协议(LCP)的数据报文
0xc023
信息域中承载的是PAP协议的认证报文
0xc223
信息域中承载的是CHAP协议的认证报文
0x8021
信息域中承载的是网络控制协议(NCP)的数据报文
0x0021
信息域中承载的是IP数据报文
5)信息域的最大程度不能超过1500字节(包括填充域的内容)。1500字节等于PPP协议中配置参数选项MRU(Maximum Receive Unit)的缺省值。信息域如果不足1500字节时可被填充,但不是必须得,如果填充则需通信双方的两端能辨认出有用和无用的信息方可正常通信。
6)CRC校验域主要是对PPP数据帧传输的正确性进行检测的。

2.2 LCP数据报文的封装方式
2.2.1 LCP数据报文的封装方式
LCP数据报文是在链路建立阶段被交换的,它作为净载荷被封装在PPP数据帧的信息域中,此时PPP数据帧的协议域固定填充为0xC0 21,在整个链路建立阶段的整个过程中信息域的内容是在变化的,它包括很多类型的报文,所以这些报文也要通过相应的字段来区分,LCP数据报文的一般封装方式如下图所示:

1)代码域,占1个字节,主要用来标志LCP数据报文的类型。如下表所示:

2)标识域,占1个字节,主要用来匹配请求和相应报文。一般而言在进入链路建立阶段时,通信双方无论哪一端都会连续的发送几个配置请求报文(Config-Req报文),而这个几个请求报文的数据域可能是完全一样的,而仅仅是标识域不同罢了。当对端收到该配置报文后,无论使用哪种报文来回应对方,都必须要求回应报文中的ID要与接收报文中的ID一致。当通信设备收到回应后就可以将回应与发送时的进行比较来决定下一步的操作。
3)长度域,占2个字节。长度域=(代码域+标识域+长度域+数据域)。其所示字节数之外的字节将被当做填充字节而忽略掉,而且该域内容不能超过MRU的值。
4)数据域,主要填充一些配置参数选项。

2.2.2 LCP数据报文的分类
从上面可以看出,一共包括12种LCP数据报文,可以依据格报文的功能又将其具体细化为以下三类:
1)链路配置报文,主要用来建立和配置一条链路。包括Config-Request、Config-Ack、Config-Nak、Config-Reject四种报文;
2)链路终止报文,主要用来终止一条链路。包括Terminate-Request、Terminate-Ack两种报文;
3)链路维护报文,主要 用来维护和调试链路。其余所有的报文。

2.2.3 LCP链路配置报文
LCP链路配置报文与链路终止报文、链路维护报文有明显区别,它主要是用来协商链路的配置参数选项的,因此这种报文的数据域还要携带许多被配置参数选项。配置参数选项的格式如下图所示:

当通信双方建立链路时,无论哪一方都需要发送Config-Request报文并携带每一端自己所希望协商的配置参数选项。下表为一些可选的配置参数选项:
类型值
参数选项
类型值
参数选项
0x00
Reserved
0x05
Magic-Number
0x01
Maximum-Recieve-Unit
0x06
CBCP
0x02
Async-Control-Character-Map
0x07
Protocol-Field-Compress
0x03
Authentication-Protocol
0x08
Address-and-Control-Field-Compress
0x04
Quality-Protocol
0x0D
Multilink-Protocol
配置参数选项的协商过程中,可能发生两种情况:
1)接收方无法识别发送方所发送的配置参数类型
接收方不识别类型域中填充的内容,这时接收方就会给发送方发送一个Config-Reject消息以告诉对方自己不支持它所发送的参数类型,此时Config-Reject报文中填充自己不支持的参数选项。发送方收到Config-Reject消息后就可以去掉那些不被接收方支持的配置参数,重新组包发送Config-Request报文给接收方,直到收到接收方发来的Config-Ack消息就算协商成功。

2)接收方识别发送方所发送的配置参数类型,但不认可其参数值
接收方识别发送方所发送的配置参数类型,但不认可其参数值,这时接收方就会给发送方发送一个Config-Nak消息,该报文中填充自己所能够支持的参数值,发送方在受到Config-Nak消息后就可以从中获得接收方所支持的参数值,重新组包发送Config-Request报文给接收方,直到收到接收方发来的Config-Ack消息就算协商成功。

2.3 认证协议
PPP协议提供了可选的认证配置参数选项,缺省情况下点对点通信时的两端是不进行认证的。认证方式是在LCP阶段协商确认的,在LCP链路配置报文中,不可一次携带多种认证方式,必须二者择其一(PAP/CHAP)。
PAP(Password Authentication Protocol密码认证协议)认证时二次握手,直接在网络上传送明文的用户名和密码,因此该协议安全性不高。

CHAP(Challenge Hand Authentication Protocol挑战性握手认证协议)认证是三次握手,只在网络上传送验证方和被验证方的主机名,并不传送密码,且由验证方主动发起。因此相比之下CHAP比PAP更安全。

2.4 NCP协议
NCP协议的数据报文是在网络侧协议阶段被交换的,在这个阶段所需的一些配置参数选项协商完成后,就可以进行网络层的通信。NCP协议主要包括IPCP、IPXCP等,最常见的就是IPCP协议。
IPCP控制协议主要是完成IP网络层协议通信所需配置参数选项的协商。IPCP在运行的过程中,主要是完成点对点通信设备的两端动态的协商IP地址。IPCP的数据报文同LCP的数据报文类似,只不过LCP协议是在链路建立阶段协商配置参数选项,IPCP是在网络层协议阶段协商配置参数选项。在实际的数据报文交换过程中IPCP数据报文仅涉及以下几种:Config-Request、Config-Ack、Config-Nak和Config-Reject。
根据两端设备的配置选项可将IPCP的协商过程分为“静态”和“动态”。静态、动态是相对的概念,两者的区分是在于互连设备IP地址的获取过程。
静态协商,即不协商,点对点的通信设备两端在PPP协商之前已配置好了IP地址,所以无须在网络层协议阶段协商IP地址,而双方唯一要做的就是告诉对方自身的IP地址,最理想的情况如下图所示:

动态协商,即一端配置为动态获取IP地址,另一端通过手动方式配置IP地址,且允许给对端分配IP地址,最理想的情况如下图所示:


IPCP阶段完成后,PPP链路即正常建立,可进行点对点通信。



















3、PPP拨号协商流程
3.1 PPP拨号协商流程图
PPP拨号的过程,就是为了建立一个PC到网络侧的通路。从上图可以看出,单板所做的事情就是建立RM、UM的通路。RM是PC与单板之间接口的名称,UM是单板与网络侧接口的名称。拨号过程需要建立的通路如下:

拨号的过程大致为PC下发拨号命令后,则要求建立RM通路,这时开始PPP协商过程。LCP协商过程完成后,进入IPCP协商,于是发起建立UM通路的命令,即激活PDP请求。UM通路建立后就可以获得IP地址以完成RM通路的建立,这样一个过程就称为SM。

3.2 SM概述
SM(会话管理程序)是3GPP协议中连接管理层(Connection Management)的一个主要的组成部分。位于移动性管理(Mobile Management)和用户面之间,使用GMM子层提供的无应答数据传送服务,向高层----用户面提供连接管理服务。它一方面完成核心网络SGSN到GGSN之间的隧道建立、修改和释放的控制功能,另一方面完成SGSN和RNC/MS之间无线接入承载(Radio Access Bearer)建立、修改和释放的控制。其主要作用是支持终端对PDP上下文的处理,主要包括PDP上下文的激活、解除和修改。会话管理程序只与核心网和MS有关系,与基站部分并无直接关系。
在拨号过程的PPP流程进行到一定阶段(通常是进入IPCP阶段后),就会发起属于SM程序的PDP上下文激活程序。
当移动台附着到网络后,如果它想和外部数据网(如Internet)进行通信(如发送Email和浏览网页),就必须执行一个PDP上下文激活的程序。所谓PDP上下文激活就是指移动台要求网络为它分配一个PDP地址(通常称为IP地址),使它成为IP网络的一部分。直到数据传送完毕后再解除该地址。
每一个PDP地址都对应有一个PDP上下文,每个PDP上下文都由PDP状态及相关信息来描述,PDP上下文存在于MS、SGSN和GGSN中。
相关术语
1)PDP状态:
它表示PDP地址是否激活且能进行数据传输。有两种状态:激活和未激活。
2)PDP CONTEXT:
PDP上下文,包括的内容有:PDP类型、PDP地址、请求的APN、请求的Qos等。
3)PDP地址:
通常是IP地址,包括静态地址和动态地址两种。其中静态地址是归属网络运营商永久的给移动台分配的PDP地址,需要用户提起和运营商签约;动态地址是由GGSN来分配和释放的,GGSN拥有一个合法的IP地址库,在连接时采用动态按需分配方式临时分配给用户,这样可以节省所需的合法IP的数量。
4)APN:Access Point Name
在GGSN中用于标识一个指定的外部网和一种服务的ISP,在SGSN中可根据APN通过DNS解析得到与此APN对应的GGSN地址。
5)PDP地址匹配和APN选择
一个用户可以使用多个PDP地址和APN,在激活一个会话时,用户请求的PDP地址和APN必须满足签约数据的要求。根据请求的地址和APN找到满足此要求的签约PDP CONTEXT数据的过程称为PDP地址匹配和APN选择。
6)QoS协商:
会话管理在建立分组传输路由的同时,也必须指定此路由满足的QoS,会话管理过程在MS、RNC、SGSN、GGSN之间进行QoS协商,使各节点提供的服务质量保持一致。QoS协商的算法是在签约的QOS、SGSN能提供的最大QOS和其它节点满足的QOS之间取最小值。

    推荐阅读