嵌入式WEB服务器中TCP/IP协议栈的设计与实现
的物理地址。
首先ARP程序检测以太网帧的类型字段以判断其协议类型。以太网标准规定,当一个以太网帧携带一个ARP消息时,类型字段必须包含十六进制值0806。接着,检测消息中的操作字段以确认是一个请求消息还是一个应答消息。若是一个请求消息,ARP程序比较目标IP地址与自己的IP地址,如果一样,则要回发一个应答消息。对接收到的来自远程主机的任何试图解析Web服务器地址的ARP请求,Web服务器都会做出回应。
当Web服务器向客户机发送一个ARP消息时,此消息是嵌入一个以太网帧中广播给网上的所有计算机,每台计算机收到这个请求后都会检测其中的IP地址。与该IP地址匹配的计算机发送一个应答,这个应答消息被放进一个帧中直接发回给Web服务器,而其他的计算机则会丢弃收到的请求,不发任何应答。这种方式虽然对网络造成一定的压力,但节省嵌入式设备的宝贵资源。在等待应答的时间里,ARP将到达的TCP包丢弃,一旦收到应答,ARP高速缓存就用目的以太网地址更新,然后等待分组就用高速缓存中的目的以太网地址更新,分组就被发送了。
3.2 IP协议实现
IP协议主要功能是用于主机之间发送数据报的传输,实现比较复杂,但对于Web服务器来说,只需完成IP协议两项最基本的功能:第一,处理接收到的IP数据报,向上层网络提交。第二,负责对TCP报文、ICMP报文进行封装,交给数据链路层进行装帧。
当Web服务器收到发给自己的数据帧后,需要对以太网首部中的帧类型字段进行判断,如果该字段为0x0800,说明后面的数据是IP数据报,将此数据提交IP层处理。IP协议判断此数据报的IP头部中目的IP地址字段与本地IP地址是否一致,若不一致,则丢弃该数据报;若一致,进行IP头部校验和检查,当证明数据在传输中没有出现错误时,去掉IP头部,将IP数据提交上层处理,即根据IP首部中的协议字段决定交给ICMP 协议还是TCP协议处理。在程序运行时,当所接收的数据被判定为IP数据报后,IP处理程序将严格按照以上的过程接收处理数据并进行处理。
IP协议还要查询是否有上层数据要发送,如果有数据发送,则将上层数据进行IP封装,交给数据链路层装帧发送。
3.3 ICMP协议实现
ICMP提供了一种让互联网中的路由报告错误或提供有关意外情况信息的报文机制。它不是独立的,是IP的一部分,在每个IP实现中必须有它。虽然它提供的信息十分丰富,但在嵌入式Web服务器应用中,只要实现回送请求(echo request)和回送应答(echo reply)就足够了。
3.4 TCP协议实现
TCP是嵌入式Web服务器的核心。在设计嵌入式Web服务器时,系统应用层只需支持HTTP协议。嵌入式系统把要传送的数据,参数等存入网页的相关位置。对于任何TCP连接,每次只需支持HTTP协议发送网页服务。在单片机这样的系统中,资源十分有限,因此要精简TCP 协议,简化的原则有两个:第一,不能改变其面向连接的特性;第二,简化必须能配合其所采用的应用层协议。
作为嵌入式Web服务器,TCP连接时只需处于被动服务的状态,所以将标准的TCP有限状态机的主动创建连接的SYN-SENT状态,主动关闭连接的FIN-WAIT1,FIN-WAIT2,
CLOSING,TIME-WAIT状态都省去,在设计中,还可以舍弃CLOSED状态,让它开始就处于LISTEN状态来监听客户端的连接请求。这样,TCP的三次握手机制中,建立连接的过程时,嵌入式系统作为监听状态的服务器,始终为被动方,相当于被动打开后的LISTEN状态,等待对方发起连接。当它接收到SYN数据片,它发出SYN+ACK数据片并确认它己经收到对方的SYN,此时变为SYN_RECEIVED状态。再接收到对方返回的一个仅含ACK的空数据片,则三次握手完成,进入ESTABLISHED状态,之后可以进行TCP数据通讯。这样,既节省了系统开销,同时也保证了所有的数据段都能安全正确地到达目的端。
4 结语
本文的创新之处在于对应用于嵌入式Web服务器的TCP/IP协议栈进行了精简,既兼顾了TCP/IP协议的主要功能的实现,又照顾到嵌入式系统本身的弱点,利用嵌入式TCP/IP协议栈能扩展许多非智能设备的网络功能,使之方便接入Internet,具有很高的实用价值。
参考文献:
[1] Jeremy Bentham.嵌入式系统Web服务器:TCP/IP Lean.机械工业出版社.2003.5
[2] 李素侠,段友祥,嵌入式TCP/IP协议的分析与研究.微计算机信息.2005,7-2
[3] 符意德.嵌入式系统设计原理及应用.清华大学出版社.2004.11
[4] 王海燕.嵌入式Web服务器的研究与实现.武汉大学研究生论文.2003.5
[5] Douglas e.comer.用TCP/IP进行网际互连 第1卷:原理、协议和体系结构.电子工业出版社.1998.4
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于Winodws CE的嵌入式网络监控系统的设计与实现(03-05)
- 嵌入式系统实时性的问题(06-21)
- 嵌入式实时系统中的优先级反转问题(06-10)
- 嵌入式Linux系统中MMC卡驱动管理技术研究(06-10)
- FPGA的DSP性能揭秘(06-16)