基于ARM的嵌入式TCP/IP协议的实现
发布时间:2008/5/27 0:00:00 访问次数:545
摘要:介绍嵌入式tcp/ip协议在低速处理器中的一种简化实现方案,并成功应用于某分布式监控系统中。
关键词:tcp/ip协议 嵌入式 arm
在网络应用日益普遍的今天,越来越多的嵌入式设备实现internet网络化。tcp/ip协议是一种目前被广泛采用的网络协议。嵌入式internet的技术核心是在嵌入式系统中部分或完整地实现tcp/ip协议。由于tcp/ip协议比较复杂,而目前嵌入式系统中大量应用低速处理器,受内存和速度限制,有必要将tcp/ip协议简化。
图1 协议处理
1 tcp/ip协议的实现
嵌入式tcp/ip协议一般实现:arp/rarp、ip、icmp、tcp、udp、http、smtp、ftp、telnet等协议,协议处理的主要流程如图1所示。
1.1 tcp协议的实现
工业控制领域传输层采用tcp协议、不用udp协议,是考虑到实时监控系统中传输量并不大,而可靠性要求较高。tcp协议是面向连接的、端对端的可靠通信协议。它采用了许多机制来保证可靠传输,应用于嵌入式系统显得过于复杂。
tcp协议数据传输可分为三个阶段:建立连接、传输数据和断开连接。它的实现过程可以用状态机来描述。建立连接有两种方法,即主动打开和被动打开。服务器端是一种被动打开,它一直在侦听连接请求;而客户端是一种主动打开,它发送连接请求以建立连接。研究发现,如果tcp层的上层实现服务器端的应用,可以将标准tcp状态机建立连接过程中客户端建立连接的状态机部分简化掉。同理,如果应用是基于客户端的,可以将服务器端建立连接的状态机部分简化掉。断开连接有两种方式:一是主动断开连接;另一是被动断开连接。被动断开连接的处理较为简单,但标准tcp协议的主动断开连接的状态机部分过于复杂。经过实验发现,在需要主动断开连接的时候,发送一个fin数据报;接收到对fin数据报的确认后,再发送一个reset数据报,即可顺利完成一次主动断开连接。
标准的tcp协议使用慢启动的滑动窗口机制。滑动窗口是一种在流量控制和网络传输效率之间折中的方案。它允许发送方在等待一个确认之前发送多个窗口,其确认是一种批量的确认。研究滑动窗口协议发现,滑动窗口的一个极限情况,是只使用单个窗口,就变成了一种简单确认的处理方法。使用该方法后,所有的处理只是对单个数据报的发送和确认,节约了系统的资源,也使维护更加方便。为了协议的兼容性,需要通信的另一方也使用简单确认方法。因为如果对方使用较大的窗口,就可能造成处理器被淹没。这个问题可以通过设置待发送数据报的tcp头部的windows字段的大小解决。
在上述基础上,简化实现tcp协议的流程图如图2所示。其中“不同状态的相应处理”指根据接收到的tcp报文准备待发送数据报并将其发送到以太网上。这部分根据tcp所处的不同状态,所做的处理是不一样的。
1.2 ip协议
ip协议是tcp/ip的基础,为不同网络的主机之间发送数据报的操作序列提供无连接服务。通过在数据报前添加ip协议头,使每个数据报具有寻址能力。嵌入式系统只把ip作为传输工具,进行简化以完成主要的操作。得到ip包后,检验ip头部的版本、目的地址、校验和正确否,解析出协议类型字段,由此交给相应的高层协议处理。发送ip包时,将缓冲区内的源地址与目的地址互换,设置校验和,然后交给下层协议处理。不符合要求,则将此包丢弃。ip包最大可以为65kb,可以分段传输,而在嵌入式系统里根本无法容纳如此大的数据包,因此一般不支持分段传输。所以限制mcu发送和接收数据包的方式以避免分段传输,从而减少程序复杂度。
1.3 其它协议
arp协议为32位ip地址到对应的48位以太网地址之间提供动态映射。嵌入式系统中仅响应arp请求,发送arp回答包。请求者广播出包含arp请求的以太帧、目的以太网地址为全1的广播地址。本机收到后,由目的ip地址发现自己是目的主机,发送一个arp回答。icmp通过ip协议传输其报文。i
摘要:介绍嵌入式tcp/ip协议在低速处理器中的一种简化实现方案,并成功应用于某分布式监控系统中。
关键词:tcp/ip协议 嵌入式 arm
在网络应用日益普遍的今天,越来越多的嵌入式设备实现internet网络化。tcp/ip协议是一种目前被广泛采用的网络协议。嵌入式internet的技术核心是在嵌入式系统中部分或完整地实现tcp/ip协议。由于tcp/ip协议比较复杂,而目前嵌入式系统中大量应用低速处理器,受内存和速度限制,有必要将tcp/ip协议简化。
图1 协议处理
1 tcp/ip协议的实现
嵌入式tcp/ip协议一般实现:arp/rarp、ip、icmp、tcp、udp、http、smtp、ftp、telnet等协议,协议处理的主要流程如图1所示。
1.1 tcp协议的实现
工业控制领域传输层采用tcp协议、不用udp协议,是考虑到实时监控系统中传输量并不大,而可靠性要求较高。tcp协议是面向连接的、端对端的可靠通信协议。它采用了许多机制来保证可靠传输,应用于嵌入式系统显得过于复杂。
tcp协议数据传输可分为三个阶段:建立连接、传输数据和断开连接。它的实现过程可以用状态机来描述。建立连接有两种方法,即主动打开和被动打开。服务器端是一种被动打开,它一直在侦听连接请求;而客户端是一种主动打开,它发送连接请求以建立连接。研究发现,如果tcp层的上层实现服务器端的应用,可以将标准tcp状态机建立连接过程中客户端建立连接的状态机部分简化掉。同理,如果应用是基于客户端的,可以将服务器端建立连接的状态机部分简化掉。断开连接有两种方式:一是主动断开连接;另一是被动断开连接。被动断开连接的处理较为简单,但标准tcp协议的主动断开连接的状态机部分过于复杂。经过实验发现,在需要主动断开连接的时候,发送一个fin数据报;接收到对fin数据报的确认后,再发送一个reset数据报,即可顺利完成一次主动断开连接。
标准的tcp协议使用慢启动的滑动窗口机制。滑动窗口是一种在流量控制和网络传输效率之间折中的方案。它允许发送方在等待一个确认之前发送多个窗口,其确认是一种批量的确认。研究滑动窗口协议发现,滑动窗口的一个极限情况,是只使用单个窗口,就变成了一种简单确认的处理方法。使用该方法后,所有的处理只是对单个数据报的发送和确认,节约了系统的资源,也使维护更加方便。为了协议的兼容性,需要通信的另一方也使用简单确认方法。因为如果对方使用较大的窗口,就可能造成处理器被淹没。这个问题可以通过设置待发送数据报的tcp头部的windows字段的大小解决。
在上述基础上,简化实现tcp协议的流程图如图2所示。其中“不同状态的相应处理”指根据接收到的tcp报文准备待发送数据报并将其发送到以太网上。这部分根据tcp所处的不同状态,所做的处理是不一样的。
1.2 ip协议
ip协议是tcp/ip的基础,为不同网络的主机之间发送数据报的操作序列提供无连接服务。通过在数据报前添加ip协议头,使每个数据报具有寻址能力。嵌入式系统只把ip作为传输工具,进行简化以完成主要的操作。得到ip包后,检验ip头部的版本、目的地址、校验和正确否,解析出协议类型字段,由此交给相应的高层协议处理。发送ip包时,将缓冲区内的源地址与目的地址互换,设置校验和,然后交给下层协议处理。不符合要求,则将此包丢弃。ip包最大可以为65kb,可以分段传输,而在嵌入式系统里根本无法容纳如此大的数据包,因此一般不支持分段传输。所以限制mcu发送和接收数据包的方式以避免分段传输,从而减少程序复杂度。
1.3 其它协议
arp协议为32位ip地址到对应的48位以太网地址之间提供动态映射。嵌入式系统中仅响应arp请求,发送arp回答包。请求者广播出包含arp请求的以太帧、目的以太网地址为全1的广播地址。本机收到后,由目的ip地址发现自己是目的主机,发送一个arp回答。icmp通过ip协议传输其报文。i