嵌入式TCP/IP的优化设计与硬件实现

2007-05-25 10:17:02来源: 单片机及嵌入式系统应用
随着计算机网络技术和电子信息技术的迅猛发展,Internet的使用越来越普及,信息家电和智能仪表等能够接入Iriternet的非PC设备越来越多,将各类电子设备接入Internet的需求也越来越大。

电子设备接入Internet。有多种解决方案:在51系列单片机上运行经过裁剪的TCP/IP协议栈;使用一些ASIC实现TCP/IP的芯片,如Analog Devices推出的Internet Modem;也可使用嵌入式操作系统自带的TCP/IP协议栈。在某些对网络速度要求不高的领域,可用单片机实现TCP/IP;在对性能要求高的场合,可选择后两种方案。

1 嵌入式TCP/IP的硬件结构

图1是嵌入式TCP/IP系统的硬件结构。其中CS8900A是Cirrus Logic的网络控制器,芯片内部已设置帧过滤器自动抛弃无效帧,减轻CPU负荷,提高CPU对网络的访问效率。CS8900A工作机制主要是通过设置好其内部各寄存器的值,然后就可以自动开始工作。在网络接口部分,由于是RJ45接口,所以须使用E2023传输线变压器对网络中的信号进行转换。

通常TCP/IP协议栈需要大量的RAM来存储需要被应答的TCP包。如果在规定时间内未被应答,则重发该TCP包;被应答以后释放。为了减小RAM的使用量,当数据包需要重新发送时,如果能够重新产生数据包所需的数据,则可不存储需要被应答的TCP包。

因为网络中数据非常多,如果把所有的数据都读到内存中再判断是否应丢弃帧,则显然效率不高。所以边读取数据边判断而没有一开始就把整个帧全部读到内存中。在程序里定义了帧中各部分的相对地址,可以方便地对帧的各字节寻址。这样的设计是基于提高访问速度考虑的。

在CPU中帧的存放方式,定义PacketRAM变量为存放帧的首地址。图2给出了CPU中TCP/IP的内存划分,以及内存中帧的各个字节的定义和相对位置。


2 嵌入式TCP/IP的优化设计

TCP/IP一般采用C语言或混合汇编。使用可重入函数和一般指针(gellerc pointer)使得程序代码增大,运行速度降低;使用函数指针时,需要手动重建调用树(calltree),或将函数指针调用的函数设置为可重入函数。

2.1 嵌入式TCP/IP输入输出流程


与PC机TCP/IP协议一样,嵌入式TCP/IP采用协议分层的结构:应用层、TCP层、IP层和网络设备接口层。图3描述了输入和输出数据包的流程以及需要调用的函数。

输出时,TCP层先查看unsend队列,发现非空,将数据包插入队列;发现为空,则查看对方窗口是否够大(能够接收这个数据包)。然后,填写TCP头部信息。IP层选择网络设备接口,目的IP和该接口的子网掩码相“与”是否等于子网掩码,然后调用这个接口的Output函数来发送。

输入时,Timer()函数调用每个接口的Input函数。IP层判断IP版本、IP校验和,以及是否应转发数据包,然后根据IP头部的protocol字段将包传给相应的高层处理。TCP层,须判断TCP校验和,并在现有的套接字中查找,判断是否有套接字可接收这个数据包,判断TCP序号是否为希望的,然后更新这个连接的状态(包括释放被应答的数据包和TCP状态机的转化等),调用该套接字的回调函数recv。

2.2 嵌入式TCP/IP的程序结构


Tliner函数功能是调用TCPTimer处理TCP数据包的重发等功能,调用每个接口的Input函数接收到达的数据包。Timer函数必须在短时间(一般为20ms)内被调用一次,否则接收数据包和TCP定时等功能将停止。

如图4所示,程序主流程是一个大循环,在循环中处理发送数据包等应用层协议的同时,查询变量bTimeOut,在定时中断中将bTimerOut设置为真。应用层在程序流程中反复查询bTimerOut是否为真,若为真则调用Timer(),然后设置bTimerOut为假。

在使用嵌入式操作系统时,还要注意网络设备驱动函数被重入的问题。以NE2K的以太网卡为例,拷贝数据包到网卡缓存前要先设置寄存器(如起始地址)。如果设置完寄存器以后中断发生且放重入。则寄存器的设置被修改,中断返回以后拷贝将出错。

2.3 嵌入式TCP/IP运行速度优化


TCP/IP发送过程中主要的运算量集中在3部分:应用程序将数据拷贝到RAM;计算TCP校验和;将RAM中的数据包拷贝到网络设备的发送缓冲区。对于每个字节数据,两次拷贝大致共使用12×2=24个指令周期;计算TCP校验和使用16个指令周期。采用12MHz晶振,最高网络传输速度为25KB/s。

为了提高速度可以采用快速CPU或提高晶振频率。另外,尽量避免使用Reentrant函数。Reentrant类型的函数比一般函数速度要慢很多,但某些时候为了程序结构的需要必须使用Reentrant,这就需要在速度和结构之间作一个选择。选择的方法有:使用“指定存储类型”的指针(memoryr-specific pointer);精简协议栈去除运算量大但是用处不大的功能,目前TCP定时重发时间是固定的,也没有拥塞窗口控制和IP层路由;防止数据包不必要的拷贝;优化计算校验和与内存拷贝函数。

3 TCP/IP的嵌入式实现

TCP/IP协议实现一般以软件方式嵌人到ROM中,然后通过网络通信技术与专用嵌入式网关连接,运行TCP/IP协议,并提供TCP/IP到用户的轻型网络的连接和路由功能。

3.1 内存管理方法和无多余数据包拷贝的实现


嵌入式TCP/IP的内存管理可用链表方法,即根据数据包大小分配相应大小的内存块。如图5所示,链表将内存块链接起来,used字段表示该内存块是否正在使用,pStart和pEnd表示数据部分有效数据的开始地址和结束地址。

分配时,搜索内存链表找到一个没有分配的比所需空间大的内存块,截取所需的大小。该内存块被截取以后可能还有较多剩余,这时将剩余部分从原内存块中分离出来,成为一个新的内存块,并插入链表。释放时,将used置为假。如果pNext或pPre指向的链表单元也是空闲的,则将其与自己合并。以防止内存分片。在协议层之间传送数据包只要传送内存块的起始地址即可。这种内存管理方法空间浪费小,但运算量相对较大。

3.2 整序、重发与窗口控制的实现


使用队列缓存的方式来实现整序、重发和窗口控制。队列的一个元素指向一个数据包,队列的最大长度没有限制。

对于整序,使用ooSeq队列,如果发现接收的TCP包序号并不是希望的,但序号在接收窗口内,此时不能立刻接收这个包也不应丢弃,先将这个包放入ooSeq队列。当一个希望的TCP包被接收以后,再查看ooseq队列现在是否有TCP包成为了希望的数据包,如果有则将其取出并处理。

对于重发,使用unacked队列,每个需要被应答的TCP数据包发送以后都要放入unacked队列,直到被应答后才从队列中删除。TCP重发定时只针对unacked队列第一个TCP包。如果定时超出,则重新发送;如果重发次数超出规定值,则报错。

对于窗口控制,使用unsend队列,如果发现对方的窗口过小无法接收这个数据包,则只发送部分数据,将多余部分放入unsend队列,等待对方发来TCP包通知新的窗口大小时,再次判断是否可以发送。在unsend队列不为空的情况下,须发送的数据包都应插入unsend队列。

3.3 捎带应答的实现


捎带应答是指,当对方一个需要应答的TCP包到达时,不马上给予应答,而是等待一段较短的时间。如果在这段时间内有数据发送,则会捎带给予应答,从而减少了包的发送数量。

若暂时没有数据须发给对方或数据还未准备好,则等待一定的时间;如果在该时间内准备好了数据,则可使用捎带应答。使用捎带应答就不可能对每个帧都作确认,可用对某个帧的确认来代替对该帧之前所有帧的确认。

编者注:TCP/IP的嵌入式程序源码见本刊网站http://www.mesnet.com.cn/。

4 总 结

嵌入式系统中大量存在的是8/16位低速处理器,在进行Internet接入时,由于本身资源的限制,很难实现完整的TCP/IP协议。本文从既实现相应的功能又节省系统资源角度出发,对协议进行有针对性的模块化裁剪和优化设计,可以在单片机/ARM上嵌入TCP/IP协议簇实现嵌入式Internet接入。

经过优化设计的嵌入式TCP/IP,支持套接字形式的多个TCP连接;支持多个网络设备;支持通过网关发送数据包和数据包转发功能,响应ping命令;支持TCP包的整序、重发和窗口控制流量控制。实践证明,这种设计方式灵活,能按用户需求实现很多复杂的功能。

关键字:仪表  协议  寄存  过滤

编辑: 引用地址:http://www.eeworld.com.cn/wltx/qtjs/200705/2513.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
论坛活动 E手掌握
微信扫一扫加关注
论坛活动 E手掌握
芯片资讯 锐利解读
微信扫一扫加关注
芯片资讯 锐利解读
推荐阅读
全部
仪表
协议
寄存
过滤

小广播

独家专题更多

富士通铁电随机存储器FRAM主题展馆
富士通铁电随机存储器FRAM主题展馆
馆内包含了 纵览FRAM、独立FRAM存储器专区、FRAM内置LSI专区三大部分内容。 
走,跟Molex一起去看《中国电子消费品趋势》!
走,跟Molex一起去看《中国电子消费品趋势》!
 
带你走进LED王国——Microchip LED应用专题
带你走进LED王国——Microchip LED应用专题
 
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2016 EEWORLD.com.cn, Inc. All rights reserved