《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于8位微处理器的嵌入式TCP/IP协议栈剖析

基于8位微处理器的嵌入式TCP/IP协议栈剖析

2009-09-25
作者:伍洲凯 王 波

  摘  要: 对嵌入式TCP/IP协议栈发展现状进行了分析,并详细剖析了嵌入式TCP/IP协议栈的实现细节及基于8位微处理器实现的技术思路。

  关键词: 微处理器  嵌入式  TCP/IP  协议栈

 

1 基于8位微处理器的嵌入式TCP/IP协议栈的意义

  随着Internet的爆炸式增长,TCP/IP已经成为通信领域事实上的国际标准。对于嵌入式系统而言,能够通过自身的嵌入式TCP/IP协议栈连接Intranet,甚至Internet,将使其具有更好的实用性,且可带来巨大的经济效益。目前出现了很多依靠通信技术开发出的十分有用的嵌入式系统应用实例。例如嵌入式系统可以通过低带宽的无线链路传输电度表读数。采用全球定位系统GPS技术和无线链路的嵌入式系统可以用于确定在国内任何地方行驶的车辆的准确位置、速度、油压和其他参数。

  传统TCP/IP协议栈(包括桌面PC和服务器中的TCP/IP协议栈以及一般的基于32位的嵌入式TCP/IP协议栈等)的实现需要大量的存储器资源。这是由于这些实现的代码量偏大,且运行时也要耗用大量内存。因此,存储资源有限的8位系统无法满足这种需求。现场智能化仪表多采用8位微处理器,如果能够在低端8位微处理器上实现连网的功能,其经济效益将非常可观,应用前景极其广阔。

2 嵌入式TCP/IP协议栈发展现状

  目前已存在的TCP/IP协议栈大致分为2类:(1)沿用了BSD TCP/IP协议栈的实现思路。(2)完全与BSD TCP/IP协议栈无关的实现。

  由于BSD协议栈最初是针对工作站设计的,而并非是针对嵌入式设备设计的,因此,沿用BSD TCP/IP协议栈实现思路的嵌入式TCP/IP协议栈(如InterNiche NicheStack)通常都比较复杂,且代码较多,所以一般都在32位微处理器上实现。

  另一类完全与BSD TCP/IP协议栈无关的实现通常都对通信环境做了某些假设,从而可以使用简化的模型来实现TCP/IP协议栈,如PIC micro stack。通常假设嵌入式TCP/IP协议栈只与那些具有完整标准的TCP/IP协议栈的系统进行通信,即简化的TCP/IP模型可以通过远端完整的标准TCP/IP协议栈进行通信。但是,如果远端也是一个简化的嵌入式TCP/IP协议栈,通信就有可能失败。这类TCP/IP协议栈一般都定位在16位甚至8位微处理器上实现。

  TCP/IP模型通常可以针对某个具体的应用进行简化。以Web服务器应用为例,由于Web服务器不使用TCP/IP协议栈的紧急数据功能,也不需要维持活动连接(在HTTP协议中定义的),因此针对Web服务器应用开发嵌入式TCP/IP协议栈时,前述功能不需要实现。

3 嵌入式TCP/IP协议栈的技术剖析

  嵌入式TCP/IP协议栈通常都包括IP、ICMP、TCP和UDP等几个协议。下面分别针对这几个协议进行相关技术剖析并探讨其基于8位微处理器实现的技术思路。

3.1 IP协议

  从网络接口层进来的数据包,首先将被网络层的IP协议处理。IP协议对数据包进行一些简单的检查,如数据包的目的IP地址是不是本地IP地址,同时校验数据包。由于8位嵌入式TCP/IP协议栈几乎不需要使用IP选项,因此对于接收到的数据包中的IP选项,可以忽略不处理。

  对于IP协议中的分段重组功能,可以使用单独的缓冲区来实现。当一个分段被接收后,将被拷贝到缓冲区中的相应位置,同时使用位图来跟踪指示哪些分段已成功接收。根据IP协议可知,一个分段的第一个字节在缓冲区的位置必然是8的倍数,也就是按8字节进行对齐,因此,位图只占用很少的内存。当所有分段被正确接收后,重组好的分组将被传送给TCP协议层进行处理。通常8位嵌入式TCP/IP协议栈传输的单个分段的数据量都比较小。如果在某些具体应用或者某些具体环境中能确保8位嵌入式TCP/IP协议栈接收到的分组不存在分片的分段,则可以忽略实现IP协议的分段重组功能。

  IP协议有组播和广播的功能,因此IP分组的目的地址可以是组播地址或者广播地址。IP广播在许多基于UDP协议的应用中经常被使用,如Microsoft Windows File-Sharing SMB协议。IP组播多用于多媒体的发布,如RTP。如果要使协议栈支持基于UDP协议的应用,则除了要实现UDP协议外,通常还应该实现IP广播和组播功能。

3.2 ICMP协议

  ICMP主要用来进行网络故障诊断,如常用的Ping程序就是利用ICMP协议的回应机制(Echo)来测试网络的连通性。在8位嵌入式协议栈中,一般应该实现ICMP协议的回应机制,而其他功能则可以忽略。

  ICMP的回应机制就是对接收到的回应请求消息(Echo Request)返回一个回应应答消息(Echo Reply)。因此实现起来很简单,只需要将接收到的回应请求消息中分组的源端IP和目的端IP交换一下,然后将该分组的ICMP头部设置为ICMP回应应答消息类型,最后按标准方法计算ICMP校验和即可。

3.3 TCP协议

  由于TCP协议包含超时重发机制,因此其实现需要一个定时器。接收到的分组经过IP协议层处理后,就可交给TCP协议层处理,具体来说就是调用TCP协议实现的接口函数。如果分组中除了TCP头部外,还包含应用数据,则TCP协议将把该数据传给某个具体的应用层协议做进一步处理;如果分组只是确认前一次数据的成功发送,则更新连接状态信息(Connection State),并且通知某个具体的应用层协议可以发送新数据。

  TCP允许半打开的连接(Half-Open Connection),即该半打开的连接正对连接请求进行监听。在实现中,可以使用链表来组织所有正监听的连接,且可以使用16位的端口号来惟一标识每个正监听的连接。当一个连接请求到来时,根据连接请求指定的端口号,查找该链表。同时该链表随着应用层程序的运行,可以动态调整。

    当发送数据时,应用层程序必须检查TCP协议的发送窗口的大小,并根据其大小来调整本次发送的字节数。发送窗口大小取决于可用内存的大小和数据接收者声明的窗口大小。在发送数据时,先要用缓冲空间来缓冲需要发送的数据。如果缓冲空间不可使用,则必须等待直到缓冲空间可用为止。当从接收者接收到确认信息后,缓冲空间变为可用。当缓冲空间可用时,将通知应用程序可以发送数据了。

  大多数TCP协议的实现中都使用滑动窗口机制来发送数据。通过滑动窗口机制,多个数据段可以连续同时发送。如果不使用滑动窗口机制,则需要在每次发送完一个数据段后等待确认信息,当接收到确认后才能发送下一个数据段。在基于8位微处理器的协议栈中,不推荐使用滑动窗口机制。这是由于滑动窗口算法需要使用许多32位操作数,而在许多8位微处理器上32位的操作效率非常低下。而且滑动窗口机制需要较多的缓冲空间来缓冲多个要发送的数据段,这对内存资源有限的8位微处理器来说比较浪费。此外,滑动窗口机制并不是TCP协议必需的,没有滑动窗口机制,完全不会影响网络的互联,只是发送效率比较低而已。

  为了得到合理的重发时延,TCP需要持续对该活动连接进行回旋时间(Round-Trip Time,RTT)的评估。在TCP协议中,可以通过定时器来评估RTT。具体方法是:每个活动连接维护一个计数器;每当定时器触发时,对每个刚发送了数据,且当前还没有接收到确认信息的活动连接计数器加1;当收到确认信息后,该连接计数器的当前值就作为RTT样例值,结合标准的RTT评估函数就可以得到RTT的评估值,最后将该连接的计数器清零。

  TCP重发机制的实现依赖于定时器。每个活动连接维护一个重发时延值,该值取决于RTT。当定时器触发时,每个刚发送了数据且当前还没有接收到确认信息的活动连接的重发时延值减1,当重发时延值减为0时,该连接重发前一次发送的数据。数据重新发送完后,重发时延值设为初始值。重发数据的来源有2种方式:(1)缓冲区,即当数据发送完后,先放到缓冲区中,直到收到确认信息后才将该数据从缓冲区中删除。(2)不对发送的数据进行缓冲,当重发时,通知应用程序重新获得前一次发送的数据。

  TCP流量控制机制的目的在于使性能和内存大小具有较大差异的主机间能够进行通信。每一个TCP数据段中指定了发送者可用的缓冲空间的大小。发送者发送的数据不应该大于接收者指定的缓冲空间大小。如果接收者已不能接收数据,则指定可用的缓冲空间大小为0。

  TCP拥塞控制机制限制了网络中并发的TCP数据段的数目。拥塞控制算法非常容易实现,只需少量的代码。如果协议栈没有实现滑动窗口机制,则每个活动连接只能一次发送一个TCP数据段。这样,网络中并发的TCP数据段就得到了控制,从而可以忽略拥塞控制机制的实现。

  TCP紧急数据机制提供了应用到应用的通知机制。应用程序可以使用该机制使某些数据流比正常的数据流更快地发送出去。紧急数据的含义由接收应用程序负责解释。如果要实现紧急数据机制,则会大大增加协议栈的复杂度。因此在基于8位微处理器的嵌入式协议栈中,一般都忽略该机制。

  每个TCP连接都需要一定的状态信息。由于这些状态信息必然要占用内存,因此在实现时应该最小化TCP连接所需要的状态信息。如果实现TCP滑动窗口机制,则会大大增加TCP连接所需要的状态信息。滑动窗口机制需要每个TCP连接都必须保存一些32位序号信息,而且如果要支持宿主机(一个主机有多个IP地址),则每个连接还要保存更多的信息。因此,对于基于8位微处理器的嵌入式协议栈而言,必须忽略一些机制。

3.4 UDP协议

  与TCP协议相比,UDP协议非常简单。UDP主要应用于不同的进程之间链路的多路复用。它没有复杂的机制,只需要按照协议标准实现。

4  结束语

  一个实用的基于8位微处理器的嵌入式协议栈首先要保证能和其他协议栈正确通信,这既包含完整的协议栈,也包括同样是基于8位微处理器的嵌入式协议栈。其次要合理、高效地使用资源,尤其是存储资源。此外,还要求代码简洁高效。

 

参考文献

1 Tanenbaum A S著,熊桂喜,王小虎译.计算机网络.北京:清华大学出版社,1998

2 Comer D E,Stevens D L著,赵刚,林瑶,蒋慧译.用TCP/IP进行网际互连(第2版).北京:电子工业出版社,1998

3 刘磅.TCP/IP Ethernet—自控设备的新选择.http://www.gongkong.com,2003

4 刘磅.现场级TCP/IP控制器及其实践.http://www.gongkong.com,2003

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。