梅小華
(華僑大學(xué)信息科學(xué)與工程學(xué)院,福建泉州 362021)
提高51單片機(jī)TCP通信效率的軟件方法
梅小華
(華僑大學(xué)信息科學(xué)與工程學(xué)院,福建泉州 362021)
以80C51單片機(jī)數(shù)據(jù)采集系統(tǒng)為研究對象,分析嵌入式傳輸控制協(xié)議(TCP)通信中速率較慢的可能原因.提出兩點(diǎn)提高其傳輸效率的新方案,即修改上位機(jī)Nagle算法的延時(shí)確認(rèn)時(shí)間,以及修改下位機(jī)TCP協(xié)議程序.實(shí)驗(yàn)結(jié)果表明:在相同的數(shù)據(jù)量(4 MB)下,經(jīng)過修改的嵌入式TCP層通信速率在局域網(wǎng)中可以達(dá)到40~50 kB·s-1,是未修改前的10倍.
80C51單片機(jī);TCP/IP協(xié)議簇;Nagle算法;延時(shí)確認(rèn);TCP包
目前,工業(yè)控制領(lǐng)域典型的80C51嵌入式 TCP/IP通信系統(tǒng),主要有兩種硬件方案[1-4].(1)采用80C51+網(wǎng)卡芯片,在單片機(jī)中實(shí)現(xiàn)TCP/IP協(xié)議并接入Internet;(2)采用固化TCP/IP協(xié)議的硬件芯片自動(dòng)解析協(xié)議,實(shí)現(xiàn)Internet接入.后者程序已固化在硬件中,一般難以通過軟件方法提高通信速率.因此,主要分析提高前一種方案的通信速率,其接口電路如圖1所示.
圖1 RTL8019AS與51單片機(jī)的接口電路Fig.1 Interface circuit for RTL8019AS and 51 single-chip
由于單片機(jī)中斷資源有限,嵌入式系統(tǒng)與以太網(wǎng)通信主要采用的是軟件查詢方式,而不是中斷響應(yīng)方式.從以太網(wǎng)上傳來的數(shù)據(jù)會(huì)先存至芯片上16 kB的數(shù)據(jù)緩存區(qū).當(dāng)單片機(jī)空閑時(shí),通過對8019芯片標(biāo)志寄存器的查詢,來確認(rèn)是否有數(shù)據(jù)到來,并進(jìn)行接收.
嵌入式 TCP/IP協(xié)議的實(shí)現(xiàn)方法尚無統(tǒng)一標(biāo)準(zhǔn),往往是設(shè)計(jì)人員根據(jù)具體工程的實(shí)際需要,結(jié)合TCP/IP規(guī)范進(jìn)行裁減的.目前,雖然針對80C51單片機(jī)的開源嵌入式 TCP/IP代碼的實(shí)現(xiàn)方式有多種多樣,但大致遵循TCP/IP層次(鏈路層、網(wǎng)絡(luò)層、傳輸層、應(yīng)用層)進(jìn)行開發(fā).TCP協(xié)議是 TCP/IP協(xié)議簇的核心,是最復(fù)雜的協(xié)議,其獨(dú)特的自動(dòng)檢錯(cuò)和重發(fā)機(jī)制,實(shí)現(xiàn)了數(shù)據(jù)的可靠通信.但是,嵌入式系統(tǒng)對TCP協(xié)議進(jìn)行較大裁減,若設(shè)計(jì)不當(dāng),會(huì)嚴(yán)重影響通信速率.
以80C51單片機(jī)數(shù)據(jù)采集系統(tǒng)(圖2)為例進(jìn)行分析.圖2中:上位機(jī)為裝有Window s操作系統(tǒng)的PC機(jī),下位機(jī)為單片機(jī).由于51單片機(jī)處理速度和內(nèi)存資源的局限,目前大部分開源TCP通信的處理流程,如圖3所示.圖3中發(fā)送數(shù)據(jù)的部分表示發(fā)送一次 TCP數(shù)據(jù)包.由于嵌入式IP協(xié)議沒有分組功能,為了符合網(wǎng)絡(luò)M TU的限制,在設(shè)計(jì)中最好在嵌入式TCP層進(jìn)行分包處理.即在TCP層將所要發(fā)送的數(shù)據(jù)按網(wǎng)絡(luò)M TU進(jìn)行分包,然后交給IP層直接發(fā)送,如此循環(huán)往復(fù).這種簡單的TCP通信方式在低速小數(shù)據(jù)包中的應(yīng)用是足夠的,然而,一旦采集速度變高,數(shù)據(jù)量增大,就無法滿足應(yīng)用要求.
造成上述通信速率低下的原因是:上位機(jī)不是收到數(shù)據(jù)就直接發(fā)送確認(rèn),而是繼續(xù)等待下一個(gè)數(shù)據(jù)包.而出現(xiàn)這種延時(shí)確認(rèn)的情況,是為了解決Internet上出現(xiàn)所謂的“糊涂窗口綜合癥”問題.RFC(Request for Comments)申明,TCP發(fā)送端必須實(shí)現(xiàn)Nagle算法,并推薦TCP接收端使用延時(shí)確認(rèn)算法.
Nagle算法要求 TCP連接上最多只能有一個(gè)未被確認(rèn)的分包,在該分包的確認(rèn)到達(dá)之前不能發(fā)送其他的小分包;而接收端延時(shí)確認(rèn)算法,允許接收端接收到一個(gè)數(shù)據(jù)包后不立即進(jìn)行確認(rèn),而是經(jīng)過一段延時(shí)(一般為200 m s)后再發(fā)送該數(shù)據(jù)包的確認(rèn)包.因此,在嵌入式 TCP/ IP通信系統(tǒng)中會(huì)經(jīng)常觸發(fā)上位機(jī)延時(shí)確認(rèn)算法,而下位機(jī)在沒收到確認(rèn)之前是不能發(fā)送數(shù)據(jù)的.這對高速交互的采樣系統(tǒng)而言,將產(chǎn)生明顯的時(shí)延,降低TCP通信效率.
一個(gè)以太網(wǎng)數(shù)據(jù)包最大字節(jié)數(shù)是1.5 kB,扣除各個(gè)包頭信息所占的字節(jié)數(shù),真正有效的數(shù)據(jù)在1 kB左右.如果發(fā)送端每次都等接收端發(fā)出確認(rèn)后再發(fā)送下一個(gè)數(shù)據(jù)包,那么在1 s內(nèi),發(fā)送端的發(fā)送次數(shù)為5次,總的發(fā)送數(shù)據(jù)量為5 kB.
圖2 單片機(jī)數(shù)據(jù)采集系統(tǒng)Fig.2 Single chip data acquisition system
圖3 嵌入式 TCP通信流程Fig.3 Communication procedure based on embedded TCP
采用以下兩種方案,可以消除或減小延時(shí)確認(rèn)的時(shí)間,達(dá)到提高嵌入式TCP/IP通信速率的目的.
(1)修改上位機(jī)Nagle算法的延時(shí)確認(rèn)時(shí)間[5].這種方案雖然可以直接關(guān)閉 TCP的Nagle算法,不再受到未確認(rèn)TCP包數(shù)量的限制,但對于數(shù)據(jù)包較小的情況會(huì)產(chǎn)生大量的分組,浪費(fèi)大量的系統(tǒng)和網(wǎng)絡(luò)資源,產(chǎn)生“糊涂窗口綜合癥”.
在實(shí)際應(yīng)用中,修改上位機(jī)的Nagle算法延時(shí)時(shí)間比關(guān)閉算法更可行.即通過修改Window s操作系統(tǒng)在注冊表表項(xiàng)TCPDelAck Ticks的值(H KLMSYSTEMCurrentControlSetServicesTcpipParametersInterface
(2)修改下位機(jī)TCP協(xié)議程序.雖然通過修改Nagle算法的設(shè)置來提高單片機(jī)通信速率的方法較為簡單,但實(shí)際應(yīng)用中卻有諸多不便.例如,當(dāng) TCP通信端口采用公用服務(wù)如 H TTP的80端口時(shí),修改該端口的延時(shí)確認(rèn)時(shí)間必然影響正常的H TTP服務(wù),而且對于每臺上位都要手動(dòng)進(jìn)行修改,比較麻煩.所以對于大數(shù)據(jù)量的 TCP傳輸,直接修改單片機(jī)TCP層的代碼更合理.
在實(shí)際操作中,可以采用類似滑動(dòng)窗口的算法改變 TCP發(fā)送流程來提高速率.滑動(dòng)窗口控制機(jī)制在上位機(jī)的TCP/IP協(xié)議中是很普遍的,但在下位機(jī),為了簡化設(shè)計(jì)往往忽略了該功能.采用類似滑動(dòng)窗口的機(jī)制,只要設(shè)計(jì)得當(dāng),將強(qiáng)迫上位機(jī)發(fā)送確認(rèn)消息.
具體算法有如下4個(gè)發(fā)送步驟.
(1)將應(yīng)用層要發(fā)送的數(shù)據(jù)按以太網(wǎng)M TU劃分為1 kB的大小分包.
(2)由于每個(gè)分包有1 kB,因此,將TCP層發(fā)送窗口大小設(shè)計(jì)為2 kB的倍數(shù),如圖4所示.考慮到實(shí)際中上位機(jī)TCP緩存窗口都不大,Window s操作系統(tǒng)一般只有幾千到幾萬字節(jié),所以將窗口直接設(shè)計(jì)為2 kB大小.
(3)連續(xù)發(fā)送兩個(gè)分包后,發(fā)送窗口變?yōu)榱?發(fā)送端就停止發(fā)送,等待確認(rèn).
(4)接到確認(rèn)后,窗口設(shè)置為2,并重新開始步驟(2).
上述發(fā)送步驟似乎與圖3并無太大不同,但由于連續(xù)發(fā)送了兩個(gè) TCP數(shù)據(jù)包,根據(jù)Nagle算法,TCP連接上只能有一個(gè)未確認(rèn)的數(shù)據(jù)包.上位機(jī)在接收到兩個(gè)數(shù)據(jù)包后,已經(jīng)超過算法規(guī)定的未確認(rèn)包數(shù),因而要立刻發(fā)送針對這兩個(gè)數(shù)據(jù)包的確認(rèn)消息.這里需要注意的是:嵌入式TCP/IP的分包是在TCP層進(jìn)行而不是在IP層進(jìn)行,所以發(fā)送的兩個(gè)TCP包到達(dá)上位機(jī)后不會(huì)在IP層被重組為一個(gè)包,上位機(jī)的TCP層才會(huì)馬上進(jìn)行確認(rèn).
在數(shù)據(jù)量較大的情況下,采用這樣的方式來提高 TCP通信速率,既不用修改上位機(jī)的 TCP協(xié)議程序,又具有了部分滑動(dòng)窗口控制的優(yōu)點(diǎn),使得數(shù)據(jù)流可靠地傳輸.經(jīng)實(shí)驗(yàn),在相同的數(shù)據(jù)量(4 MB)下,經(jīng)過修改的嵌入式 TCP層通信速率在局域網(wǎng)中,可達(dá)到40~50 kB· s-1,是未修改前的10倍.
圖4 TCP層窗口控制發(fā)送流程Fig.4 TCP congestion window controls send process
采用嵌入式TCP/IP技術(shù)的儀器具有組網(wǎng)靈活、成本低和通信距離遠(yuǎn)等優(yōu)點(diǎn).在需要高速傳送大量數(shù)據(jù)的嵌入式系統(tǒng)中,上述兩種方案可較好地滿足嵌入式 TCP通信中速率較慢的問題.在此基礎(chǔ)上,可實(shí)現(xiàn)以文件為單位如 HTTP,FTP等的傳輸服務(wù),工作參數(shù)均達(dá)到項(xiàng)目要求,具有較好的實(shí)用性.
[1]BEHROUZ A F,SOPH IA C F.TCP/IP協(xié)議族[J].3版.謝希仁,譯.北京:清華大學(xué)出版社,2001.
[2]李金梁,景博.嵌入式Internet中 TCP協(xié)議的設(shè)計(jì)與實(shí)現(xiàn)[J].微計(jì)算機(jī)信息,2005,21(7):40-41.
[3]金小明,李英姿,錢建強(qiáng),等.8位機(jī)嵌入式 TCP通信速度的研究[J].電子測量技術(shù),2007,30(7):67-70.
[4]李超,何先波,王安志,等.基于嵌入式 TCP/IP協(xié)議棧的擁塞控制研究[J].電腦知識與技術(shù),2008,4(4):860-862.
[5]周志洪,王勇,陳抗生.基于Nagle算法的嵌入式 TCP協(xié)議[J].浙江大學(xué)學(xué)報(bào):工學(xué)版,2006,40(1):41-44.
(責(zé)任編輯:陳志賢英文審校:吳逢鐵)
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-),女,講師,主要從事計(jì)算機(jī)控制方面的研究.E-mail:meixh@hqu.edu.cn.