Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343669
  • 博文数量: 166
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 10
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-21 17:29
文章分类

全部博文(166)

文章存档

2015年(60)

2014年(99)

2013年(7)

我的朋友

分类: 系统运维

2014-09-22 14:13:39

1.介绍
  ppp协议有3个主要的部分:
  1.串行的链路上压缩数据报的方法。
  2.完成链路建立,配置的数据链路控制协议(lcp)。
  3.为网络层协议族配置不同的网络层协议的网络控制协议(ncp)。
  为了在点到点链路上面建立通信,每个ppp协议链路的端都为了配置和试验必须首先发lcp包。在链路经过lcp选择和建立之后,ppp必须发送ncp包选择和配置一个或一个以上的网络层协议。如果每个被选中的网络层协议都被配置,来自每个网络层协议的数据报就能在链路上面被发送。
  链路一直保持通信配置到通信单元lcp或ncp包明确指示关闭链路,或者一些外部事件发生(计时器呼出休止状态,或者网络管理员干涉)为止。
2.端对端协议网络控制协议(ncp)为ip
  ip控制协议(ipcp)负责配置,以及点对点链路的双端上激活和去激活ip协议传输。ipcp使用和链路控制协议(lcp)同样的包交换machanism。ipcp包也可以在ppp协议达到网络层的协议阶段以前不被交换。在本阶段达到之前收到的ipcp包应该静静地抛弃。
  ip控制协议确切地说除下列情形外,是和链路控制协议[ 1 ]同样的东西:
  数据链路层协议域
  确切地说 ipcp包是被压缩在协议域类型为十六进制8021(ip控制协议)的ppp协议数据链路层帧的信息字段中的。
  编码域
  只有代码1到7(configure-request,configure-ack,configure-nak,configure-reject,terminate-request,terminate-ack和code-reject)被使用。其他的编码应该被处理为未经承认并且应该导致结果code-rejects。

  超时
  ipcp包可以在ppp协议达到网络-层的协议阶段之前不被交换。执行应该为等待在等待configure-ack或其他响应的定时器超时之前的认证和线路质量监测完成做好准备。被建议执行仅仅在用户干涉或可变的时间量后面放弃。
  配置可选项类型
  ipcp有在下边定义的的配置可选项的清楚的置值。
  2.1 发送ip数据报
  在任何ip包可以被传输之前,ppp协议必须达到网络-层的协议阶段,ip控制协议必为opened状态。
  确切地说ip包是被压缩在协议域类型为十六进制0021(网间协议)的ppp协议数据链路层帧的信息字段中的。
在ppp协议链路上面被传送的ip包的最大的长度是和ppp协议数据链路层结构的信息字段的最大的长度同样的东西。大的ip数据报必须分片传输。
  如果系统想避免分片和重组,它应该使用tcp的最大分片尺寸选项[ 4 ]和mtu discovery[ 5 ]。
3.ipcp配置可选项
  ipcp配置可选项允许合乎需要的网间协议参数的协商。ipcp用和lcp [ 1 ]一样的选项定义格式来分隔各个选项的设置。
  ipcp选项类型域的最新的值在最近的"assigned numbers"rfc中被指定[ 6 ]。当前的值象下面这样被分配:
  1 ip-地址(addresses)
  2 ip-压缩协议
  3 ip-地址(address)
  3.1 ip-地址(ip-addresses)
  描述
  ip-地址(addresses)配置选项的使用已经被反对了。它难以在全部使用本选项的例子中保证协商收敛。rfc[ 7 ] 1172为向后兼容执行需要提供信息。ip-地址(address)配置选项代替本选项,并且它的使用是首选的。

  本可选项不应该在已经被承认的包含了ip-address和ip-addresses的任意一个选项configure-request或configure-request中被发送。
  如果configure-reject为ip-地址的可选项被收到,或者configure-nak用ip-地址的可选项被认为是附加的选项,本可选项可以被发送。
  在ipcp协议状态达到internet草案标准之后,本可选项也许被废除。
  3.2 ip-压缩协议
  描述
  本配置可选项提供协商特定的压缩协议的使用的方法。在默认情况下,压缩不使用。

ip-压缩协议配置可选项格式的摘要在下边被表示。域从左往右被传送。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 类型 | 长度 | ip-压缩协议 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 数据...
+-+-+-+-+
类型 2
长度 >= 4
ip-压缩协议
ip-压缩协议域是和显示压缩协议要求的2八位字节。给本域的值总是和给那个相同的压缩协议的ppp协议数据链路层协议域值同样的东西。
ip-压缩协议域的最新的值在最近的"assigned numbers"rfc中被指定[ 6 ]。当前的值象下面这样被分配:
值(十六进制在中)       协议
002d              van jacobson compressed tcp/ip(用于网络的一组通讯协议)
数据
数据区是零,或者,由特别压缩协议决定的更多的八位字节的附加数据数据。
缺省
不使用压缩协议。
3.3 ip-地址(ip-address)
  描述
  本配置选项提供协商在链路本端上被使用的ip地址的方法。它允许confugure-requestde的发送方声明要求哪个ip地址,或者请求对端提供信息。对端能通过naking选项提供本信息,返回有效的ip地址。
  如果必须进行关于远程的的ip地址的协商,而对端不提供其configure-request里边可选项,可选项应该被加到configure-nak上。被给的ip地址值必须象远程的的ip地址那样可接受,或者显示对端提供信息的要求。
在默认情况下,ip地址不被分配。
ip-地址(ip-address)的配置可选项格式的摘要在下边被表示。域从左往右被传送。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
| 类型 | 长度 | ip-地址
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
ip地址(cont) |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

类型 3
长度 6
ip-地址
4个八位字节ip地址是发件人在configure-request中要求的本端地址。如果全部4个八位字节都是零值,它表示请求对端提供ip-地址信息。 缺省

ip地址不被分配。
4.van jacobson tcp/ip报头压缩
  van jacobson tcp/ip报头压缩把tcp/ip报头降低到3字节。这可以显著的改进低速串行线的通信。
  ip-压缩协议配置可选项被用来表示收到压缩的包的能力。如果要求双向压缩,链路的每一端都必须独立地请求本可选项。
  当传送ip包的时候,ppp协议协议域是对下列值的置值:
  值(十六进制在中)
  0021 典型ip。ip协议不是tcp,或包被分割,或者不能压缩。
  002d 压缩tcp。tcp/ip报头被压缩报都替换。
  002f 未压缩tcp。ip协议域被时间片标识符替换。
  4.1 配置可选项格式
  为了协商van jacobson tcp/ip报头压缩ip-压缩协议配置选项的格式的摘要在下边被表示。域从左往右被传送。
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 类型 | 长度 | ip-压缩协议 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|最大时间片id | 比较时间片id |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
类型 2
长度 6
ip-压缩协议
  002d(十六进制)给van jacobson的压缩了tcp/ip报头。
最大-时间片身份识别标志(max-slot-id)
  max-slot-id域是表示最大的时间片标识符的1八位字节。它比时间片的实际的号码更少;时间片标识符可以取从零到max-slot-id的值。
  记录:
  用1时间片仅仅(最大-时间片身份识别标志= 0)可以有有问题的执行。在参考中看讨论[ 3 ]。在[ 3 ]例子执行将仅仅和3一起通过254时间片动。
比较-时间片身份识别标志(comp-slot-id)
  comp-slot-id域是表示是否时间片标识符域可以被压缩的1八位字节。
  0 时间片标识符不必被压缩。全部压缩的tcp包都必须在每一个变化的mask中设置c比特,而且必须包括时间片标识符在内。
  1 时间片标识符可以被压缩。
  如果ppp协议链路没有能力在接收中给解压缩模块表示误差,时间片标识符不允许被压缩。在误差后面的同步依靠用时间片标识符接收包。在参考中看讨论[ 3 ]。
附录a.ipcp推荐的可选项
  推荐下列配置可选项:
  ip-压缩协议 - 带有至少4个时间片--通常为16个时间片。
  ip-地址   - 仅在拨号线路上。
安全考虑
  安全问题不在本记录中被讨论。
 

随着网络应用的普及和移动装备的大量增加,GPRS技术以其低廉的价格和较快的速率已经越来越多地应用到各种各样的场合中,通过操作系统自带的网络协议来控制GPRS的拨号过程已经很成熟,但是,并非所有的数据传输系统都拥有操作系统或网络协议。相对干昂贵的嵌入式芯片,8051系列单片机更经济,更具有实用性且如果仅仅为了实现GPRS数据传输而采用嵌入操作系统也显得过于复杂这就要求能够有一种简洁有效的新方法来实现整个拨号过程及数据传输过程。因此有必要研究一种简单经济的新办法来解决这种矛盾。本文正是基于上述原因而提出了相应的解决办法.

一、网络体系结构分析

文中研究UDP/IP协议而不是TCP/IP协议,这主要根据本研究背景课题的实际情况而定。UDP相对于TCP的优点在干:简洁、方便迅速、经济。缺点在于:传输过程中可能出现“丢包”现象但对于本研究所涉及的工程项目则影响不大。具体硬件结构如图1所示。主要是通过GPRS模块实现远程传输从传感器采样的数据同时能够通过GPRS网络实现远程管理。外围电路还包括了看门狗、时钟、闪存、AD转换器等上位机软件再通过具体算法实现对数据的分析,是实现农业现代化的必不可少的基础工作,有很重要的实际意义。

研究基干GPRS的无线通讯必须首先明了通讯过程的网络系统结构,才能在实际解决问题的过程中不致误入歧途。

GPRS无线数据传输的最低层,即物理层是通过RS232串口及GPRS模块组成的,然后是数据链路层,该层是分析的重点和难点,其中涉及到PPP协议实现过程数据链路层上面是网络层,其后是传输层,就是我们通常所说的UDP/IPTCP/IP其中IP协议属于网络层协议,而UDP.TCP都属于传输层协议传输层上方的是包括会话层、表示层、应用层等,均不属本文讨论范围内,这里不再详述。

另一方面,每层协议都是基于下方协议而实现的即如果使用数据链路层则必须有物理层的支持。如果没有物理层,实施软件的物理介质也就不存在。同理,IP则是基于PPP协议实现的数据链路层,而UDP是基于IP协议实现的网络层,这也就是UDP/IP包要通过PPP协议封装起来的原因.

二、数据链路层的建立

GPRS登陆网络过程属干数据链路层的建立,要通过PPP协议实现PPP协议(Point-to-Point Protocol)提供了在串行点对点链路上传输数据报的方法,支持异步8位数据及位导向的同步连接(如ISDN)它提供了一种管理两点间会话的有效方法,正在取代SLIPSerial Line Interface Protocol)协议成为点对点网络的标准.

1.通过PPP实现GPRS的上网认证过程

GPRS模块上网的过程中,主要是经过PPP协议中的三种协议,分别为LCPLink Control Protocol)协议,PAPPass-word Authentication Protocol)认证协议以及IPCPInternet Protocol Control Protocol)协议LCP部分主要协商下一步的密码认证协议,可选择PAP方式或CHAP方式,我们根据ISP要求选择PAP方式。PAP部分主要是向ISP发送密码进行认证。密码认证通过以后进入IPCP,完成客户端请求IPISP端分发IP的过程。其实现过程图如图2所示

在认证过程中,MCUGPRS模块及ISP都需要发送PPP格式的数据包来完成协商过程该数据包为16进制,多数情况下其对应ASCII码并无实际意义PPP数据帧的结构如表1所示。

对于表1所示的协议部分有如下凡种形式的描述:

对于表1所示的信息位包括了链路配置包标志,描述如下:

以上3个表所示的内容是分析PPP协议各种类型数据包的基本概念。在解析PPP数据包中需要注意的另外一个事项是,如果字符中包括了Ox7D,则表示该字符后面的字符需要转义。转义方式是后一个字符与0x20进行异或运算得出的16进制数据作为真是数据比如一个数据包包括了......Ox7D0x23......,则真实表示的为Ox03a(为方便表示下文所示数据均为转义后的数据)

2.实际协商过程分析

1LCP协商过程

首先设置模块的初始化参数及工作参数向模块发送如下AT指令:

1AT+CGCLASS="B"置为“B”模式

2AT+CGDCONT=1"IP";"CMNET"设置APN

3AT+CGATT=1,使GPRS模块附着在网络上

然后发送指令"ATD*99***1#"建立拨号过程,模块会返回16进制的一些数据。我们要据此与模块进行协商。首先返回数据包(16进制):7EFF03CO2101010016010405DC020600000000070208020304CO2326B47E

数据包含义:7EPPP包头)FF03CO21LCP协议)01(代码)01(标识符)0016(长度)01(类型)04(长度)05DC(协商内容Maximum-Receive-Unit02(类型)06(长度)00000000(协商内容)07C类型协议压缩协商)02(长度)08(类型,地址控制域压缩协商)02C长度)03〔类型)04(长度)CO23(内容表示请求PAP认证)26B4FCS,校验和)7EPPP包尾)。

此模块在进行LCP协商阶段是比较友好的,主动提出了PAP认证方式,可直接返回对它请求的同意也可以提出些新的申请,实际操作中发送同意请求为:7EFF03CO2102010016010405DC020600000000070208020304CO23DO477E。

至此LCP认证阶段已经结束

2PAP认证过程

因为协商同意PAP密码认证方式故进入PAP过程,需要发送用户名和密码至ISP.请求格式为7ECO230101000600003B3F7E

该包在0006后的0000分别代表用户名和密码,都为空此时由于需要与ISP进行认证,需要等一段时间经过判断,服务器通过密码认证,返回:7ECO237D227D217D207D2D7D2857656C636F6D65214EBC7E

其中的16进制字符"57656C636F6D6521"转为ASCII码为"Welcome!".同时服务器发送IPCP请求数据包:7E8021010100OA0306COA86F6FCID497E

进入IPCP协商过程

3IPCP协商过程

客户端部分此时需要请求ISP分发IP请求为:7E802101060016030600000000810600000000830600000000OACF7E

"0306""8106""8306"后的四个00分别代表客户端IP,第一DNS主机地址,第二DNS主机地址,这3个部分全部为00表示内容为空,是请求ISP分发IP到客户端。

服务器得到请求后分发IP数据包为:7E8021030600160306OA4A0C148106D38812AB8306D3887D34CB.6B6B7E

OA4AOC14表示为十进制的10.7412.20,由于中国移动通信规定GPRS拨号上网的用户分发的IP均为内部IP,非外部IP,所以IP都是以10.***开头的。8106后面的D38812AB表示211.136.18171,是第一DNS主机的IP地址。8306后面的D38814CB表示211.136.20.203,是第二DNS主机的IP地址此后我们需要对分发下的几个IP辨认识别,然后再次请求请求中包含这3个分发IP,代表接受分发结果。数据包为7E8021010700160306OA4A4C838106038812ABe3o6D38e14CBF2C17E

此后清求得到ISP认可,链路层PPP握手过程全部结束进入网络阶段。此后所有发往GGSN网绍的包含IP的数据包都会透明的传给所对应的IP地址。以上既是对PPP协商过程的分析,只要注意上面所提及的每步的注意事项及含义,即可迅速快捷的建立数据链路层.

三、网络层及传输层的实现

网络层和传输层虽然属于IPUDP协议实现的功能但此两者都是建立在数据链路层基础上的,因此在发送PDP/IP包的时候仍然不能摆脱对PPP协议的依赖。由PPP封装的UDP/IP数据包组成如下表所示:

1IP协议介绍

IP包的组成形式如表5所示,其中8位协议处可选择TCP方式或UDP方式,8TTLTimeToLive,只数据包在网络中的存活时间。

2UDP协议介绍

相对于旧数据包UDP数据包的组成比较简草,主要包含所要发送的数据信息即数据段。结构如表6所示其中最后的UDP校验与IP数据包中的IP校验方式一样,但与PPP协议中的FSC校验方式不同。FSC校验属于CRC16位校验方式的一种而旧校验和UDP校验是相对简单的反码求和的校验机制。并且对于IPUDP校验而言需要将数据包需要校验部分的16位转换为32位进行校验校验好之后再转换为16.

3IPUDP校验和

IP校验和所要校验的数据段包括了前面所提的IP数据包内的所有位段,而UDP校验相对IP校验复杂的地方在于,UDP校验不仅仅要将UDP数据包内的内容包括进来,而且还要包括IP部分的一些信息UDP校验位组成如下:

对于最后一位的数据段而言由于校验是32位所以如果数据段出现奇数个数据,需要加零补位。

校验程序如下所示:

HdelineUSHORT

unsignedshortUSHOPTchecksum(USHORT*bullerIntsize)

{

unsignedIongcksum=0;

while(size1)

{

cksum+=*buffer++

size-=sizeof(USHORT);

}

if(size)

cksum+=*(UCHAR*)buller;

cksum(cksum>>16)+(cksumoxnff);

cksum+=(cksum>>16)return(USHORT)(Ccksum);

}

4.由PPP封装形式封装的UDP/IP数据包

根据前面所介绍的方法,下面给出一个具体的实例进行分析:7E2145.00001D47F300DOBID11BOF60A4A30EDD350336C03E803F20000551B61A5DE7E

7E21PPP包头,4表示旧版本号5表示首部长度,00表示服务类型,001D表示包的All长度47F3表示16位的标识,00表示3位的标志+13位的片偏移,80表示TTL11表示协议(11表示UDP协议,TCP06),B0F6IP首部校验和。接下来的"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校验和。此段代码的含义是“向IP211.80.51.108,端口为1010的目的地发送字符a".

四、结束语

GPRS的应用不仅仅局限于嵌入式或PC机领域,更能扩大到简单的8051微控制器,从而更深入地扩大GPRS技术的使用。同时针对GPRS上网方式裁减PPPUDP/IP协议,软件部分用C语言编写可压缩至4K,不仅简化认证过程更节省程序运行时间,正常情况下从拨号到登陆网络只需要3秒钟而且该程序可方便的移植到各种硬件系统中。目前该系统已稳定运行于南京试验田农田墒情检测系统。

阅读(1107) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~