您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 项目/工程管理 > PPP实现GPRS的上网认证过程
在GPRS模块上网的过程中,主要是经过PPP协议中的三种协议,分别为LCP(LinkControlProtocol)协议,PAP(Pass-wordAuthenticationProtocol)认证协议以及IPCP(InternetProtocolControlProtocol)协议LCP部分主要协商下一步的密码认证协议,可选择PAP方式或CHAP方式,我们根据ISP要求选择PAP方式。PAP部分主要是向ISP发送密码进行认证。密码认证通过以后进入IPCP,完成客户端请求IP及ISP端分发IP的过程。其实现过程图如图2所示在认证过程中,MCU、GPRS模块及ISP都需要发送PPP格式的数据包来完成协商过程该数据包为16进制,多数情况下其对应ASCII码并无实际意义PPP数据帧的结构如表1所示。对于表1所示的协议部分有如下几种形式的描述:对于表1所示的信息位包括了链路配置包标志,描述如下:以上3个表所示的内容是分析PPP协议各种类型数据包的基本概念。在解析PPP数据包中需要注意的另外一个事项是,如果字符中包括了Ox7D,则表示该字符后面的字符需要转义。转义方式是后一个字符与0x20进行异或运算得出的16进制数据作为真实数据比如一个数据包包括了......Ox7D0x23......,则真实表示的为Ox03a(为方便表示下文所示数据均为转义后的数据)2.实际协商过程分析(1)LCP协商过程首先设置模块的初始化参数及工作参数向模块发送如下AT指令:1)AT+CGCLASS=B置为“B”模式2)AT+CGDCONT=1,IP;CMNET设置APN3)AT+CGATT=1,使GPRS模块附着在网络上然后发送指令ATD*99***1#建立拨号过程,模块会返回16进制的一些数据。我们要据此与模块进行协商。首先返回数据包(16进制):7EFF03C02101010016010405DC020600000000070208020304CO2326B47E数据包含义:7E(PPP包头)FF03C021(LCP协议)01(代码)01(标识符)0016(长度)01(类型)04(长度)05DC(协商内容Maximum-Receive-Unit)02(类型)06(长度)00000000(协商内容)07(类型协议压缩协商)02(长度)08(类型,地址控制域压缩协商)02(长度)03(类型)04(长度)C023(内容表示请求PAP认证)26B4(FCS,校验和)7E(PPP包尾)。此模块在进行LCP协商阶段是比较友好的,主动提出了PAP认证方式,可直接返回对它请求的同意也可以提出些新的申请,实际操作中发送同意请求为:7EFF03C02102010016010405DC020600000000070208020304C023D0477E。至此LCP认证阶段已经结束(2)PAP认证过程因为协商同意PAP密码认证方式故进入PAP过程,需要发送用户名和密码至ISP.请求格式为7EC0230101000600003B3F7E该包在0006后的0000分别代表用户名和密码,都为空此时由于需要与ISP进行认证,需要等一段时间经过判断,服务器通过密码认证,返回:7EC0237D227D217D207D2D7D2857656C636F6D65214EBC7E7EC0230201000D0857656C636F6D65214EBC7E其中的16进制字符57656C636F6D6521转为ASCII码为Welcome!.同时服务器发送IPCP请求数据包:7E80210101000A0306C0A86F6FCD497E进入IPCP协商过程(3)IPCP协商过程客户端部分此时需要请求ISP分发IP请求为:7E8021010600160306000000008106000000008306000000000ACF7E030681068306后的四个00分别代表客户端IP,第一DNS主机地址,第二DNS主机地址,这3个部分全部为00表示内容为空,是请求ISP分发IP到客户端。服务器得到请求后分发IP数据包为:7E8021030600160306OA4A0C148106D38812AB8306D38814CB6B6B7E0A4A0C14表示为十进制的010.074.012.020,由于中国移动通信规定GPRS拨号上网的用户分发的IP均为内部IP,非外部IP,所以IP都是以10.***开头的。8106后面的D38812AB表示211.136.18171,是第一DNS主机的IP地址。8306后面的D38814CB表示211.136.20.203,是第二DNS主机的IP地址此后我们需要对分发下的几个IP辨认识别,然后再次请求请求中包含这3个分发IP,代表接受分发结果。数据包为7E80210107001603060A4A4C838106038812AB8306D38814CBF2C17E此后清求得到ISP认可,链路层PPP握手过程全部结束进入网络阶段。此后所有发往GGSN网络的包含IP的数据包都会透明的传给所对应的IP地址。以上既是对PPP协商过程的分析,只要注意上面所提及的每步的注意事项及含义,即可迅速快捷的建立数据链路层.三、网络层及传输层的实现网络层和传输层虽然属于IP及UDP协议实现的功能,但此两者都是建立在数据链路层基础上的,因此在发送UDP/IP包的时候仍然不能摆脱对PPP协议的依赖。由PPP封装的UDP/IP数据包组成如下表所示:1.IP协议介绍IP包的组成形式如表5所示,其中8位协议处可选择TCP方式或UDP方式,8位TTL为TimeToLive,指数据包在网络中的存活时间。2.UDP协议介绍相对于旧数据包UDP数据包的组成比较简单,主要包含所要发送的数据信息即数据段。结构如表6所示其中最后的UDP校验与IP数据包中的IP校验方式一样,但与PPP协议中的FSC校验方式不同。FSC校验属于CRC16位校验方式的一种,而旧校验和UDP校验是相对简单的反码求和的校验机制。并且对于IP及UDP校验而言需要将数据包需要校验部分的16位转换为32位进行校验校验好之后再转换为16位.3.IP及UDP校验和IP校验和所要校验的数据段包括了前面所提的IP数据包内的所有位段,而UDP校验相对IP校验复杂的地方在于,UDP校验不仅仅要将UDP数据包内的内容包括进来,而且还要包括IP部分的一些信息,UDP校验位组成如下:对于最后一位的数据段而言由于校验是32位所以如果数据段出现奇数个数据,需要加零补位。校验程序如下所示:HdelineUSHORTunsignedshortUSHOPTchecksum(USHORT*buller,Intsize){unsignedIongcksum=0;while(size>1){cksum+=*buffer++;size-=sizeof(USHORT);}if(size)cksum+=*(UCHAR*)buller;cksum=(cksum16)+(cksum&oxnff);cksum+=(cksum16)return(USHORT)(Ccksum);}4.由PPP封装形式封装的UDP/IP数据包根据前面所介绍的方法,下面给出一个具体的实例进行分析:7E214500001D47F300008011B0F60A4A30E0D350336C03E803F20009551B61A5DE7E7E21为PPP包头,4表示旧版本号5表示首部长度,00表示服务类型,001D表示包的All长度47F3表示16位的标识,0000表示3位的标志+13位的片偏移,80表示TTL,11表示协议(11表示UDP协议,TCP为06),B0F6是IP首部校验和。0A4A30E0表示本地IP地址即刚才通过PPP协议获得的动态IPD350336C表示对方IP,即要发送的目的IP,03E8表示本地端口(这个可以随便设定只要不与系统已用端口冲突即可,对于UDP而言这个没有实际意义因为GPRS分配到的是内部IP,即使对方知道你的IP及端口也可能通过UDP方式传输数据,而如果是TCP协议则用GPRS作为Client清求Server建立通道后Server端可根据端口发送数据),03F2表示目的端口,0009表示UDP包的长度(本地端口2字节+目的端口2字节+数据长度2字节+数据端n字节十UDP校验2字节),55表示数据,转换为ASCII码应为a,1B61为UDP校验,A5DE为PPP包的FSC校验和。此段代码的含义是“向IP为211.80.51.108,端口为1010的目的地发送字符a.
本文标题:PPP实现GPRS的上网认证过程
链接地址:https://www.777doc.com/doc-5800547 .html