C51 下的 PPP IP UDP TCP 协议源码 点击:1479 | 回复:1



attb

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2008-08-11 21:40:01
楼主

在51单片机上实现PPP拨号,PPP拨号阶段实现LCP链路控制协商,PAP认证 IPCP获得IP 地址。

在应用层实现了IP、UDP、TCP。

没有借助操作系统和其他硬件,完全代码实现。在STC89LE58RD+单片机上稳定运行。

可用此源码开发自己的CDMA/GPRS DTU。

1. 概述
本方案选用的单片机是STC89LE58RD+。STC89LE58RD+是宏晶科技推出的新一代超强抗干扰/ 高速/ 低功耗的单片机,指令代码完全兼容传统8051 单片机,12 时钟/ 机器周期和6 时钟/ 机器周期可任意选择,内部集成MAX810 专用复位电路。单片机的串口0与GSM模块的串口相连。
2. 简化PPP协议——配置各种数据包
通过向GSM模块发送ATD*99***1#拨通GPRS 后,用LCP、IPCP 和CMNET 握手,用IP 和TCP/UDP 是实现数据传输。
下面是几种协议的具体实现过程。

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

A. LCP包概述
LCP包有3类:
a) 链路配置包,用于建立和配置链路,包括Configure Ack、Configure Nak、Configure Request、Configure Reject;
b) 链路结束包,用于结束一个链路,包括Terminate Request、Terminate Ack;
c) 链路维修包,用于管理和调试一个链路,包括Code Reject、Protocol Reject、Echo Request、Echo Reply、Discard Request。LCP包的选项最常见的有:1 Maximum Receive Unit、2 Async Control Character Map、3 Authectication Protocol、7 Protocol Field Compression、8 Address and Control Field Compression。
B. b.LCP包种类的取舍
这里只使用了Configure-Request、Reject、Ack三种LCP数据包,这是实现应答所必需的最低限度。单片机发出的Request选项是我们预先设定的,而ISP发出的选项若有我们不接受的内部,则单片机回答一个Reject,任何一方接受请求时发Ack,因此未处理NAK数据包。本文也未处理剩余的七类数据包,因任何原因造成的链路终止问题都由单片机在程序的控制下重新拨号来解决。
C. LCP选项的取舍
由于我们每次发送(接收)的数据较少(由于单片机RAM的限制,设定的缓冲区很小),MRU选项默认值为1500字节,最小值为576字节,所以测试程序不支持选项1;选项2是必须支持的;选项3提供了发送password的方法,它的参数可以是0xc023或0xc223。为简单起见,选择0xc023作为选项3的参数,这样,程序将以明文的形在一个数据包中发出用户名和密码。测试程序不请求选项7和8的服务,也就是根据默认的规定,发送的数据包含有PPP协议域和控制域。
2) PAP包的配置
PAP 是密码验证协议,它的握手过程要与LCP 协议协商过的一致。由于LCP包中选项3的使用情况,PAP包是必需的。下图是PAP认证过程

3) IPCP包的配置
PCP控制协议主要是负责完成IP网络层协议通信所需配置参数的选项协商的。IPCP在运行的过程当中,主要是完成点对点通信设备的两端动态的协商IP地址。下图是协商过程

4) IP包的处理
在协商好PPP协议的各选项后,即可进行数据传输了。这时就可以发送IP数据包了。


提供全部源码,Keil C51工程


QQ:892391617

详见:http://auction1.taobao.com/auction/item_detail-0db1-0da9ca660930f0fabd94f179f282144e.jhtml



楼主最近还看过



attb

  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 1回
  • 年度积分:0
  • 历史总积分:0
  • 注册:1900年1月01日
发表于:2008-08-12 08:15:33
1楼

在51单片机上实现PPP拨号,PPP拨号阶段实现LCP链路控制协商,PAP认证 IPCP获得IP 地址。



在应用层实现了IP、UDP、TCP。



没有借助操作系统和其他硬件,完全代码实现。在STC89LE58RD+单片机上稳定运行。



可用此源码开发自己的CDMA/GPRS DTU。


TCP/IP 协议解析
1 TCP/IP 协议的数据包格式
IPV4 的数据包格式如下图,具体的含义见[RFC791]。
Options and Padding
Version IHL TOS Total Length
Identification Flags Fragment Offset
TTL Protocol Header Checksum
Source IP Address
Destination IP Address
图2 IP 数据包格式
IPV4 的数据包格式如下图,具体的含义见[RFC793]。
图1 TCP 数据包格式
2 Terminal->;CMNET->;Internet Server Config-Req
7EFF030021450000300082400080064B230A67CCA2CA710DA804010050F9FE44CE00000000
700222386EA60000020405B4010104023F7B7E
具体含义如下:
7E PPP 起始符(Flag)
FF 广播地址(Address)
03 控制位(Control)
0021 协议域(Protocol),0021 代表IP 包
//IP 数据包的内容
4 版本号(Version),4 代表IPV4
5 IP头部长度(IHL),以32 位为一个计算单位
00 服务种类(Type Of Service)
0030 IP 包的长度(Total Length),以字节为计算单位
0082 IP 包的序号(Identification)
4000 不允许IP 包分片
80 存活时间(TTL)
06 协议(Protocol),06 代表了TCP 协议
4B23 IP 头部校验和(Header Checksum)
0A67CCA2 源IP 地址(Source IP Address),Cmnet 给我们提供的IP 地址
CA710DA8 目标IP 地址(Destination IP Address)
//TCP 数据包的内容
0401 源端口(Source Port)
0050 目标端口(Destination Port)
F9FE44CE 初始序列号(Sequence Number)
00000000 确认序列号(Ack Sequence Number)
7 头部长度(Head Length)
002 保留位和协议段(Reserved and Code),02 代表syn=1,即建链初始包
的标志
2238 窗口大小(Window Size)
6EA6 TCP包的校验和(Checksum)
0000 紧急指针(Urgent Point)
//TCP 选项
6
02 报文段长度最大值选项(MSS)
04 选项长度
0034 指定本机能够接收一个最大的报文长度
0101 选项之间的分隔
0402 选择性确认支持(可以省去这个选项)
3F7B FCS 结果
7E 结束符
3 Internet Server ->;CMNET->;Terminal Config-Ack
7EFF03002145000030000040002D069EA5CA710DA80A67CCA2005004017D5DCDEF68F9F
E44CF701216D00CFB00000204058001010402BE187E
4 Send and Receive Data
TCP 协议握手后,就可以和在普通的Internet 网上一样的通过TCP 协议收发数据了。如
果用户用的是UDP 协议,可以略过6.2 和6.3,直接向网络上的服务器发送数据

QQ:892391617

详见:http://auction1.taobao.com/auction/item_detail-0db1-0da9ca660930f0fabd94f179f282144e.jhtml



热门招聘
相关主题

官方公众号

智造工程师