基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc

上传人:11****ws 文档编号:2399967 上传时间:2019-05-11 格式:DOC 页数:5 大小:271KB
下载 相关 举报
基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc_第1页
第1页 / 共5页
基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc_第2页
第2页 / 共5页
基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc_第3页
第3页 / 共5页
基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc_第4页
第4页 / 共5页
基于嵌入式网络接口的精简TCPIP协议栈的设计及实现.doc_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

1、基于嵌入式网络接口的 TCP IP协议栈的设计及实现 摘要: 根据嵌入式系统及其接入网络的特点 , 对 标准 TCP IP 协议栈进行裁减, 设计了 一种适用于 8 位微控制系统的嵌入式 TCP IP 协议栈。 将其移植到 UCOSII 上并与现有协议栈 uIP 进行对比测试。证明了其实用性。 关键词: TCP/IP 协议栈 嵌入式网络接口 UCOSII uIP 引言 网络化是现代电子设备普遍的特点,嵌入式系统也不例外。使嵌入式设备接入网络,扩宽了设备的通信范围,也使操作者更加便于操控设备。但是,嵌入式系统具有处理能力有限、存储资源少 、应用场合单一等特点,标准的 TCP/IP 协议栈显然不能

2、 直接运用于 8位的微控制系统中 。 本文量体裁衣,设计一种精简的 TCP/IP 协议栈, 主要包括 ARP、 ICMP、 IP、UDP 等协议。 本协议栈的测试平台配置如下: STC12C5A60S2单片机、 62256外部 RAM存储器、 RTL8019AS 网络芯片、 12M 晶振。 此协议栈可方便地移植到嵌入式实时操作系统UCOSII上,作为其一个任务,控制网络数据的收发 。 1 TCP/IP 协议 的设计 图 1 TCP/IP 分层模型 一些常用协议在 TCP IP 分层模型中所处的位置 如图 1 所示。 根据 TCPIP 协议分层的特点,在 编写代码的过程中, 可以 围绕三个特点来

3、 设计 : 第一,由于 协议栈每层都由头部和数据部分组成,而头部又由多个项组成,所以应 将 各层 头部封装成为结构体形式 。 第二, 当网络接口收到数据时, 需要向上层传递或者在本层处理,这就需要判断数据包的类型 。 比如,当硬件接口收到数据时,需要对数据包类型进行判断,如果是 IP 包,则向上传递给 IP 层,如果是 ARP 包则调用处理 ARP 包的函数。 第三,当网络接口发送数据时,数据从协议栈上层到下层,层层封装,最后由硬件接口发送。这就需要有对每层进行封装的函数 。 最后剩下的是数据的解封装和网络芯片驱动程序,数据的解封装相对简单,可在一个统一的函数中完成,而网络芯片驱动程序根据使用

4、的芯片类型设计 初始化、发送、接收数据三个函数 即可。 1.1 ARP 协议 在以太网中,一个主机要和另一个主机进行直接通信, 除了要知道对方的 IP 地址外 ,还 必须要知道目标主机的 MAC 地址。 它就是通过地址解析协议获得的 1。 在通用计算机系统中 , ARP 高速缓存一般设计成双向数据链的形式,这样整个缓存便可动态增减。但是在这种非线性的链表进行表项匹配查找时比较费时,所以这种形式并不适用于嵌入式系统。 因此 ARP 的地址缓存采用了线性数组 的 形式 , 它在内存中是连续线性存储的, 查找速度快。由于嵌入式 网络接口的通信节点一般不 多 ,其 ARP 高速 缓存容量不需要很大,因

5、此 可 将 其高速缓存设计成固定大小。 ARP 协议主要实现的结构体和函数为: ARP 头部结构体 ARPHDR、判断是否为 ARP包 的函数 is_arp()、 对 ARP 数据进行 封装的函数 make_arp()。 1.2 IP 协议 IP 协议是 TCP/IP 协议簇中最为核心的协议,提供不可靠的无连接的数据报传送服务。TCP、 UDP、 ICMP 等 上层 协议 的 数据包都 要 以 IP 数据报的格 式传输。 标准的 IP 协议包括分段和重组等 功能, 实现 起来 比较复杂。 在嵌入式控制系统中,数据大都是少量而独立的,所以实现分段和重组不是必须的。 本协议栈 从两个方面对 IP

6、协议进行简化:第一, 对接收到的 IP 数据报 首先判断是否是自己的数据报 , 若不 一致 则丢弃该数据报 ; 否则进行 IP 校验和的验证 , 当数据报无误后 , 去掉头部 , 将 IP 数据提交上层处理。 第二, 负责对 UDP、 ICMP等 报文进行封装 , 交给数据链路层进行装帧。 IP 协议主要实现的结构体和函数为: IP 头部结构体 IPHDR、判断是否为 IP 数据报的函数 is_ip()、对上层数据 进行 IP 数据报封装的函数 make_ip()。 1.3 ICMP 协议 ICMP 协议是 IP 网络内为控制 、 测试 、 管理功能而设计的协议 。 ICMP 的报文类型很多,

7、 不同类型的报文由类型和代码字段共同决定。 在嵌入式系统中,控制管理等功能并不是必须的, 为了能够使用户了解设备是否可达 , 只要能够识别来自其他客户的回显请求并发送回显应答就可以了。 ICMP 协议主要实现的结构体和函数为: ICMP 头部结构体 ICMPHDR、判断是否为 ICMP数据报的函数 is_icmp()、对 ICMP 数据 进行 封装的函数 make_icmp()。 1.4 UDP 协议 本协议栈采用 UDP 作为传输层协议。从理论上看 , TCP 的可靠性是以许多复杂措施及由此而增加的开销为代价换来的 。 TCP 提供面向链接的 、 可靠的服务 , 而 UDP 是面向无连接 的

8、。由于 UDP 没有可靠性的保证机制 , 因此 能够充分发挥物理通信设备的速度 , 全速地进行数据通信 。 又因为 UDP 没有点对点接入的要求 , 可以实现 “一对多”、“多对多”的数据传输 。 UDP 协议的开销很小 , 传输率比 TCP 高 , 实时性 强。所以嵌入式 TCP/IP 协议中采用 UDP 协议作为运输层协议不失为明智之举。嵌入式系统中也可能存在对数据传输可靠性要求 很高的情况。由于 UDP 协议没有 超时重传 、流量控制 、 应答 确认 、 紧急数据 加速等机制 , 因此 为了 弥补它的缺陷 , 在应用层协议中加入相应的措施, 如给数据报加上顺序标识 、 定时等待 、 超时

9、 重传机制 、应答确认机制 等辅助性的措施 ,确保数据能够正确安全地 传输 。 从应用的角度看 , 本 协议栈主要是应用于家用电器上网。对于温度 、 烟雾和湿度传感器 等的每秒一次地集中监控来说 , 发送频繁 , 包较小 , 只需前端设备向网络中广播实时状态等数据即可 , 因此选用 UDP 较为合适。 UDP 协议主要实现的结构体和函数为: UDP 头部结构体 UDPHDR、判断是否为 UDP数据 包 的函数 is_udp()、将数据封装成 UDP 包的函数 make_udp()。 2 协议栈 处理流程 协议栈接收数据包的过程就是解析数据包的过程 , 处理流程如图 2所示。 首先当一个数据帧到

10、达时 , 网络接口控制程序将其读入缓冲区 , 并返回其长度。 其次,主程序判断接收数据包的类型 ( IP 或 ARP 包)调用响应的解包代码进行处理。如果是 ARP 包,则解析 ARP包,做更新 ARP 缓存或回应 ARP 请求等事宜。 若为 IP 包,则 进一步判断 数据包类型( ICMP或 UDP 包)调用相应的解包代码处理。若为 ICMP 包,判断是否为 ICMP 回 显请求,如果是制作回显包并发送。如果是 UDP 包,解析出数据交由应用层处理。 开 始系 统 初 始 化进 入 死 循 环获 取 数 据 , 做 些 什 么是 否 有 以 太 网 帧 到 达 ?是 A R P 数 据 包

11、吗 ? 是 A R P 请 求 吗 ?是 I P 数 据 包 吗 ? 是 A R P 响 应 吗 ?保 存 源 I P M A C 地址 到 A R P 缓 存制 作 A R P 响 应 包 ,并 发 送将 M A C 地 址 存 储到 A R P 缓 存是 I C M P 数 据 包 吗 ? 是 I C M P 回 显 请 求 吗 ?是 U D P 数 据 包 吗 ?制 作 I C M P 响 应包 , 并 发 送有 数 据 要 发 送 吗 ?制 作 U D P 包 并 层 层 打 包 发 送是否是是否是否否是否是是是否是否图 2 协议栈处理流程 3 协议栈 的 测试 及应用 本协议栈可方便

12、地移植到各种嵌入式操作系统上,如 UCOSII、 RT-Thread,作为其一个任务或者线程,管理网络接口数据的收发。 下面分两方面对本协议进行测试并与 uIP 协议进行对比 ,测试主机为连接在局域网上的 PC机。 3.1 数据 发送 接收测试 3 首先 使用 ping命令 对简化协议栈链接情况 测试, 测试情况见 图 3 所示,其中 (a)是不带系统的协议栈测试结果, (b)是协议栈作为 UCOSII一个任务的测试结果 2, (c)是 uIP1.0协议栈的测试结果。 这 3副图表明本协议的速度与 uIP 协议相差无几。 图 4是 进行数据的 发送 接收测试,上方是网络嗅探软件 MiniSni

13、ffer,左下方是串口调试助手,右下方是网络调试助手。测试过程如下:串口调试助手首先发送 0-9的数字给目的主机,并将发送的数据显示在自己的接收发送缓冲区域。此时网络调试助手收到 0-9的数据,并显示在接收区域。然后,网络调试助手发送“ hello”到 开发板 ,经过协议栈处理后,通过串口 发送给 PC机,并显示在串口调试助手的发送接收缓冲区域。而这两次网络数据的发送接收均被网络嗅探软件记录,并将数据的内容显示出来。 这表明本协议栈能够正常工作。 (a) (b) (c) 图 3 简化协议栈链接情况测试 图 4 数据接收测试 3.2 丢包率 测试 4 接下来,测试协议栈的可靠性。测试方法如下:

14、每隔 1 秒 、 0.1 秒和全速发送 一个 100字节的 UDP 数据包 , 共发送 1000包, 测试十次,计算平均 丢包率。 测试情况如表 1所示。 表 1 测试环境 1秒 /包 0.1秒 /包 全速 UCOSII下 0% 97.9% 61.0% 无操作系统下 0% 97.6% 58.5% 由表可知,当数据发送速率较低的情况下,几乎不丢包。但是随着数据发送速率的增加,丢包的现象越来越严重。然而在嵌入式控制系统中,数据随频繁发送但不需要高的速率和大的数据量。此外, 如果加入上层确认机制或超时重传等机制,即使有丢包的情况,数据也 能够被 安全的被 送达 。 在全速传送 100 字节 UDP

15、数据包情况下,数据速率可达 14.7K/S。 本设计已实际应用于以太网转串口的项目中。 结束语 由于本协议栈设计思路清晰,代码简短 (1.7K RAM, 7K ROM),所以很容易修改及移植。本协议栈探索了如何在嵌入式系统中编写一个精简的 TCP/IP 协议栈,未深究协议栈内存管理以及操作系统中对协议栈的影响 , 仍有需要改进和完善的地方 。 参考文献 1 2 LABROSSE J J嵌入式实时操作系统 uC/OS- M 2版邵贝贝,译北京:北京航空航天大学出版社 , 2005 3 刘波涛,冯翠丽 , 王青海 应用 RTL8019AS 的嵌入式 Web服务器硬件实现 长江大学学报 A, 2008,5:75-78 4 廖凌 , 刘旭儒 , 史仪凯 一 种基于 uC/OS- 的嵌入式以太网通信实现方法 计算机测量与控制 , 2010,18(5): 1142-1147

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 实用文档资料库 > 策划方案

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。