顏詩洋
(河海大學 計 算機與信息學院,江蘇 南 京 2 10098)
網絡技術是影響人類的重大技術之一,隨著網絡技術的不斷發展,出現了各種網絡接入設備。但是,以特定功能為中心的小型嵌入式系統的網絡化越來越引起人們的注意。對于單片機技術為核心小型嵌入式設備,如何將其接入到互聯網,以實現信息與資源的共享成為研究的熱點問題。
目前嵌入式網絡的主要實現方法,就是在嵌入式設備中實現TCP/IP協議棧。TCP/IP協議是網絡互聯的標準協議,如果能夠在嵌入式設備中實現TCP/IP協議棧,也就能夠實現了嵌入式設備之間及與其他接入設備的網絡互聯。文中針對8位及16位機,開發了一種微型TCP/IP協議棧,實現了該協議族中主要的協議,并對其進行了測試。
TCP/IP協議最先是在UNIX系統里實現的,后來的LINUX、DOS、Windows也實現了TCP/IP,隨后TCP/IP協議也被移植到其它嵌入式的處理器上。由于資源的原因,不可能在8位機上直接移植LINUX的協議棧。完整的TCP/IP協議族有幾百種通信協議組成,在小型嵌入式設備中,只需根據需要移植幾種最重要的協議即可。
下面對本文需要實現的不同層內的協議進行介紹:
1)應用層
應用層基本上是根據需求來進行設計,如果需要網頁服務,則需要實現HTTP協議,類似的如果需要實現Email功能,則要實現相應的SMTP協議。
2)傳輸層
實現傳輸層協議需要與應用層的協議相適應[1]。如果只實現了UDP協議而沒有實現TCP協議,則應用層與TCP協議對應的HTTP,FTP,TELNET都無法實現,只能實現TFTP等協議[2]。為了能實現更多的應用層協議,滿足實際需求,本文實現了傳輸層的TCP與UDP協議。
3)網絡層
網絡層的IP協議是整個TCP/IP協議族中最核心和最重要的協議[2],它是不同網絡之間進行互聯的必要條件,也是其他高層協議賴以運行的基礎,為了使TCP/IP協議棧能夠完成基本工作,必須實現IP協議。
而對于網絡層的ICMP協議,出于對系統資源的考慮,在嵌入式Web服務器應用中,只要實現回送請求和回送應答就足夠了。
一般都認為ARP協議屬于網絡層,在以太網的協議中,數據傳輸都要以網卡的MAC地址作為唯一的標識,因此需要將IP地址轉換為物理上的MAC地址,對于TCP/IP協議棧來說,這種轉換是必不可少的,因此要實現ARP協議。
4)鏈路層
由于現代集成電路技術的發展,出現了很多集成以太網協議的網卡,這些網卡能夠在硬件上實現以太網的協議,只要開發相應的驅動程序即可。
ARP(Address Resolution Protocol)稱作地址解析協議,是TCP/IP協議族中重要的組成部分,主要負責將IP地址轉換成物理MAC地址,ARP協議的基本功能就是根據IP地址,能夠查詢相應的物理MAC地址,從而保證可靠的通信。
通用計算機系統中,ARP高速緩存一般設計成雙向數據鏈的形式,這樣整個緩存可以方便地進行動態增減。但對資源有限的嵌入式系統來說,這顯然是不現實的。因此ARP的地址緩存采用了線性數組形式的結構。它在內存中是連續線性存儲的,這樣做的優點是查找速度快。
ARP定時器在ARP協議的實現時是必要的,當嵌入式設備發送ARP請求后,網絡上并無反應,這時,如果ARP定時時間到,就應當重新發送ARP請求。
對ARP表的維護在ARP協議的實現中也是至關重要的,ARP表就是IP地址和MAC地址對應的表項[3],在嵌入式系統中,可以設置ARP表老化的時間為20分鐘,如果20分鐘時間到,則將ARP表項移除,從新的ARP請求—回應關系來獲取新表項。
IP協議是TCP/IP協議族中最為核心的協議,所有TCP,UDP,ICMP都要通過IP封包的形式實現傳輸,但是IP提供的是無連接,不可靠的服務。
在通過計算機的網絡實現中,IP比較復雜,但在嵌入式TCP/IP協議棧中,只需實現IP的發送,接受,和轉交即可。在通用計算機中,可以處理帶IP選項和IP分片數據包[3],但在嵌入式設備中,沒有大量的數據要處理,這兩項功能可以不實現,而且對于鏈路層是以太網的協議棧,完全可以不考慮分片和重組的功能,這樣大大節省了寶貴的RAM資源,對于TCP/IP協議棧的功能沒有太大影響。
ICMP協議是TCP/IP協議族在網絡層的一個子協議,用于在IP主機、路由器之間傳遞控制消息??刂葡⑹侵妇W路通不通、主機是否可達、路由是否可用等網絡本身的消息。這些控制消息雖然并不傳輸用戶數據,但是對于用戶數據的傳遞起著重要的作用。作為服務器方的小型嵌入式設備,只需實現ICMP的回顯請求和應答報文即可[4]。PING是最常用的基于ICMP的服務,為了使用戶測試網絡連接,應當能對PING請求做出應答。
UDP與TCP協議同屬傳輸層,但是,與TCP協議不同的是,UDP協議提供的是無連接,不可靠的傳輸,因此,UDP主要是為那些需要一種簡單卻快速的運輸協議的應用而設計的。UDP協議沒有復雜的機制,只要按照協議標準實現即可。
TCP協議提供的是面向連接,可靠的通信服務。因此,TCP的實現機制比較復雜。TCP通過端口號來實現各種應用之間的端到端的連接。在TCP協議中,往返時間估計、定時重傳、滑動窗口協議、流量控制、擁塞控制、TCP連接狀態等都是比較重要的機制。對于通用計算機來說,由于沒有資源的限制,一般都實現了滑動窗口協議,但是對于8位及16位嵌入式設備來說,由于資源的限制,實現比較困難。在8位和16位嵌入式系統中流量控制和擁塞控制也不需要考慮。TCP連接狀態是TCP有限狀態機的必要條件。嵌入式設備是需要作為服務器,因此,可以將標準TCP有限狀態機中的FIN_SENT,FIN_WAIT1,FIN_WAIT2,TIME_WAIT狀態都略去,只實現服務器端的狀態轉換機制。這樣,既節省了系統開銷,同時也保證了所有的數據段都能安全正確地到達目的端[4]。本協議棧實現了TCP的超時重傳機制,提高了傳輸的可靠性。

圖1 TCP連接狀態轉換圖Fig.1 State diagram of the TCP connection
在協議棧運行的初始階段,需要進行系統初始化,并啟動所有定時器。接下來,判斷以太網數據有沒有到達,若到達,則進行相應的處理。對于以太網數據包進行處理的流程圖在圖3中給出。若ARP定時器定時時間到,且沒有ARP應答,則重新發送ARP請求。若TCP在連接狀態且無活動一定時間,則啟動關閉連接。同時,如果TCP超時重發時間到,則啟動TCP超時重發機制。根據TCP/IP協議的規定,到達一定時間后,ARP表項就會老化,啟動更新ARP表。

圖2 協議??傮w流程圖Fig.2 Flowchart of the TCP/IP stack

圖3 數據接收流程圖Fig.3 Flowchart of data receiving
采用Silicon labs公司的8位機C8051F340及8位以太網卡CP2200搭建平臺,對TCP/IP協議棧進行測試。需移植本協議棧,并編寫網卡驅動程序,除網卡初始化部分外,網卡驅動被封裝成兩個函數,eth_send()和eth_receive()。其中,eth_send()發送以太網數據包,在上層發送數據時被調用。eth_receive()接收以太網數據包,接收到數據包后,即啟動數據接收流程。系統初始化后,設置嵌入式設備的IP地址為固定IP地址,編寫HTTP協議作為應用層,構建Web服務器。測試結果如圖4所示。

圖4 測試結果圖Fig.4 Diagram of testing result
本文針對TCP/IP協議和嵌入式設備的特點,對TCP/IP協議族進行了裁剪,使之能夠為嵌入式設備提供服務,同時保證TCP/IP基本功能能夠實現。不同于其他精簡協議棧[5],為了能夠實現Web服務器功能以及其他重要應用層協議,實現了TCP協議?;贑8051F340和CP2200的平臺,對Web服務器進行了測試,測試成功。如果條件成熟,可以考慮將協議棧移植到無線平臺,這樣,各種信息家電和工業設備的就可以更加方便的接入網絡。
[1]陳立家,焦戰立,熊文龍.基于精簡TCP/IP協議棧網絡服務器的實現 [J].武漢理工大學學報:交通科學與工程版,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:協議)[M].范建華,等,譯.北京:機械工業出版社,2000.
[3]Scaglia S.嵌入式WEB中TCP/IP基礎,實現及應用[M].潘琢金,等,譯.北京:北京航空航天大學出版社,2008.
[4]王海燕,魏洪波.嵌入式WEB中TCP/IP協議棧的設計與實現[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協議棧的研究與開發[J].計算機工程與應用,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.