顏詩洋
(河海大學(xué) 計 算機與信息學(xué)院,江蘇 南 京 2 10098)
網(wǎng)絡(luò)技術(shù)是影響人類的重大技術(shù)之一,隨著網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,出現(xiàn)了各種網(wǎng)絡(luò)接入設(shè)備。但是,以特定功能為中心的小型嵌入式系統(tǒng)的網(wǎng)絡(luò)化越來越引起人們的注意。對于單片機技術(shù)為核心小型嵌入式設(shè)備,如何將其接入到互聯(lián)網(wǎng),以實現(xiàn)信息與資源的共享成為研究的熱點問題。
目前嵌入式網(wǎng)絡(luò)的主要實現(xiàn)方法,就是在嵌入式設(shè)備中實現(xiàn)TCP/IP協(xié)議棧。TCP/IP協(xié)議是網(wǎng)絡(luò)互聯(lián)的標準協(xié)議,如果能夠在嵌入式設(shè)備中實現(xiàn)TCP/IP協(xié)議棧,也就能夠?qū)崿F(xiàn)了嵌入式設(shè)備之間及與其他接入設(shè)備的網(wǎng)絡(luò)互聯(lián)。文中針對8位及16位機,開發(fā)了一種微型TCP/IP協(xié)議棧,實現(xiàn)了該協(xié)議族中主要的協(xié)議,并對其進行了測試。
TCP/IP協(xié)議最先是在UNIX系統(tǒng)里實現(xiàn)的,后來的LINUX、DOS、Windows也實現(xiàn)了TCP/IP,隨后TCP/IP協(xié)議也被移植到其它嵌入式的處理器上。由于資源的原因,不可能在8位機上直接移植LINUX的協(xié)議棧。完整的TCP/IP協(xié)議族有幾百種通信協(xié)議組成,在小型嵌入式設(shè)備中,只需根據(jù)需要移植幾種最重要的協(xié)議即可。
下面對本文需要實現(xiàn)的不同層內(nèi)的協(xié)議進行介紹:
1)應(yīng)用層
應(yīng)用層基本上是根據(jù)需求來進行設(shè)計,如果需要網(wǎng)頁服務(wù),則需要實現(xiàn)HTTP協(xié)議,類似的如果需要實現(xiàn)Email功能,則要實現(xiàn)相應(yīng)的SMTP協(xié)議。
2)傳輸層
實現(xiàn)傳輸層協(xié)議需要與應(yīng)用層的協(xié)議相適應(yīng)[1]。如果只實現(xiàn)了UDP協(xié)議而沒有實現(xiàn)TCP協(xié)議,則應(yīng)用層與TCP協(xié)議對應(yīng)的HTTP,FTP,TELNET都無法實現(xiàn),只能實現(xiàn)TFTP等協(xié)議[2]。為了能實現(xiàn)更多的應(yīng)用層協(xié)議,滿足實際需求,本文實現(xiàn)了傳輸層的TCP與UDP協(xié)議。
3)網(wǎng)絡(luò)層
網(wǎng)絡(luò)層的IP協(xié)議是整個TCP/IP協(xié)議族中最核心和最重要的協(xié)議[2],它是不同網(wǎng)絡(luò)之間進行互聯(lián)的必要條件,也是其他高層協(xié)議賴以運行的基礎(chǔ),為了使TCP/IP協(xié)議棧能夠完成基本工作,必須實現(xiàn)IP協(xié)議。
而對于網(wǎng)絡(luò)層的ICMP協(xié)議,出于對系統(tǒng)資源的考慮,在嵌入式Web服務(wù)器應(yīng)用中,只要實現(xiàn)回送請求和回送應(yīng)答就足夠了。
一般都認為ARP協(xié)議屬于網(wǎng)絡(luò)層,在以太網(wǎng)的協(xié)議中,數(shù)據(jù)傳輸都要以網(wǎng)卡的MAC地址作為唯一的標識,因此需要將IP地址轉(zhuǎn)換為物理上的MAC地址,對于TCP/IP協(xié)議棧來說,這種轉(zhuǎn)換是必不可少的,因此要實現(xiàn)ARP協(xié)議。
4)鏈路層
由于現(xiàn)代集成電路技術(shù)的發(fā)展,出現(xiàn)了很多集成以太網(wǎng)協(xié)議的網(wǎng)卡,這些網(wǎng)卡能夠在硬件上實現(xiàn)以太網(wǎng)的協(xié)議,只要開發(fā)相應(yīng)的驅(qū)動程序即可。
ARP(Address Resolution Protocol)稱作地址解析協(xié)議,是TCP/IP協(xié)議族中重要的組成部分,主要負責將IP地址轉(zhuǎn)換成物理MAC地址,ARP協(xié)議的基本功能就是根據(jù)IP地址,能夠查詢相應(yīng)的物理MAC地址,從而保證可靠的通信。
通用計算機系統(tǒng)中,ARP高速緩存一般設(shè)計成雙向數(shù)據(jù)鏈的形式,這樣整個緩存可以方便地進行動態(tài)增減。但對資源有限的嵌入式系統(tǒng)來說,這顯然是不現(xiàn)實的。因此ARP的地址緩存采用了線性數(shù)組形式的結(jié)構(gòu)。它在內(nèi)存中是連續(xù)線性存儲的,這樣做的優(yōu)點是查找速度快。
ARP定時器在ARP協(xié)議的實現(xiàn)時是必要的,當嵌入式設(shè)備發(fā)送ARP請求后,網(wǎng)絡(luò)上并無反應(yīng),這時,如果ARP定時時間到,就應(yīng)當重新發(fā)送ARP請求。
對ARP表的維護在ARP協(xié)議的實現(xiàn)中也是至關(guān)重要的,ARP表就是IP地址和MAC地址對應(yīng)的表項[3],在嵌入式系統(tǒng)中,可以設(shè)置ARP表老化的時間為20分鐘,如果20分鐘時間到,則將ARP表項移除,從新的ARP請求—回應(yīng)關(guān)系來獲取新表項。
IP協(xié)議是TCP/IP協(xié)議族中最為核心的協(xié)議,所有TCP,UDP,ICMP都要通過IP封包的形式實現(xiàn)傳輸,但是IP提供的是無連接,不可靠的服務(wù)。
在通過計算機的網(wǎng)絡(luò)實現(xiàn)中,IP比較復(fù)雜,但在嵌入式TCP/IP協(xié)議棧中,只需實現(xiàn)IP的發(fā)送,接受,和轉(zhuǎn)交即可。在通用計算機中,可以處理帶IP選項和IP分片數(shù)據(jù)包[3],但在嵌入式設(shè)備中,沒有大量的數(shù)據(jù)要處理,這兩項功能可以不實現(xiàn),而且對于鏈路層是以太網(wǎng)的協(xié)議棧,完全可以不考慮分片和重組的功能,這樣大大節(jié)省了寶貴的RAM資源,對于TCP/IP協(xié)議棧的功能沒有太大影響。
ICMP協(xié)議是TCP/IP協(xié)議族在網(wǎng)絡(luò)層的一個子協(xié)議,用于在IP主機、路由器之間傳遞控制消息。控制消息是指網(wǎng)路通不通、主機是否可達、路由是否可用等網(wǎng)絡(luò)本身的消息。這些控制消息雖然并不傳輸用戶數(shù)據(jù),但是對于用戶數(shù)據(jù)的傳遞起著重要的作用。作為服務(wù)器方的小型嵌入式設(shè)備,只需實現(xiàn)ICMP的回顯請求和應(yīng)答報文即可[4]。PING是最常用的基于ICMP的服務(wù),為了使用戶測試網(wǎng)絡(luò)連接,應(yīng)當能對PING請求做出應(yīng)答。
UDP與TCP協(xié)議同屬傳輸層,但是,與TCP協(xié)議不同的是,UDP協(xié)議提供的是無連接,不可靠的傳輸,因此,UDP主要是為那些需要一種簡單卻快速的運輸協(xié)議的應(yīng)用而設(shè)計的。UDP協(xié)議沒有復(fù)雜的機制,只要按照協(xié)議標準實現(xiàn)即可。
TCP協(xié)議提供的是面向連接,可靠的通信服務(wù)。因此,TCP的實現(xiàn)機制比較復(fù)雜。TCP通過端口號來實現(xiàn)各種應(yīng)用之間的端到端的連接。在TCP協(xié)議中,往返時間估計、定時重傳、滑動窗口協(xié)議、流量控制、擁塞控制、TCP連接狀態(tài)等都是比較重要的機制。對于通用計算機來說,由于沒有資源的限制,一般都實現(xiàn)了滑動窗口協(xié)議,但是對于8位及16位嵌入式設(shè)備來說,由于資源的限制,實現(xiàn)比較困難。在8位和16位嵌入式系統(tǒng)中流量控制和擁塞控制也不需要考慮。TCP連接狀態(tài)是TCP有限狀態(tài)機的必要條件。嵌入式設(shè)備是需要作為服務(wù)器,因此,可以將標準TCP有限狀態(tài)機中的FIN_SENT,FIN_WAIT1,FIN_WAIT2,TIME_WAIT狀態(tài)都略去,只實現(xiàn)服務(wù)器端的狀態(tài)轉(zhuǎn)換機制。這樣,既節(jié)省了系統(tǒng)開銷,同時也保證了所有的數(shù)據(jù)段都能安全正確地到達目的端[4]。本協(xié)議棧實現(xiàn)了TCP的超時重傳機制,提高了傳輸?shù)目煽啃浴?/p>
圖1 TCP連接狀態(tài)轉(zhuǎn)換圖Fig.1 State diagram of the TCP connection
在協(xié)議棧運行的初始階段,需要進行系統(tǒng)初始化,并啟動所有定時器。接下來,判斷以太網(wǎng)數(shù)據(jù)有沒有到達,若到達,則進行相應(yīng)的處理。對于以太網(wǎng)數(shù)據(jù)包進行處理的流程圖在圖3中給出。若ARP定時器定時時間到,且沒有ARP應(yīng)答,則重新發(fā)送ARP請求。若TCP在連接狀態(tài)且無活動一定時間,則啟動關(guān)閉連接。同時,如果TCP超時重發(fā)時間到,則啟動TCP超時重發(fā)機制。根據(jù)TCP/IP協(xié)議的規(guī)定,到達一定時間后,ARP表項就會老化,啟動更新ARP表。
圖2 協(xié)議??傮w流程圖Fig.2 Flowchart of the TCP/IP stack
圖3 數(shù)據(jù)接收流程圖Fig.3 Flowchart of data receiving
采用Silicon labs公司的8位機C8051F340及8位以太網(wǎng)卡CP2200搭建平臺,對TCP/IP協(xié)議棧進行測試。需移植本協(xié)議棧,并編寫網(wǎng)卡驅(qū)動程序,除網(wǎng)卡初始化部分外,網(wǎng)卡驅(qū)動被封裝成兩個函數(shù),eth_send()和eth_receive()。其中,eth_send()發(fā)送以太網(wǎng)數(shù)據(jù)包,在上層發(fā)送數(shù)據(jù)時被調(diào)用。eth_receive()接收以太網(wǎng)數(shù)據(jù)包,接收到數(shù)據(jù)包后,即啟動數(shù)據(jù)接收流程。系統(tǒng)初始化后,設(shè)置嵌入式設(shè)備的IP地址為固定IP地址,編寫HTTP協(xié)議作為應(yīng)用層,構(gòu)建Web服務(wù)器。測試結(jié)果如圖4所示。
圖4 測試結(jié)果圖Fig.4 Diagram of testing result
本文針對TCP/IP協(xié)議和嵌入式設(shè)備的特點,對TCP/IP協(xié)議族進行了裁剪,使之能夠為嵌入式設(shè)備提供服務(wù),同時保證TCP/IP基本功能能夠?qū)崿F(xiàn)。不同于其他精簡協(xié)議棧[5],為了能夠?qū)崿F(xiàn)Web服務(wù)器功能以及其他重要應(yīng)用層協(xié)議,實現(xiàn)了TCP協(xié)議?;贑8051F340和CP2200的平臺,對Web服務(wù)器進行了測試,測試成功。如果條件成熟,可以考慮將協(xié)議棧移植到無線平臺,這樣,各種信息家電和工業(yè)設(shè)備的就可以更加方便的接入網(wǎng)絡(luò)。
[1]陳立家,焦戰(zhàn)立,熊文龍.基于精簡TCP/IP協(xié)議棧網(wǎng)絡(luò)服務(wù)器的實現(xiàn) [J].武漢理工大學(xué)學(xué)報:交通科學(xué)與工程版,2007,31(3):565-568.CHEN Li-jia,JIAO Zhan-li,XIONG Wen-long.Web Server Based on A Reduced TCP/IP Stack[J].Journal of Wuhan U-niversity of Technology:Transportation Science&Engineering,2007,31(3):565-568.
[2]Stevens W R.TCP/IP詳解(卷1:協(xié)議)[M].范建華,等,譯.北京:機械工業(yè)出版社,2000.
[3]Scaglia S.嵌入式WEB中TCP/IP基礎(chǔ),實現(xiàn)及應(yīng)用[M].潘琢金,等,譯.北京:北京航空航天大學(xué)出版社,2008.
[4]王海燕,魏洪波.嵌入式WEB中TCP/IP協(xié)議棧的設(shè)計與實現(xiàn)[J].微計算機信息,2007,23(1-2):59-73.WANG Hai-yan,WEI Hong-bo.Design and Realization of TCP/IP Protocol Stack in the Embedded Web Server[J].Microcomputer Information,2007,23(1-2):59-73.
[5]CHENG Lei,HU Jing-chun.Design and Implementation of Simplified TCP/IP Stack Based on Embedded Network Interface [J].Advances in Intelligent and Soft Computing,2012(2):147-153.
[6]李明,康靜秋,賈智平.嵌入式TCP/IP協(xié)議棧的研究與開發(fā)[J].計算機工程與應(yīng)用,2002(16):118-135.LI Ming,KANG Jing-qiu,JIA Zhi-ping.The research and development of embedded TCP/IP stack[J].Computer Engineering and Applications,2002(16):118-135.
[7]LI Yun-chen,Chiang Meiling.LyraNET:a zero-copy TCP/IP protocol stack for embedded operating systems[C]//The 11th IEEE International Conference on Embedded and Real-time Computing Systems and Applications,Hong Kong,2005:123-128.