嵌入式TCPIP协议的与分析研究.docx
- 文档编号:11083316
- 上传时间:2023-02-24
- 格式:DOCX
- 页数:13
- 大小:53.74KB
嵌入式TCPIP协议的与分析研究.docx
《嵌入式TCPIP协议的与分析研究.docx》由会员分享,可在线阅读,更多相关《嵌入式TCPIP协议的与分析研究.docx(13页珍藏版)》请在冰豆网上搜索。
嵌入式TCPIP协议的与分析研究
嵌入式TCP/IP协议的分析与研究
摘要:
嵌入式TCP/IP协议不同于应用在PC机上的TCP/IP协议,Internet上面的各种通信协议对于计算机存储器、运算速度等的要求比较高,而嵌入式系统中大量存在的是8位和16位MCU,支持TCP/IP等Internet协议将占用大量系统资源,或根本不可能。
为了既实现相应的功能又节省系统资源,需要对协议进行有针对性的模块化裁剪,在单片机上嵌入TCP/IP协议簇的一个子集。
文章根据各种MCU自身的特性,实现TCP/IP协议的方法和实现嵌入式Internet的方案及TCP协议的机制裁减方法,同时用设计实例证明了嵌入式TCP/IP的可行性。
关键词:
嵌入式TCP/IP;嵌入式Internet;TCP协议的机制裁减
1绪论
在Internet日益普及,信息共享程度不断提高的今天,人们的工作和生活方式发生了根本性的变化。
单片机或微控制器(MCU>已经在家庭和工业的各个领域得到了应用,通称嵌入式系统。
但目前大多数嵌入式系统还处于单独应用的阶段,一般都是孤立于Internet以外。
如果嵌入式系统能够连接到Internet上面,则可以方便、低廉地将信息传送到几乎世界上的任何一个地方。
于是嵌入式Internet技术就应运而生。
将嵌入式系统与Internet结合起来的想法其实很早以前就有了,主要的困难在于,Internet上面的各种通信协议对于计算机存储器、运算速度等的要求比较高,而嵌入式系统中大量存在的是8位和16位MCU,支持TCP/IP等Internet协议将占用大量系统资源,或根本不可能。
为了既实现相应的功能又节省系统资源,需要对协议进行有针对性的模块化裁剪,在单片机上嵌入TCP/IP协议簇的一个子集。
2TCP/IP协议分析
TCP/IP通常被认为是一个四层协议系统,分别为:
链路层、网络层、传输层、应用层,每一层都有相应的协议集合来实现不同的功能,其层次结构和主要的网络协议如图3.1所示。
2.1链路层协议分析
链路层的主要作用是为上层协议发送和接收数据包。
链路层中重点分析的为ARP协议。
以太网上数据报的传输是采用网络的MAC地址来进行识别的,这就要求系统有实现IP地址到MAC地址的转换的功能,即ARP(地址解读>协议。
ARP协议可以分成ARP请求协议和ARP响应协议。
系统要同其它计算机通信,就必须要实现ARP响应协议。
ARP请求协议建立了一个IP地址到MAC地址的映射。
如果嵌入式系统的资源有限,可使用以太网广播帧发送数据分组,也可以把数据分组发往固定的路由器,由路由器转发数据分组。
RARP(逆地址解读协议>主要用于无盘工作站中,嵌入式Internet中无须实现此协议。
图2.1TCP/IP层次结构图
2.2网络层协议分析
网络层处理分组在网络中的活动。
其协议包括IP协议<网际协议)、ICMP协议 IP协议是TCP/IP族的核心协议,它使异构网络之间的通信成为可能。 因此,如果嵌入式Internet,需要跨越不同的网络进行通信就必须要实现IP协议。 所以IP协议需要完整实现。 要特别注意IP包最大可以为65k,可以分段传输,而在嵌入式系统中根本无法容纳如此大的数据包,因此一般不支持分段。 单片机一般采用发送小数据包的方式,以避免分段。 ICMP协议主要用来传递差错报文以及其他需要注意的信息。 我们通常使用的应用程序Ping就是采用ICMP协议来测试网络的连通情况。 对于普通的嵌入式Internet的应用而言,在ICMP协议中能够测试网络的连通情况即可,因此只需实现ICMP中类型号为0、代码为0的Ping应答协议即可。 通常嵌入式Internet不考虑ICMP协议。 2.3传输层协议分析 传输层主要为两台主机上的应用程序提供端到端的通信。 传输层有两种不同的传输协议: 面向连接的TCP(传输控制协议>和无连接的UDP(用户数据报协议>。 TCP是一种面向连接的协议,它提供高可靠性服务。 TCP在传输前必须先通过“三重握手”在主机间建立TCP接入,它所传数据流采用了顺序号和应答措施,可以发现数据的丢失、段的失序和对传输错误的排除,所以TCP协议提供的是数据流的可靠传输。 但相对于UDP,它的可靠性是以复杂性为代价的,需要复杂庞大的程序来实现。 UDP提供的是无连接的不可靠的服务,可能出现数据包的丢失、重复和连接失败等错误。 但是正因为没有保证可靠性的机制,它可以实现高速发送,充分发挥物理传输设备的速度。 UDP适合用在通信介质十分可靠的情况,例如以太网等。 传输层有两个可选择的协议,所以就应该考虑该用那个协议传输数据报。 下面用例子来说明: 对楼宇散布各处的温度和湿度传感器的每秒一次地集中监控来说,选用UDP或TCP都关系不大;而对独立的、又不太重要的传感器监控,选用UDP也够了。 而进入数据库的传感器监控结果,因其可靠性要求,则需用TCP。 另外,Web和Email也采用的是TCP。 2.4应用层协议分析 应用层协议是TCP/IP协议族中最大的一个子集,其种类非常繁多。 最常用的有Telnet<远程登录协议)、FTP<文件传输协)、SMTP<简单邮件传送协议)、HTTP<超文本传输协议)等。 在设计中用到哪个应用程序,主要是根据嵌入式系统的用途来确定。 如果系统要求采用Email来发送信息,就需要针对SMTP协议来实现;如果系统要求通过浏览器的方式来访问,那么系统就应该实现嵌入式WebServer的相应协议。 3嵌入式TCP/IP协议概述 传输控制协议/网间协议 由于嵌入式系统与PC机的差别很大,因此在嵌入式系统中实现TCP/IP协议与PC机操作系统中的实现有很大的不同。 由于嵌入式系统没有一个多任务的操作系统,而且又是直接面对硬件,所以嵌入式TCP/IP协议在应用层上要求简单。 同时,不同嵌入式系统对嵌入式Internet所采用的应用层协议要求不同,而且应用层的协议还要和链路层实现的协议相对应。 因此,系统要根据自己的需要和链路层协议的实现来选择和简化应用层的协议。 传输层主要为两台主机上的应用程序提供端到端的通信。 传输层有两种不同的传输协议: 面向连接的TCP(传输控制协议>和无连接的UDP(用户数据报协议>。 TCP是面向接入即传输前必须先通过“三重握手”在主机间建立TCP接入,它所传数据流采用了顺序号和应答措施,可以发现数据的丢失、段的失序和对传输错误的排除,所以TCP协议提供的是数据流的可靠传输。 但相对于UDP,它的可靠性是以复杂性为代价的,需要复杂庞大的程序来实现。 UDP提供的是无连接的不可靠的服务,可能出现数据包的丢失,重复和连接失败等错误。 但是正因没有接入机制,它可以实现高速发送,充分发挥物理传输设备的速度。 UDP适合用在通信介质十分可靠的情况,例如以太网等。 网络层处理分组在网络中的活动。 其协议包括IP协议<网际协议)、ARP协议<地址解读协议)、ICMP协议 IP协议是TCP/IP族的核心协议,它使异构网络之间的通信成为可能。 因此如果嵌入式Internet,需要跨越不同的网络进行通信就必须要实现IP协议。 ARP协议实现将逻辑IP地址映射为物理地址。 ICMP协议主要用来传递差错报文以及其他需要注意的信息。 我们通常使用的应用程序PING就是采用ICMP协议来测试网络的连通情况。 对于普通的嵌入式Internet的应用而言,在ICMP协议中能够测试网络的连通情况即可,因此只需实现ICMP中类型号为0、代码为0的PING应答协议即可。 通常嵌入式Internet不考虑IGMP。 链路层主要作用是为其上层协议发送和接收数据包,根据物理层的不同,主要协议有以太网、令牌环网、FDDI<光纤分布式数据接口)及RS232串行线路协议等。 可由选择的网络接口芯片完成。 4嵌入式Internet技术原理及方案 嵌入式Internet技术,也就是将嵌入式系统与Internet结合起来实现系统网络化,涉及的两个关键问题即传送信息的媒质和采用的协议。 与Internet相联接的途径可以是以太网或者电话线等媒介。 而在大多数工作场地都配有以太网,电子装置通过集线器 在家庭中,也有电力线和电话线等载体可以利用。 如果是与局域网连接,只需要为该装置设置硬的或软的IP地址就可。 如果是利用电话线路,可以使用电话用户的ID。 现在实现嵌入式电子装置的访问连通,几乎不成问题。 所以嵌入式Internet技术的关键问题在于如何在MCU中实现Internet上被广泛使用的TCP/IP通信协议。 但是TCP/IP通信协议对于计算机存储器、运算速度等的要求比较高,普通单片机无法达到其要求。 4.1实现TCP/IP协议的方法 4.1.1高档MCU芯片 采用ARM内核的系列处理器或者386EX等高档MCU,其运算速度快,性能高,在芯片上可以运行实时操作系统(RTOS>,同时也可以嵌入完整的TCP/IP协议。 4.1.232位MCU芯片 32位机也有足够的资源和能力运行TCP/IP协议和一些嵌入式操作系统。 所以原则上讲,实现思路和高档机一样。 4.1.38/16位MCU芯片 由于8位和16位MCU的处理能力和存储问题,要实现TCP/IP协议是比较困难的。 因此要根据其特点,对TCP/IP协议进行简化,保留其最基本的东西。 同时,上层协议可不用或者简单实现。 即将原来的TCP/IP协议转变成嵌入式TCP/IP协议,我们随后会具体介绍。 4.2实现嵌入式Internet的方案 4.2.1通过专用的WEB服务器实现 在现有的嵌入式系统中大量使用的是8位或16位MCU,并不要求每个设备都直接连到Internet上,用户可以通过Internet接近设备,然后再用轻量级网络扩展到多个设备上。 如电力线、RS-485、RS-232、I2C等。 专用WEB服务器作为子网设备路由器来转换和实现嵌入式系统与外部网的通信。 比如EmWare公司专门为嵌入式微控制器设备设计的网络服务器。 4.2.2通过专用的嵌入式网关(emgateway>相联 即嵌入式系统使用轻网络通讯技术与专用嵌入式网关连接,运行TCP/IP协议,并提供TCP/IP到用户的轻型网络的连接和路由功能。 4.2.3把标准网络技术一直扩展到嵌入式设备 由嵌入式系统自身实现WEB服务器功能,每个设备都可与Internet相连。 这种方法是目前最佳的解决方案,也是未来电器、设备的发展方向。 第三种方案的TCP/IP协议实现又分硬件固化和软件两种方式。 硬件方式是指用网络芯片实现TCP/IP协议,形成独立于各种微控制器的专用芯片,通过其标准的输入输出口,可与绝大多数单片机相连。 软件方式是把TCP/IP协议以软件方式嵌入到ROM中。 在软件方式具体实现时,又有以下两种不同设计思想: 第一种设计是针对高档MCU片上系统,如ARM7或386EX等,可运行嵌入式实时操作系统,实现较完整的TCP/IP协议。 采用这种方式最灵活,能按用户需求实现很多复杂的功能,但是采用这种方式对开发人员的要求比较高,开发周期也较长。 第二种设计是针对低档的8/16位MCU的嵌入式系统,考虑到其系统速度和内存的限制,不可能实现完整的TCP/IP协议,只能实现精简的TCP/IP协议。 5TCP协议的机制裁减 在传统传感器中嵌入式WEB服务器,远程用户就可以对传感器实现远程监控,这就是通常所说的基于Internet的网络传感器,通常数据传输量很小。 作为一种嵌入式Internet技术应用,在TCP之上实现有限的WEB服务,只需要一部分TCP服务机制,或者并不对TCP所有机制都有很高的要求。 针对这个这个特点,我们可以从前面讨论的四个方面对TCP协议进行裁减: 确认与超时重传机制、流量和拥塞控制、TCP连接状态和TCP运行状态机。 5.1确认与超时重传 5.1.1捎带确认机制 通信过程中,通信双方都必须对对方上一次发送来的数据给予确认。 这是保证传输可靠性的基本方法。 但是,如果接收方对每一个数据报文都返回独立的应答报文,会在很大程度上浪费带宽,造成通信效率的降低。 我们可以让发送方发送数据时捎带对上一次接收到的数据确认。 这样只需要在发送的TCP头部中设置一个应答标志位和一个确认序列号。 这样做不会额外增加网络上的数据报流量,可以有效提高通信质量。 5.1.2应用层参与重传 如果发出的数据包在一定时间 如果存储空间允许,可以定义分配两个缓冲区,一个存放待发送数据,另一个存放已发送数据,这样重发就变得很方便了。 但是,为了节省存储空间,TCP对已发送的数据不进行任何缓存,由应用程序重新生成数据,重复上一次发送过程。 当周期计时器减至0时,激活TCP重传事务,然后调用HTTP回调函数HTTP_Appcall<),检测重传标志位,进行重传工作。 如果在连接已经建立阶段,就重新生成重传数据,如果在连接建立或关闭过程中,说明丢失的是确认或应答包,根据不同的TCP连接状态,重发不同类型的数据包。 这样并不会增加应用程序的复杂性,因为确认重传的时机是TCP的责任,而应用程序只需要重发时使应用层数据指针重新指向上一次发送的数据即可。 应用层参与重传机制的实现,有效降低了对微处理器存储能力的要求。 5.2流量控制和拥塞控制 由于网络传感器传输数据量很小,我们没有必要牺牲大量的存储空间实现滑动窗口机制换取对流量和拥塞的控制。 我们可以采用停等协议,它是滑动取窗口协议的一个极限情况,只使用一个窗口。 发送方每发送一个分组,都等待确认。 收到确认后再发送下一个分组。 这样做即能够保证传输的绝对可靠,在数据量不大的情况下,传输的实时性也不会有明显的折扣。 更重要的是,化解了流量和拥塞问题。 当然,如果只是用一个窗口,还要求对方也使用简单的确认机制。 这可以通过设置TCP头部Windows字段来通知对方自己的接收缓冲区大小,避免对方连续发送大量数据造成接收缓冲区溢出,以至丢包。 5.3同时支持少数TCP连接 每个TCP连接由套接字唯一标识。 TCP初始化后处于端口侦听状态,当接到客户机建立TCP连接的请求时,除了发送“请求+应答”报文以外,还要记录该TCP的状态,包括源端IP地址、源端口号、目的IP地址、目的端口号、序列号等大量连接信息,以便对接收和发送的TCP段进行跟踪。 经过简化TCP机制,去除滑动窗口协议,我们尽量使用较少的TCP状态数据,这样可以节省存储开销。 另外,远程检测需要多用户同时访问检测页面,所以,应该同时支持多个TCP连接。 但是,如果同时处理多个连接的请求和应答,除了记录各个连接的状态信息之外,还要在不同状态之间切换,无疑会增加RAM的使用。 所以,可以仅支持十个TCP连接同时存在,即最多有10个用户同时访问服务器。 对于8位单片机来讲,这是合适的选择。 5.4TCP状态机 TCP的面向连接和可靠性传输等特性决定了每一个标准的TCP协议连接都要经过三次握手建立和拆除连接,这个过程可以用状态图机描述。 为了状态机的正常工作,即各种状态之间的正确切换,必须存储每种状态的相关信息。 因此,状态机越复杂,TCP协议实现的规模越大,维护状态机的开销就越多,对处理器存储能力的要求也越高。 一个标准的状态机可以分为服务器和客户机两部分,服务器状态机又分为被动建立连接和主动拆除连接两部分,而拆除和客户机之间的连接过程很复杂。 但是,服务器发送完数据,向客户机发送关闭连接请求后,客户机一般没有多余的数据要发送,所以当接收到服务器的关闭连接请求后客户机会直接发送FIN+ACK,服务器接到应答后,回应ACK,并直接进入“计时等待”状态,等待关闭。 这样服务器关闭TCP连接的过程就大大简化了。 通过以上分析可以,作为一种嵌入式Internet技术,我们可以根据特定的应用不失一般性的裁减掉复杂和冗余的机制。 这样,除去标准状态机中的客户端部分,简化服务器关闭连接过程<不失一般性),就得到图5.1的服务器状态机模型。 图中CLOSED、LISTEN、SYN_RCVD、ESTABLISHED、FIN_WAIT、TIME_WAIT分别代表“已关闭”、“监听”、“接收到SYN”、“连接已建立”、“FIN等待1”、“计时等待”等状态。 . 图5.1简化的TCP状态机 6设计实例 应用普通8/16位MCU形成嵌入式网关是最具发展潜力的一大热点。 而应用TCP/IP协议的以太网已经成为最流行的分组交换局域网技术,整个网络只有一种底层通讯协议,同时也具有开放的TCP/IP网络技术。 它可满足控制系统各个层次的要求。 工业控制领域中常用的现场总线和串行通信可以通过嵌入式网关与以太网相连,从而方便的实现控制网络与Internet连接,目前基于以太网的工业控制网络已经成为未来的发展趋势。 所以本设计采用在16位MCU中嵌入“裁剪”后的TCP/IP协议栈及以太网控制芯片驱动程序,并通过以太网接入Internet网络。 这种方案首先要求在链路层上,由于采用以太网的接人方式,系统必须要实现IEEE802.3标准,这可采用通用的以太网接口芯片RTL8019AS来完成。 其次,为了保证系统在以太网的通信,系统还需实现ARP应答协议。 在网络层上要实现IP协议,为了能够测试系统与网络的连接,系统需要实现ICMP协议中的ping应答协议。 在传输层上我们选择UDP协议。 应用层上单片机系统传递来自Ethernet和数据终端的数据,应用层只对大的数据报作打包拆报处理。 RTL8019AS是REALTEK公司生产的一种全双工以太网控制器,符合EthernetII、IEEE802.3<10Base5、10Base2、10BaseT)标准;与NE2000兼容;支持8位、16位数据总线;内置16KB的SRAM,用于收发缓冲,可降低对主处理器的速度要求。 外部RAM使用PSD4135(512KB>,从而为数据处理提供了很大的缓存,同时它也有地址锁存和地址译码功能。 使用E2PROM—93C46,可以将网卡物理地址和其他参数保存在里面。 这里的RTL8019AS就是处理以太网协议 数据的流向为: 请求信息从局域网中来,通过RJ45送到RTL8019AS,处理后的数据包送入80C196协议栈,由协议栈对数据包进行解读,得到原始请求信息。 请求信息再经过80C196的处理,产生回复信息。 回复信息到局域网的过程与上面正好相反。 RJ45为此系统与局域网的接口。 数据段的个数可从46Byte-1500Byte,不足46Byte时用零补足;超过1500Byte时,需要拆成多个帧传送。 前导位、帧起始位和帧校验序列仅供控制器本身用,主处理器收到的数据帧的组成依次包括: 接收状态、下一帧的页地址指针、目的地址、源地址、数据长度、数据段。 IEEE802.3标准中的数据长度值小于或等于0x0600时,表示数据段的长度;反之,表示数据帧的类型。 例如值为0x0800,表示数据段为IP包;值为0x0806,表示数据段为ARP包。 在选定硬件,完成各芯片间地址线、数据线及状态线连接后,开始软件设计。 软件设计主要包括: 芯片初始化程序、以太网控制器驱动程序、TCP/IP协议栈程序、系统网络配置程序。 芯片初始化程序用于设置MCU工作模式及外围芯片选择;以太网控制器驱动程序用于设置以太网控制芯片的工作状态及工作方式,分配收发数据的缓冲区;系统网络配置程序用于给监测系统分配IP地址及域名。 当网络有数据时,RTL8019AS在接收和处理完以太网数据帧后传送给单片机,80C196对数据包进行分析,如果是ARP<物理地址解读)数据包,则程序转入ARP处理程序。 如果是IP数据包且IP地址正确,则继续分析若是ICMP包,则调用ICMP处理程序。 若是UDP数据包,则80C196对数据解包后,将数据部分转存在PSD4135中或者通过串口输出。 反之,当有数据要发送时,80C196将调用UDP打包程序来封装数据并送入RTL8019的缓存中去。 具体流程为: 数据放到UDP的数据段->生成UDP校验->建立IP头-> 7嵌入式TCP/IP与UNIX中TCP/IP的区别 TCP/IP最先是在UNIX系统里实现的,后来的LINUX、DOS、WINDOWS也实现了TCP/IP,随后TCP/IP协议也被移植到其它嵌入式的处理器上。 由于嵌入式系统与PC机的差别很大,在嵌入式系统中实现TCP/IP协议与UNIX系统的实现有很大的不同,主要区别有以下几点: 7.1操作系统 不论是WINDOWS、UNIX、LINUX,它们都有一个多任务操作系统,这使得代码编写简单化。 嵌入式系统的TCP/IP是直接面对硬件,没有一个多任务操作系统平台,MCU中的程序结构一般是顺序执行和硬件中断相结合的方式,与高级操作系统中的多线程并发执行的方式截然不同。 因此,对于程序执行结构,单片机要考虑更多。 7.2内存分配 UNIX操作系统的存储管理策略能有效进行内存管理与分配,TCP/IP在实现时可以不考虑内存大小的问题,比如缓冲的处理上,mbuf、TCB等数据结构是一个存储链,这个链可以动态地增加和减小,根据需要随时分配,随时撤消。 而在嵌入式统中存储空间一般只有几十KB。 所以在设计时不但要考虑程序代码本身大小,还要仔细考虑缓冲区的设置。 一个最大的以太网数据包有1500多个字节,而嵌入式系统只能提供几十K字节的空间,并要被各个协议所用,所以只能开辟1536个字节的缓冲区来存放接收到的数据,收到一包就处理一包,其存储地址是固定的,而不是动态分配的。 7.3参数传递 在UNIX实现的TCP/IP源代码中,一般有很多的参数传递,而在单片机里允许传递的参数是有限的,同时参数传递的过程要浪费程序代码空间,也降低单片机的执行速度。 所以在单片机的实现里,一般不要做太多的参数传递,而多使用公共的全局变量来实现调用的过程。 7.4硬件接口 在UNIX里,对网卡驱动无一例外都是采用中断方式。 而在单片机的应用中,大部分的方案都是查询式的。 因为在单片机里处理一次中断、收取一个数据包一般要几毫秒的时间,这将封锁其它中断的产生。 另外电脑往往采用即插即用方式来驱动网卡,从而有良好的兼容性。 在单片机中,为了节省代码和I/O接口资源,网络接口控制芯片一般使用跳线方式,数据总线也采用8位DMA方式。 8结论 随着科技不断发展和人们对嵌入式系统之间进行互联的要求,嵌入式TCP/IP协议也必将不断的应用于我们嵌入式系统中,来实现嵌入式系统与Internet之间方便、低廉地进行信息的传递。 但是,目前在嵌入式系统中实现TCP/IP协议时,没有考虑安全性和地址自动配置等问题,而这些问题将是我们以后要考虑的重点问题。 相信随着嵌入式Internet技术的发展,在不久的将来,这些问题会得到解决。 (指导教师: 同晓荣> 参考文献: [1]王峰,张宏伟等.嵌入式Internet技术及其实现方案[J].微计算机信息,2003,12(19>: 23~26 [2]王勇,陈抗生.嵌入式Internet中的协议选择[J].电信科学,2002,4(2>: 36~38 [3]李明.康静秋.嵌入式TCP/IP协议栈的研究与开发[J].计算机工程与应用,2002,16(05>: 56~60 [4]KennethD.Reed,3com公司译.TCP/IP基础[M].北京: 电子工业出版社,2004 [5]KennethD.Reed,孙坦,张学锋等译.协议分析[M].北京: 电子工业出版社,2003 [6]陶波,丁汉等.基于嵌入式Internet的工业控制[J].测控
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 TCPIP 协议 分析研究
![提示](https://static.bdocx.com/images/bang_tan.gif)