梅小华
(华侨大学信息科学与工程学院,福建泉州 362021)
提高51单片机TCP通信效率的软件方法
梅小华
(华侨大学信息科学与工程学院,福建泉州 362021)
以80C51单片机数据采集系统为研究对象,分析嵌入式传输控制协议(TCP)通信中速率较慢的可能原因.提出两点提高其传输效率的新方案,即修改上位机Nagle算法的延时确认时间,以及修改下位机TCP协议程序.实验结果表明:在相同的数据量(4 MB)下,经过修改的嵌入式TCP层通信速率在局域网中可以达到40~50 kB·s-1,是未修改前的10倍.
80C51单片机;TCP/IP协议簇;Nagle算法;延时确认;TCP包
目前,工业控制领域典型的80C51嵌入式 TCP/IP通信系统,主要有两种硬件方案[1-4].(1)采用80C51+网卡芯片,在单片机中实现TCP/IP协议并接入Internet;(2)采用固化TCP/IP协议的硬件芯片自动解析协议,实现Internet接入.后者程序已固化在硬件中,一般难以通过软件方法提高通信速率.因此,主要分析提高前一种方案的通信速率,其接口电路如图1所示.
图1 RTL8019AS与51单片机的接口电路Fig.1 Interface circuit for RTL8019AS and 51 single-chip
由于单片机中断资源有限,嵌入式系统与以太网通信主要采用的是软件查询方式,而不是中断响应方式.从以太网上传来的数据会先存至芯片上16 kB的数据缓存区.当单片机空闲时,通过对8019芯片标志寄存器的查询,来确认是否有数据到来,并进行接收.
嵌入式 TCP/IP协议的实现方法尚无统一标准,往往是设计人员根据具体工程的实际需要,结合TCP/IP规范进行裁减的.目前,虽然针对80C51单片机的开源嵌入式 TCP/IP代码的实现方式有多种多样,但大致遵循TCP/IP层次(链路层、网络层、传输层、应用层)进行开发.TCP协议是 TCP/IP协议簇的核心,是最复杂的协议,其独特的自动检错和重发机制,实现了数据的可靠通信.但是,嵌入式系统对TCP协议进行较大裁减,若设计不当,会严重影响通信速率.
以80C51单片机数据采集系统(图2)为例进行分析.图2中:上位机为装有Window s操作系统的PC机,下位机为单片机.由于51单片机处理速度和内存资源的局限,目前大部分开源TCP通信的处理流程,如图3所示.图3中发送数据的部分表示发送一次 TCP数据包.由于嵌入式IP协议没有分组功能,为了符合网络M TU的限制,在设计中最好在嵌入式TCP层进行分包处理.即在TCP层将所要发送的数据按网络M TU进行分包,然后交给IP层直接发送,如此循环往复.这种简单的TCP通信方式在低速小数据包中的应用是足够的,然而,一旦采集速度变高,数据量增大,就无法满足应用要求.
造成上述通信速率低下的原因是:上位机不是收到数据就直接发送确认,而是继续等待下一个数据包.而出现这种延时确认的情况,是为了解决Internet上出现所谓的“糊涂窗口综合症”问题.RFC(Request for Comments)申明,TCP发送端必须实现Nagle算法,并推荐TCP接收端使用延时确认算法.
Nagle算法要求 TCP连接上最多只能有一个未被确认的分包,在该分包的确认到达之前不能发送其他的小分包;而接收端延时确认算法,允许接收端接收到一个数据包后不立即进行确认,而是经过一段延时(一般为200 m s)后再发送该数据包的确认包.因此,在嵌入式 TCP/ IP通信系统中会经常触发上位机延时确认算法,而下位机在没收到确认之前是不能发送数据的.这对高速交互的采样系统而言,将产生明显的时延,降低TCP通信效率.
一个以太网数据包最大字节数是1.5 kB,扣除各个包头信息所占的字节数,真正有效的数据在1 kB左右.如果发送端每次都等接收端发出确认后再发送下一个数据包,那么在1 s内,发送端的发送次数为5次,总的发送数据量为5 kB.
图2 单片机数据采集系统Fig.2 Single chip data acquisition system
图3 嵌入式 TCP通信流程Fig.3 Communication procedure based on embedded TCP
采用以下两种方案,可以消除或减小延时确认的时间,达到提高嵌入式TCP/IP通信速率的目的.
(1)修改上位机Nagle算法的延时确认时间[5].这种方案虽然可以直接关闭 TCP的Nagle算法,不再受到未确认TCP包数量的限制,但对于数据包较小的情况会产生大量的分组,浪费大量的系统和网络资源,产生“糊涂窗口综合症”.
在实际应用中,修改上位机的Nagle算法延时时间比关闭算法更可行.即通过修改Window s操作系统在注册表表项TCPDelAck Ticks的值(H KLMSYSTEMCurrentControlSetServicesTcpipParametersInterface
(2)修改下位机TCP协议程序.虽然通过修改Nagle算法的设置来提高单片机通信速率的方法较为简单,但实际应用中却有诸多不便.例如,当 TCP通信端口采用公用服务如 H TTP的80端口时,修改该端口的延时确认时间必然影响正常的H TTP服务,而且对于每台上位都要手动进行修改,比较麻烦.所以对于大数据量的 TCP传输,直接修改单片机TCP层的代码更合理.
在实际操作中,可以采用类似滑动窗口的算法改变 TCP发送流程来提高速率.滑动窗口控制机制在上位机的TCP/IP协议中是很普遍的,但在下位机,为了简化设计往往忽略了该功能.采用类似滑动窗口的机制,只要设计得当,将强迫上位机发送确认消息.
具体算法有如下4个发送步骤.
(1)将应用层要发送的数据按以太网M TU划分为1 kB的大小分包.
(2)由于每个分包有1 kB,因此,将TCP层发送窗口大小设计为2 kB的倍数,如图4所示.考虑到实际中上位机TCP缓存窗口都不大,Window s操作系统一般只有几千到几万字节,所以将窗口直接设计为2 kB大小.
(3)连续发送两个分包后,发送窗口变为零,发送端就停止发送,等待确认.
(4)接到确认后,窗口设置为2,并重新开始步骤(2).
上述发送步骤似乎与图3并无太大不同,但由于连续发送了两个 TCP数据包,根据Nagle算法,TCP连接上只能有一个未确认的数据包.上位机在接收到两个数据包后,已经超过算法规定的未确认包数,因而要立刻发送针对这两个数据包的确认消息.这里需要注意的是:嵌入式TCP/IP的分包是在TCP层进行而不是在IP层进行,所以发送的两个TCP包到达上位机后不会在IP层被重组为一个包,上位机的TCP层才会马上进行确认.
在数据量较大的情况下,采用这样的方式来提高 TCP通信速率,既不用修改上位机的 TCP协议程序,又具有了部分滑动窗口控制的优点,使得数据流可靠地传输.经实验,在相同的数据量(4 MB)下,经过修改的嵌入式 TCP层通信速率在局域网中,可达到40~50 kB· s-1,是未修改前的10倍.
图4 TCP层窗口控制发送流程Fig.4 TCP congestion window controls send process
采用嵌入式TCP/IP技术的仪器具有组网灵活、成本低和通信距离远等优点.在需要高速传送大量数据的嵌入式系统中,上述两种方案可较好地满足嵌入式 TCP通信中速率较慢的问题.在此基础上,可实现以文件为单位如 HTTP,FTP等的传输服务,工作参数均达到项目要求,具有较好的实用性.
[1]BEHROUZ A F,SOPH IA C F.TCP/IP协议族[J].3版.谢希仁,译.北京:清华大学出版社,2001.
[2]李金梁,景博.嵌入式Internet中 TCP协议的设计与实现[J].微计算机信息,2005,21(7):40-41.
[3]金小明,李英姿,钱建强,等.8位机嵌入式 TCP通信速度的研究[J].电子测量技术,2007,30(7):67-70.
[4]李超,何先波,王安志,等.基于嵌入式 TCP/IP协议栈的拥塞控制研究[J].电脑知识与技术,2008,4(4):860-862.
[5]周志洪,王勇,陈抗生.基于Nagle算法的嵌入式 TCP协议[J].浙江大学学报:工学版,2006,40(1):41-44.
(责任编辑:陈志贤英文审校:吴逢铁)
A Software Method Improves the Transmission Efficiency with TCP Protocol for 51 Single Chip Microcomputer
MEI Xiao-hua
(College of Information Science and Engineering,Huaqiao University,Quanzhou 362021,China)
Taking the 80C51 single-chip data acquisition system as study object,this paper analyzes the possible reasons for slower speed,finally designs two solutions for imp roving the transmission efficiency of embedded transmission control protocol(TCP)communication.That is,modifying the host computer confirm time delay of Nagle algorithm or modifying the TCP protocol procedure for the lower computer.The experimental results indicate that the revised speed of embedded TCP layer communication in the LAN can reach 40~50 kB·s-1,which is 10 times faster than the pre-amendment one at the same amount of data.
80C51 single-chip;TCP/IP protocol suite;nagle algorithm;delayed acknowledgment;TCP packet
TP 273+.5
A
1000-5013(2011)02-0235-03
2010-03-16
梅小华(1978-),女,讲师,主要从事计算机控制方面的研究.E-mail:meixh@hqu.edu.cn.