摘要:通过对TCP/IP协议簇进行简化,讨论数据包的配置,设计并实现单片机拔号上网的系统。
关键词:单片机 协议 TCP/IP 数据包
引言
20世纪90年代,以因特网为代表的计算机网络通信技术的发展和应用取得了前所未有的突破和成功,单片机上网技术在生活和现代建设的各方面的应用和研究随之成为当今一个热门话题。8位、16位单睡机的因为其较好的性价比,在测控领域仍然占据着重要地址。这些单片机的RAM、ROM一般都很小,而网络协议通常嵌入在操作系统中,无法把庞大的操作系统直接安装在这样的单片机中。所以,
要实现上述单片机通过拔号直接连上因特网,需要考虑的主要技术就是如何在单片机上嵌入能符号需要的经过简化的网络协议。这就是本文所要讨论的主题。
一、PPP协议简介
IETF成立了一个小组,推出了点到点线路的数据链路层协议,并成为正式的因特网标准。这项工作定义的PPP(Point-to-Point
Protocol),即点到点协议,并以RFC文件RFC1661,后来以RFC1662和RFC1663进一步明确下来。PPP处理错误检测,支持多种协议,在连接时钟允许商议IP地址,允许身份验证,以及在SLIP上所做的许多其他改进。虽然许多因特网服务提供者仍支持SLIP和PPP,但未来显然属于PPP,不管是拨号线路,还是租用路由器与路由器的线路都是如此。
(1)明确地划分出一帧的尾部和下一帧的头部的成帧方式。这种帧格式也处理错误检测工作。
(2)当线路不再需要时,跳出这些线路,测试它们,商议选择,并仔细地再次释放链路控制协议。这个协议被称为链路控制协议LCP(Link Control Protocol)。
(3)用独立于所使用的网络层协议的方法来商议使用网络层的哪些选项;对于每个所支持的网络层来说,所选择的方法有不同的网络控制协议NCP(Network
Control Protocol)。NCP在因特网中(TCP/IP协议)为IPCP。
PPP数据帧的格式如图1所示。
二、基于PPP协议单片机拨号上网的设计与实现
1.概述
本方案选用的单片机是ADAM5510。它是台湾ADVANTECH公司推出的一种功能较强、价位适中的单片机,具有80188-40、16-bit单片机,RS-232、RS-485口各一个,还有一个编程口(ADAVANTECH公司为5510系列单片机开发了同普通的Turbo C界面很相似的集成开发环境,这种IDE能灵活地编辑、编译、仿真、开始和调试适用于5510系列的软件)。ADAM5510的功能模块如图2所示。这种单片机在硬件构成上已比较完善,使我们可以集中精力于TCP/IP协议的分析和软件的实现。
在本方案中,物理层接口采用的是:单片机通过RS-232与Modeem通信,电话线与Modem相连。单片机直接从RS-232端口收发数据。
2.原理及程序流程
系统原理如图3所示,测试程序如图4所示。
3.简化PPP协议——配置各种数据包
(1)LCP包的配置
LCP包的配置如图5所示。
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.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协议域和控制域。
由于LCP包中选项3的使用情况,PAP包是必需的。简单起见,程序中只交换了一个PAP包,但已完成了用户的身份鉴定,如图6所示。
(3)IPCP包的配置
IPCP选项是关于IP地址和IP压缩的,测试选择了选项3(IP-address)。本程序通过发出一个无效的地址请求(0.0.0.0),等待服务器回答一个NAK(选项为3)从这个NAK包中得到自己的正确地址。IPCP包的配置如图7所示。
(4)CCP包的处理
有些服务器试图协商压缩,但由于我们关心的是程序的大小(越小越好)而不是数据传送的速度,所以CCP请求被拒绝。
在协商好PPP协议的各选项后,即可进行数据传输了。同样,为了简单起见,采用了UDP协议而不是TCP协议。数据的正确性由应用程序控制。
(6)验证
在(202.119.116.248)端,安装了Netxray3.0版网络嗅探器。利用该软件可以很方便地查看进行该机器的数据包的功能,我们验证出源端发送数据的测试程序是可行的。
结束语
本文针对实际应用情况,对庞大的TCP/IP网络协议组进行了简化,具体分析了简化后的协议组中各种数据包,同时给出了测试程序对所需发送数据的具体打包过程。完整的TCP/IP协议很大,只能嵌入到32位以上的单片机上运行。我们在软件只需要3K B(字节的ROM即可运行。在接收数据的目的端,PC机上安装了Netxray 3.0软件,对测试程序的结果进行测试,验证出最终在目的端接收到的数据就是我们在源端所发送的数据,而且所有的数据包都符合TCP/IP规范。
上一篇:基于Internet/Intranet的录像机远程控制系统设计
下一篇:基于SX单片机实现WebServer和网络协议栈