《IP的优化设计与硬件实现.docx》由会员分享,可在线阅读,更多相关《IP的优化设计与硬件实现.docx(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、嵌入式TCP/IP的优化设计与硬件实现mahaiyan导语:随着计算机网络技术和电子信息技术的迅猛开展,Internet的使用越来越普及随着计算机网络技术和电子信息技术的迅猛开展,Internet的使用越来越普及,信息家电和智能仪表等可以接入Iriternet的非PC设备越来越多,将各类电子设备接入Internet的需求也越来越大。电子设备接入Internet。有多种解决方案:在51系列单片机上运行经过裁剪的TCPIP协议栈;使用一些ASIC实现TCPIP的芯片,如AnalogDevices推出的InternetModem;也可使用嵌入式操纵系统自带的TCPIP协议栈。在某些对网络速度要求不高
2、的领域,可用单片机实现TCPIP;在对性能要求高的场合,可选择后两种方案。1嵌入式TCPIP的硬件构造图1是嵌入式TCPIP系统的硬件构造。其中CS8900A是CirrusLogic的网络控制器,芯片内部已设置帧过滤器自动抛弃无效帧,减轻CPU负荷,进步CPU对网络的访问效率。CS8900A工作机制主要是通过设置好其内部各存放器的值,然后就可以自动开场工作。在网络接口局部,由于是RJ45接口,所以须使用E2023传输线变压器对网络中的信号进展转换。通常TCPIP协议栈需要大量的RAM来存储需要被应答的TCP包。假如在规定时间内未被应答,那么重发该TCP包;被应答以后释放。为了减小RAM的使用量
3、,当数据包需要重新发送时,假如可以重新产生数据包所需的数据,那么可不存储需要被应答的TCP包。由于网络中数据非常多,假如把所有的数据都读到内存中再判定是否应丢弃帧,那么显然效率不高。所以边读取数据边判定而没有一开场就把整个帧全部读到内存中。在程序里定义了帧中各局部的相对地址,可以方便地对帧的各字节寻址。这样的设计是基于进步访问速度考虑的。在CPU中帧的存放方式,定义PacketRAM变量为存放帧的首地址。图2给出了CPU中TCP/IP的内存划分,以及内存中帧的各个字节的定义和相对位置。2嵌入式TCPIP的优化设计TCPIP一般采用C语言或者混合汇编。使用可重入函数和一般指针gellercpoi
4、nter使得程序代码增大,运行速度降低;使用函数指针时,需要手动重建调用树calltree,或者将函数指针调用的函数设置为可重入函数。21嵌入式TCPIP输入输出流程与PC机TCPIP协议一样,嵌入式TCP/IP采用协议分层的构造:应用层、TCP层、IP层和网络设备接口层。图3描绘了输入和输出数据包的流程以及需要调用的函数。输出时,TCP层先查看unsend队列,发现非空,将数据包插入队列;发现为空,那么查看对方窗口是否够大可以接收这个数据包。然后,填写TCP头部信息。IP层选择网络设备接口,目的IP和该接口的子网掩码相“与是否即是子网掩码,然后调用这个接口的Output函数来发送。输入时,T
5、imer函数调用每个接口的Input函数。IP层判定IP版本、IP校验和,以及是否应转发数据包,然后根据IP头部的protocol字段将包传给相应的高层处理。TCP层,须判定TCP校验和,并在现有的套接字中查找,判定是否有套接字可接收这个数据包,判定TCP序号是否为希望的,然后更新这个连接的状态包括释放被应答的数据包和TCP状态机的转化等,调用该套接字的回调函数recv。2.2嵌入式TCPIP的程序构造Tliner函数功能是调用TCPTimer处理TCP数据包的重发等功能,调用每个接口的Input函数接收到达的数据包。Timer函数必须在短时间一般为20ms内被调用一次,否那么接收数据包和TC
6、P定时等功能将停顿。如图4所示,程序主流程是一个大循环,在循环中处理发送数据包等应用层协议的同时,查询变量bTimeOut,在定时中断中将bTimerOut设置为真。应用层在程序流程中反复查询bTimerOut是否为真,假设为真那么调用Timer,然后设置bTimerOut为假。在使用嵌入式操纵系统时,还要留意网络设备驱动函数被重入的问题。以NE2K的以太网卡为例,拷贝数据包到网卡缓存前要先设置存放器如起始地址。假如设置完存放器以后中断发生且放重入。那么存放器的设置被修改,中断返回以后拷贝将出错。2.3嵌入式TCPIP运行速度优化TCPIP发送经过中主要的运算量集中在3局部:应用程序将数据拷贝
7、到RAM;计算TCP校验和;将RAM中的数据包拷贝到网络设备的发送缓冲区。对于每个字节数据,两次拷贝大致共使用122=24个指令周期;计算TCP校验和使用16个指令周期。采用12MHz晶振,最高网络传输速度为25KB/s。为了进步速度可以采用快速CPU或者进步晶振频率。另外,尽量防止使用Reentrant函数。Reentrant类型的函数比一般函数速度要慢很多,但某些时候为了程序构造的需要必须使用Reentrant,这就需要在速度和构造之间作一个选择。选择的方法有:使用“指定存储类型的指针memoryr-specificpointer;精简协议栈去除运算量大但是用途不大的功能,目前TCP定时重
8、发时间是固定的,也没有拥塞窗口控制和IP层路由;防止数据包不必要的拷贝;优化计算校验和与内存拷贝函数。3TCPIP的嵌入式实现TCPIP协议实现一般以软件方式嵌人到ROM中,然后通过网络通讯技术与专用嵌入式网关连接,运行TCPIP协议,并提供TCPIP到用户的轻型网络的连接和路由功能。3.1内存治理方法和无多余数据包拷贝的实现嵌入式TCP/IP的内存治理可用链表方法,即根据数据包大小分配相应大小的内存块。如图5所示,链表将内存块链接起来,used字段表示该内存块是否正在使用,pStart和pEnd表示数据局部有效数据的开场地址和完毕地址。分配时,搜索内存链表找到一个没有分配的比所需空间大的内存
9、块,截取所需的大小。该内存块被截取以后可能还有较多剩余,这时将剩余局部从原内存块中别离出来,成为一个新的内存块,并插入链表。释放时,将used置为假。假如pNext或者pPre指向的链表单元也是空闲的,那么将其与自己合并。以防止内存分片。在协议层之间传送数据包只要传送内存块的起始地址即可。这种内存治理方法空间浪费小,但运算量相对较大。3.2整序、重发与窗口控制的实现使用队列缓存的方式来实现整序、重发和窗口控制。队列的一个元素指向一个数据包,队列的最大长度没有限制。对于整序,使用ooSeq队列,假如发现接收的TCP包序号并不是希望的,但序号在接收窗口内,此时不能立即接收这个包也不应丢弃,先将这个
10、包放入ooSeq队列。当一个希望的TCP包被接收以后,再查看ooseq队列如今是否有TCP包成为了希望的数据包,假如有那么将其取出并处理。对于重发,使用unacked队列,每个需要被应答的TCP数据包发送以后都要放入unacked队列,直到被应答后才从队列中删除。TCP重发定时只针对unacked队列第一个TCP包。假如定时超出,那么重新发送;假如重发次数超出规定值,那么报错。对于窗口控制,使用unsend队列,假如发现对方的窗口过小无法接收这个数据包,那么只发送局部数据,将多余局部放入unsend队列,等待对方发来TCP包通知新的窗口大小时,再次判定是否可以发送。在unsend队列不为空的情
11、况下,须发送的数据包都应插入unsend队列。3.3捎带应答的实现捎带应答是指,当对方一个需要应答的TCP包到达时,不马上给予应答,而是等待一段较短的时间。假如在这段时间内有数据发送,那么会捎带给予应答,进而减少了包的发送数目。假设暂时没有数据须发给对方或者数据还未预备好,那么等待一定的时间;假如在该时间内预备好了数据,那么可使用捎带应答。使用捎带应答就不可能对每个帧都作确认,可用对某个帧确实认来代替对该帧之前所有帧确实认。4总结嵌入式系统中大量存在的是816位低速处理器,在进展Internet接入时,由于本身资源的限制,很难实现完好的TCPIP协议。本文从既实现相应的功能又节省系统资源角度出发,对协议进展有针对性的模块化裁剪和优化设计,可以在单片机ARM上嵌入TCPIP协议簇实现嵌入式Internet接入。经过优化设计的嵌入式TCPIP,支持套接字形式的多个TCP连接;支持多个网络设备;支持通过网关发送数据包和数据包转发功能,响应ping命令;支持TCP包的整序、重发和窗口控制流量控制。理论证实,这种设计方式灵敏,能按用户需务实现很多复杂的功能。0
限制150内