(2)TCP/IP协议族的裁剪。在TCP协议中采用“停止等待算法”代替“滑动窗口算法”。一方面是由于数据量小,对网络拥塞不会产生太大影响,从而可以裁剪TCP的流量控制功能;另一方面是因为数据量小时,采用停止等待算法的传输效率和滑动窗口算法的效率差不多,因此采用简单停止等待算法代替复杂的滑动窗口算法,不但降低了实现难度,提高了处理速度,同时取消了TCP发送缓存区和接收缓存区,从而减小了占用存储空间。研究发现,如果TCP层的上层实现服务器端的应用,可以将标准TCP状态机建立连接过程中客户端建立连接的状态机部分简化掉,即将主动创建连接的SYN-SENT状态,主动关闭连接的FIN-WAIT1,FIN-WAIT2,CL0SING,TIME-WAIT状态。同理,如果应用是基于客户端的,还可以将服务器建立连接的状态机部分简化。当处于监听状态的服务器收到客户端的请求时,发送“ACK+对方发过来的SYN数据”。当收到来自客户端的一个仅含有ACK的空数据片后,双方进人Established状态建立连接,之后可以进行TCP数据通信。这样既节省了系统开销,同时也保证了所有的数据段都能安全正确地到达目的端。
(3)编写HTTP Web Server。Linux下嵌入式Web服务器主要有3个:httpd,thttpd和Boa。系统以boa作为服务器。Boa是一个单任务的http服务器,源代码开放、性能高。建立boa Web服务器的步骤如下:
①下载boa源代码boa-0.94.14r21.tar.gz。BoaWeb服务器的源代码可以从http://www.boa.org下载,当前最新版本为0.94.14。
②安装并编译boa源代码。首先将源码文件进行解压,修改Makefile文件,修改CC=gcc为CC=/usr/local/arm-linux/bin/arm-linux-gcc(//自己主机交叉编译器的目录),修改CPP=gcc-E为CPP=/usr/local/arm-linux/bin/arm-linux-gcc-E,执行make,即可在SRC下得到boa可执行文件。
③配置boa Web服务器。Boa启动时将加载一个配置文件boa.conf,在boa程序运行前,必须对其进行修改。
④执行Boa。成功配置以后,创建日志文件所在目录/var/log/boa,创建HTML文档的主目录/var/www,将静态网页存入该目录下(将主机/usr/share/doc/HTML/目录下的index.html文件和img目录复制到/var/www目录下),创建CGI脚本所在录/var/www/cgi-bin,将cgi的脚本存放在该目录下,另外还要将mime.types文件复制/etc目录下。在实际运行时,可以将index.html,index_Zcn.html文件、img目录和mime.types文件放到CF卡目录下,建立目录后,拷贝至相应目录。启动ARM-Linux,在终端运行./boa,用网页浏览器访问,看到/usr/share/doc/HTML/目录下的index.html网页,嵌入式Web服务器移植成功。
(4)CGI程序设计
嵌入式Web服务器,其为用户提供基于HTTP协议的网络接入方式,再通过编写适当的CGI程序来实现动态网页的交互。
要使用CGI程序,一般使用HTML中的FORM结构:<FORM ACTION="/cgi-bin/文件名";METHOD=传送方法>内容</FORM>,其ACTION属性指定相关的CGI程序,METHOD属性指明提交数据的方法(POST或GET);也可以在<A>标签的HREF属性中调用CGI程序,结构如:<A HREF="/cgi-bin/文件名">START CGI</A>;还可以在<IMG>的HTML标签中调用CGI程序,如果把CGI程序的路径当作SRC属性的话,服务器就会去运行程序并把运行结果当成图像的来源,结构如:<IMGSRC="/cgi-bin/文件名">。
4 结 语
嵌入式Web服务器是实现嵌入式系统通过Web方式与Intenet互联的关键组成部分,直接影响网络应用系统运行的质量与效率,对其进行研究对Intenet技术的发展有重要意义。本文提出一种基于ARM-Linux操作系统的嵌入式Web服务器的设计方法,并给出相应的软硬件设计,并利用Socket编程和CGI程序完成整个Web服务器的设计。该嵌入式Web服务器具有成本低、开放性好、可移植性强等优点,便于后期维护和升级。由于此设计的嵌入式Web服务器是一个单独的模块,提供的是标准接口,只要在软件上作少许的修改就能很容易地应用到其他的嵌入式设备(如智能家电、现场节点等)中,具有一定的推广价值。