如何使用GPRS模块实现远程数据传输?

如何使用GPRS模块实现远程数据传输?,第1张

随着网络应用的普及和移动装备的大量增加,GPRS技术以其低廉的价格和较快的速率已经越来越多地应用到各种各样的场合中,通过 *** 作系统自带的网络协议来控制GPRS的拨号过程已经很成熟,但是,并非所有的数据传输系统都拥有 *** 作系统或网络协议。相对干昂贵的嵌入式芯片,8051系列单片机更经济,更具有实用性且如果仅仅为了实现GPRS数据传输而采用嵌入 *** 作系统也显得过于复杂这就要求能够有一种简洁有效的新方法来实现整个拨号过程及数据传输过程。因此有必要研究一种简单经济的新办法来解决这种矛盾。本文正是基于上述原因而提出了相应的解决办法
一、网络体系结构分析
文中研究UDP/IP协议而不是TCP/IP协议,这主要根据本研究背景课题的实际情况而定。UDP相对于TCP的优点在干:简洁、方便迅速、经济。缺点在于:传输过程中可能出现“丢包”现象但对于本研究所涉及的工程项目则影响不大。具体硬件结构如图1所示。主要是通过GPRS模块实现远程传输从传感器采样的数据同时能够通过GPRS网络实现远程管理。外围电路还包括了看门狗、时钟、闪存、AD转换器等上位机软件再通过具体算法实现对数据的分析,是实现农业现代化的必不可少的基础工作,有很重要的实际意义。
研究基干GPRS的无线通讯必须首先明了通讯过程的网络系统结构,才能在实际解决问题的过程中不致误入歧途。
GPRS无线数据传输的最低层,即物理层是通过RS232串口及GPRS模块组成的,然后是数据链路层,该层是分析的重点和难点,其中涉及到PPP协议实现过程数据链路层上面是网络层,其后是传输层,就是我们通常所说的UDP/IP,TCP/IP其中IP协议属于网络层协议,而UDPTCP都属于传输层协议传输层上方的是包括会话层、表示层、应用层等,均不属本文讨论范围内,这里不再详述。
另一方面,每层协议都是基于下方协议而实现的即如果使用数据链路层则必须有物理层的支持。如果没有物理层,实施软件的物理介质也就不存在。同理,IP则是基于PPP协议实现的数据链路层,而UDP是基于IP协议实现的网络层,这也就是UDP/IP包要通过PPP协议封装起来的原因
二、数据链路层的建立
GPRS登陆网络过程属干数据链路层的建立,要通过PPP协议实现PPP协议(Point-to-Point Protocol)提供了在串行点对点链路上传输数据报的方法,支持异步8位数据及位导向的同步连接(如ISDN)它提供了一种管理两点间会话的有效方法,正在取代SLIP(Serial Line Interface Protocol)协议成为点对点网络的标准
1.通过PPP实现GPRS的上网认证过程
在GPRS模块上网的过程中,主要是经过PPP协议中的三种协议,分别为LCP(Link Control Protocol)协议,PAP(Pass-word Authentication Protocol)认证协议以及IPCP(Internet Protocol Control Protocol)协议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"设置APN
3)AT+CGATT=1,使GPRS模块附着在网络上
然后发送指令"ATD991#"建立拨号过程,模块会返回16进制的一些数据。我们要据此与模块进行协商。首先返回数据包(16进制):7EFF03CO2101010016010405DC020600000000070208020304CO2326B47E
数据包含义:7E(PPP包头)FF03CO21(LCP协议)01(代码)01(标识符)0016(长度)01(类型)04(长度)05DC(协商内容Maximum-Receive-Unit)02(类型)06(长度)00000000(协商内容)07C类型协议压缩协商)02(长度)08(类型,地址控制域压缩协商)02C长度)03〔类型)04(长度)CO23(内容表示请求PAP认证)26B4(FCS,校验和)7E(PPP包尾)。
此模块在进行LCP协商阶段是比较友好的,主动提出了PAP认证方式,可直接返回对它请求的同意也可以提出些新的申请,实际 *** 作中发送同意请求为:7EFF03CO2102010016010405DC020600000000070208020304CO23DO477E。
至此LCP认证阶段已经结束
(2)PAP认证过程
因为协商同意PAP密码认证方式故进入PAP过程,需要发送用户名和密码至ISP请求格式为7ECO230101000600003B3F7E
该包在0006后的0000分别代表用户名和密码,都为空此时由于需要与ISP进行认证,需要等一段时间经过判断,服务器通过密码认证,返回:7ECO237D227D217D207D2D7D2857656C636F6D65214EBC7E
其中的16进制字符"57656C636F6D6521"转为ASCII码为"Welcome!"同时服务器发送IPCP请求数据包:7E8021010100OA0306COA86F6FCID497E
进入IPCP协商过程
(3)IPCP协商过程
客户端部分此时需要请求ISP分发IP请求为:7E802101060016030600000000810600000000830600000000OACF7E
"0306""8106""8306"后的四个00分别代表客户端IP,第一DNS主机地址,第二DNS主机地址,这3个部分全部为00表示内容为空,是请求ISP分发IP到客户端。
服务器得到请求后分发IP数据包为:7E8021030600160306OA4A0C148106D38812AB8306D3887D34CB6B6B7E
OA4AOC14表示为十进制的1074,1220,由于中国移动通信规定GPRS拨号上网的用户分发的IP均为内部IP,非外部IP,所以IP都是以10***开头的。8106后面的D38812AB表示21113618171,是第一DNS主机的IP地址。8306后面的D38814CB表示21113620203,是第二DNS主机的IP地址此后我们需要对分发下的几个IP辨认识别,然后再次请求请求中包含这3个分发IP,代表接受分发结果。数据包为7E8021010700160306OA4A4C838106038812ABe3o6D38e14CBF2C17E
此后清求得到ISP认可,链路层PPP握手过程全部结束进入网络阶段。此后所有发往GGSN网绍的包含IP的数据包都会透明的传给所对应的IP地址。以上既是对PPP协商过程的分析,只要注意上面所提及的每步的注意事项及含义,即可迅速快捷的建立数据链路层
三、网络层及传输层的实现
网络层和传输层虽然属于IP及UDP协议实现的功能但此两者都是建立在数据链路层基础上的,因此在发送PDP/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位所以如果数据段出现奇数个数据,需要加零补位。
校验程序如下所示:
HdelineUSHORT
unsignedshortUSHOPTchecksum(USHORTbuller,Intsize)
{
unsignedIongcksum=0;
while(size>1)
{
cksum+=buffer++;
size-=sizeof(USHORT);
}
if(size)
cksum+=(UCHAR)buller;
cksum=(cksum>>16)+(cksum&oxnff);
cksum+=(cksum>>16)return(USHORT)(Ccksum);
}
4.由PPP封装形式封装的UDP/IP数据包
根据前面所介绍的方法,下面给出一个具体的实例进行分析:7E214500001D47F300DOBID11BOF60A4A30EDD350336C03E803F20000551B61A5DE7E
7E21为PPP包头,4表示旧版本号5表示首部长度,00表示服务类型,001D表示包的All长度47F3表示16位的标识,00表示3位的标志+13位的片偏移,80表示TTL,11表示协议(11表示UDP协议,TCP为06),B0F6是IP首部校验和。接下来的"0A4A30E0"表示本地IP地址即刚才通过PPP协议获得的动态IP而"D350336C"表示对方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为2118051108,端口为1010的目的地发送字符a"
四、结束语
GPRS的应用不仅仅局限于嵌入式或PC机领域,更能扩大到简单的8051微控制器,从而更深入地扩大GPRS技术的使用。同时针对GPRS上网方式裁减PPP和UDP/IP协议,软件部分用C语言编写可压缩至4K,不仅简化认证过程更节省程序运行时间,正常情况下从拨号到登陆网络只需要3秒钟而且该程序可方便的移植到各种硬件系统中。目前该系统已稳定运行于南京试验田农田墒情检测系统。

TCP握手协议
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;
SYN:同步序列编号(Synchronize Sequence Numbers)
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手
完成三次握手,客户端与服务器开始传送数据

一般来说,出现这种故障的时候,网络连接都是都是好的,即不会出现红色的叉子图标。但这又只是一种表现的正常,因此我们入手的时候必须先从自身入手。 从自身入手的第一点就是检查出现该故障前有没有安装过什么软件,有没有改过什么设置,尤其是杀毒软件、防火墙这一类的软件,因为设置不当就可能出现机器只发送不接收数据包的情况。接下来可以使用“Ping 127001”对本地网卡的工作状态进行一个基础的判断,如果能够ping通则证明网卡是正常的。 为了保险起见,建议大家在这种情况下还应该将TCP/IP重新安装一下。打开本地连接的属性窗口,然后单击“安装”按钮,在打开的组件窗口中选中“协议”项并打开添加窗口,选中“Microsoft”下的“Microsoft TCP/IP版本6”将TCP/IP重新安装一下。 再一种情况就是10/100M自适应网卡的问题,尤其是集成网卡的低端机器,出现这种情况时不防将网直接设为10M。打开本地连接的属性窗口,在“常规”中单击网卡的“配置”按钮,切换到“高级”标签,将网速的速率设为10MB即可。 一般来说,对于因为本地机器引发网卡数据只发不接收的原因就是这些了。如果这些问题都排查过了,问题仍然存在,那么则需要继续向下一层查找。 继续向下一层查找问题,就是网络和交换机了。由于网线还是比较脆弱的,八根网线中的某一根很容易出现断裂,但是这时候外表还是很正常的,尤其是负责数据接收的网线出现断裂。为此在确认本机没有问题的情况下,则需要测试、更换网线,这样即可解决问题。 由网线的故障可以引申出交换机的故障,当交换机某个模块或端口出现故障时同样会出现这种情况。因此,我们不防将对应的端口换一个试试,也许能够起到事半功倍的效果。不过对于划分了vlan的网络来说,随意更换端口同样会带来数据只能发不能收的情况,因此在更换的时候必须确定更换前后的端口都在同一个vlan之中。 一般来说,遵循由本地开始检查,依次向外扩展,这样很容易就能够解决数据只能发送不能接收的故障。而在处理各种网络故障时,也都应遵循这样的顺序。对于出现的各种问题,大部分都是由于个人体 *** 作不当所引发的,在处理之前先询问一下常常会有意想不到的收获。 追问: Ping 127001是什么意思啊? 回答: PING 命令是用于确 定本 地主 机(也就是你的机器)是否能与另一台 主机 ( 服务器 和像你一样的各地机器)成功能交换数据包再根据返回的信息你就可以推断TCP/IP参数(因为 现在网 络一般都是通过TCP/IP传送数据的)是否设置,网络是否通畅等,但不是PING成功就代表TCP/IP配置正确,你有可能要执行大量的 本地主机 与远程主机的 数据包交换 ,才能确信TCP/IP配置的正确性 其实,PING就是一个 测试程序 ,在Win98下的MS-DOS窗口下执行,还有必须连上网( 因特 网或者局域网),执行格式如下: PING [ 远程服务 器名][参数] 如: PING ,运行这个命令将得到 >

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13051560.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存