微波EDA网,见证研发工程师的成长!
首页 > 测试测量 > 测试测量技术文库 > 基于SF0020芯片的嵌入式TCP/IP协议族设计与实现

基于SF0020芯片的嵌入式TCP/IP协议族设计与实现

时间:08-11 来源:互联网 点击:



图2 TCP有限状态机

由于网络中数据传输必然会产生数据丢失,TCP错误重传和数据重组尤为重要。错误重传是在发送了需对端确认的报文段后设置重传定时器,如果在定时器时限内未收到ACK该报文段被重发。因此当数据发送之后要等到ACK确认报文才能丢弃。数据重组是基于面向字节的序列号,实现重复数据的丢弃、乱序报文的重组。

3、协议族实现关键技术
3.1 协议族定时器的实现
ARP实现需要两个定时器。重传需要一个定时器,如果ARP报文发送后1秒中内没有应答则再次发送,本文实现连续4次重传后ARP将放弃;ARP高速缓存数据存储时间需要一个定时器,缓存内容保存时间为20分钟,同时允许管理员创建永久节点作为代理节点。
TCP实现为当前连接建立了如下六个定时器:连接建立定时器,重传定时器,延迟ACK定时器,持续定时器, FIN_WAIT_2定时器,TIME_WAIT定时器;去掉了保活定时器,因为该定时器仅是TCP连接的可选配置,在监控中的需要有应用程序实现更加严格的连接保持定时。本文根据实际监控网络情况修改了标准协议族定义的超时时间,使实时性得以提高。
3.2 协议族的内存管理策略
传入的分组是保存在内存中并将其传递给适当的协议作进一步处理的。同时,应用程序产生的数据也必须以分组的形式存储在内存中,并最终将其交给网络硬件设备传送出去。因此协议的高效性取决于如何管理保存这些分组的存储空间。本文对内存管理用以下两种方法做到快速分配存储空间,并且避免分组在各层协议之间移动时的数据复制。
发送数据报时采用大缓冲区方案:即将缓冲区划分的足够大(1514字节),提前留出协议首部字节的大小,能够存储最长的分组。接收数据报时采用链表方案:为了避免内存碎片的产生该缓冲区采用固定大小。链表的特点是允许快速封装而无需数据的复制,也就是说当接收到递交上来的数据报后,就分配一个新缓冲区,填写其中的内容后将新缓冲区插入保存此信息的链接列表中,这样就可以很容易的在某个信息的前面插入附加字节,而无需移动已经存在的数据。采用此方法可以优化TCP数据报的重组。
采用以上两种方法可以最大限度实现TCP/IP协议族内数据公用,无需额外数据搬移。
3.3 协议族数据流程
如下图3所示,用户待发送的数据首先通过socket接口程序进入TCP/IP协议族,分别进行TCP与IP的数据封装后查询ARP高速缓存,如果存在当前目的IP与硬件地址的映射则填充以太网帧头部信息后拷贝至以太网驱动程序空间立即发送,否则发出ARP查询报文,将当前用户数据拷贝至发送等待缓冲,进入接收状态等待ARP查询报文的应答。

由于输入操作发生在中断期间,此时设备驱动程序是不能调用任何过程来处理分组,也就是说中断服务程序并不直接调用IP,而是使用了消息传递的方式。当一个IP分组到达之后用消息通知主循环,由主循环调用协议族进行数据处理。如下图4所示,首先通过以太网子层分路到达帧,如果是ARP报文则检查更新ARP缓冲,收到ARP请求立即应答,若是应答报文则检查本地发送等待队列如有数据立即发送;如果是IP报文首先判定其协议类型,ICMP报文中的ping命令请求回显则立即应答,源站抑制报文交给TCP处理;若是TCP协议进入有限状态机进行解析最后将有效数据通过socket接口递交上层。


图3 协议族数据发送处理框图 图4 协议族数据接收处理框图

4、 结论
经过裁剪的嵌入式TCP/IP协议族,结构精简,实时性强,可以在SF0020芯片上稳定运行,基于该协议族的网络监控系统控制终端通过了专项测试达到期望的要求。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top