全部博文(776)
分类: LINUX
2010-03-04 23:47:23
PPP协议格式分析
转载注明地址:%5Fresplendent/blog/item/f92a6dbf5cb83b0f19d81fd5.html
利用AT指令无线模块连接上了中国移动的GPRS的WAP网关之后,接着是进行PPP连接。GPRS拨号采用的是点对点协议(Point to Point Protocol, PPP),该协议是是TCP/IP网络协议包的一个成员。其主要作用是无线模块通过拨号连接上终端服务器后,由PPP取得一个临时的IP地址,使该设备成为网络上的一个节点。只要PPP链路顺利建立成功,获得临时的IP地址,则即可在其上嵌入IP等数据包进行数据传送,完成无线模块的无线网络连接。
PPP协议(Point-to-Point Protocol点到点协议)是为在同等单元之间传输数据包这样的简单链路设计的链路层协议。这种链路提供全双工操作,并按照顺序传递数据包。其目的主要是用来通过拨号或专线方式建立点对点连接发送数据,使其成为各种主机、网桥和路由器之间简单连接的一种共通的解决方案。
PPP协议中提供了一整套方案来解决链路建立、维护、拆除、上层协议协商、认证等问题。PPP协议包含了以下几个部分:
.链路控制协议LCP (Link Control Protocol):LCP负责创建,维护或终止一次物理连接;
.网络控制协议NCP (Network Control Protocol):NCP是一族协议,负责解决物理连接上运行什么网络协议,以及解决上层网络协议发生的问题;
.认证协议,PPP协议支持两种验证协议:口令验证协议PAP (Password Authentication Protocol)和挑战握手验证协议CHAP (Challenge-Handshake Authentication Protocol)。验证过程在PPP协议中为可选项,在连接建立后进行连接者身份验证的目的是为了防止有人在未经授权的情况下成功连接,从而导致泄密。PAP是一种简单的明文验证方式,安全性较差。而CHAP是对PAP的改进,是一种加密的验证方式,使用挑战口令以哈希算法对口令进行加密,用三次握手的方法周期性地检验对端的节点,优点在于密钥不在网络中传送,不会被窃听。本课题中采用的是挑战握手验证协议CHAP.
PPP连接的建立主要经过三个阶段,分别是LCP连接协商、CHAP密码认证以及CP网络层协议配置。
第一阶段:LCP连接协商
在这个阶段,将对基本的通讯方式进行选择。链路两端设备通过LCP向对方发送LCP数据报配置请求(Configure-Request),对方同意接收后双方互发LCP数据报配置应答(Configure-Ack )。一旦一个配置成功信息包(Configure-Ack packet)被发送且被接收,就完成了交换,进入LCP开启状态。
第二阶段:CHAP密码认证
在这个阶段,客户端会将自己的身份发送给远端的接入服务器。服务器向用户发PPP CHAP安全性认证挑战,接着用户给服务器送PPP CHAP安全性认证响应,服务器再向用户发送 PPP CHAP安全性认证成功。
该阶段使用一种安全验证方式避免第三方窃取数据或冒充远程客户接管与客户端的连接。在认证完成之前,禁止从认证阶段前进到网络层协议阶段。如果认证失败,认证者应该跃迁到链路终止阶段。
第三阶段:NCP网络层协议配置
认证阶段完成之后,PPP将调用在链路创建阶段(阶段一)选定的各种网络控制协议(NCP )。选定的NCP解决PPP链路之上的高层协议问题,例如,在该阶段IP控制协议(IPCP)可以向拨入用户分配动态IP地址。在这个阶段,先是用户向服务器发送PPP NCP网络控制数据包(网络协议配置,要求服务器提供IP地址和DNS,NBNS信息),接着服务器向用户发送配置请求PPP NCP网络控制数据包(为用户分配IP地址),用户向服务器发送配置应答PPP NCP网络控制数据包(接受所分配的IP地址),最后服务器向用户发送配置应答PPP NCP网络控制数据包(同意用户的IP地址和DNS地址)。
这样,经过三个阶段以后,一条完整的PPP链路就建立起来了,用户即可向服务器
发送IP数据包。
PPP协议为串行链路上传输的数据报定义了一种封装方法,它基于高层数据链路控
制(HDLC)标准,PPP协议帧的格式根据RFC1661协议定义,帧格式如表所示
表4.2
协议字段其值代表其后的数据字段所属的网络层协议(RFC 1340定义),如:
0x0021— IP OP协议)
OxC021— LCP(链路控制协议)
0x8021— NCP(网络控制协议)
OxC023— PAP(密码认证协议Password Authentication Protocol)
OxC025— LQR(链路质量报告Link Quality Report)
OxC223— CHAP(挑战握手认证协议Challenge Handshake Authentication Protocol)
PPP帧以标志字段Ox7E开始和结束;信息字段包含协议字段中指定协议的数据报,
长度为<<1500字节;FCS字段为两个字节,是整个帧的循环冗余校验码,用来检测传输
中可能出现的数据错误。
下面对PPP建立的三个阶段:LCP, CHAP和NCP的帧格式分别进行分析:
(1) LCP协议帧的格式根据RFC 1570协议定义,帧格式如表4.3所示[19] .
表4.3 LCP协议帧格式
其中:Code—代码,表示不同的PDU:
0x01— Configure-req (4B+所有选项长度)
0x02— Configure-Ack (4B+所有选项长度)
0x03— Configure-Nak (4B+所有选项长度)
004-Configure-Reject (4B+所有选项长度)
0x05— Terminate-req (4B+额外数据)
0x06— Terminate-Ack (4B+额外数据)
007-Code-Reject (4B+Reject帧长)
008-Protocol-Reject (6B+Reject帧长)
0x09— Echo-req(8B+额外数据)
WA-Echo-Reply (8B+额外数据)
OxOB— Discard-req (8B+额外数据)
WC -Identification (8B+额外数据)
OxOD— Time-Remaining(12B+额外数据)
Identifie一标识符,接受和发送的标识符是匹配的
Length— LCP长度,包括代码、标识符、长度、选项和数据
Option选项—协商的内容,格式为(RFC 1340定义),如下表所示
(2) CHAP协议帧的格式根据RFC 1994协议定义,帧格式如下表所示
Code Identifier Length Data
1B 1B 2B 可变
其中:Code—代码,表示不同的PDU
0x01 challenge质询(合法性)
0x02 --response响应
0x03— success成功
0x04— failure失败
Identifie一标识符,质询、响应和成功的标识符是匹配的
Length— CHAP长度,包括代码、标识符、长度和数据
(3) NCP协议帧的格式根据RFC1332协议定义,帧格式下所示:
Code Identifier Length Option Data
1B 1B 2B 可变 可变
其中:Code—代码,表示不同的PDU
0x01— Configure-req
0x02— Configure-Ack
0x03— Configure-Nak
0x04— Configure-Reject
0x05— Terminate-req
0x06一 Terminate-Ack
0x07— Code-Reject
Identifie一标识符,接受和发送的标识符是匹配的
Length— LCP长度,包括代码、标识符、长度、选项和数据
Option选项—协商的内容,格式为(由RFC 1332定义),如表