摘要:該文主要介紹了一款內嵌硬件TCP/IP協議棧的高速網絡芯片FS8610,及其構建Web服務器的過程。該過程包括硬件連接,TCP/IP協議的實現以及服務器的構建。
關鍵詞:FS8610;Web服務器;TCP/IP
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)35-2116-02
Web Server Application Design Base on FS8610
WANG Xin,JIANG Xiao-feng
(School of Computer Science Technology, Soochow University,Suzhou 215006,China)
Abstract: This paper gives introduction to a Fast Ethernet chip-FS8610 Within Hardware TCP/IP engine,and also describes the process of building a Web Server.The process include hardware connection, actualize TCP/IP engine and build Web Server.
Key words: FS8610;web server;TCP/IP
1 引言
隨著嵌入式技術的迅速發展,嵌入式系統的應用越來越廣泛。而網絡通信的發展,使得B/S(服務器/客戶端)應用模式成為一種趨勢。嵌入式Web服務器是目前比較熱門的應用方案之一。本方案就是通過FameG的8-bit高速以太網網絡微處理芯片FS8610以及Realtek公司的RTL8201CP組建一個Web服務器。它具有成本低廉,體積小,設計靈活等特點。
2 FS8610概述
FS8610是一顆內嵌硬件TCP/IP協議棧的8位高速網絡微控制器芯片,可以提供硬件處理的Ethernet/ARP/RARP/IPv4/ICMP/IGMPv2/TCP/UDP/PPPoE等網絡協議。MCU使用1T RISC架構的8051處理器,在完全兼容標準8051指令集的基礎上,可以提供超高速的處理能力(最高可運行在160MHz)。
芯片的主要功能如下:內嵌高性能RISC E8051D,完全兼容標準8051系統時鐘;支持MII接口,兼容IEEE802.3 100BASE-TX and 10BASE-T;支持全雙工和半雙工模式;支持ARP/RARP/IP/ICMP/IGMP/TCP/UDP[1]硬件處理;支持PPPoE over xDSL;支持DMA數據傳輸功能;提供UART,GPIO,Timer等接口;提供SRAM標準接口,用來與外部數據存儲器、程序存儲器或者其他應用芯片進行連接;支持在線調試功能。其功能結構框圖如圖1所示。
3 嵌入式Web服務器的實現
3.1 硬件設計
Web服務器的重要功能就是可以通過局域網或者Internet網絡訪問服務器上的資源。因此,Web服務器必須提供一個標準的RJ45接口和可靠的網絡傳輸質量。FS8610已經內置了MAC訪問控制協議,而RTL8201CP提供了MII接口,可以支持MAC[2]。因此FS8610和RTL8201CP可以無縫對接,從FS8610傳過來的數據比特流,在MDIO的控制下,通過RTL8201CP轉換成以太網物理層能接收的模擬信號,并經過HY601680的耦合隔離變壓器的轉換和濾波,最后通過RJ45頭傳輸到因特網中。其具體硬件原理圖如圖2所示。
3.2 軟件設計
3.2.1 網絡通信的實現
TCP/IP 協議[3]作為一種成熟的網際互聯手段和事實標準,毫無疑問成為了嵌入式系統連入互聯網的首選協議。但是在嵌入式系統中,硬件資源較少,通常缺乏足夠的處理器和存儲器資源以支持整個TCP/IP 協議族,因此嵌入式的TCP/IP技術與常規的TCP/IP 實現有很大的不同。嵌入式系統中實現的協議要根據系統自身的特點及功能來設計自己的協議族,因此,在嵌入式Web 服務器中并非TCP/IP 協議族中所有的協議都要實現,必須針對不同的網絡應用對協議棧進行刪減,保留其基本功能,以滿足網絡應用的需要。考慮到嵌入式Web 服務器的硬件處理速度慢并且存儲容量相對較小的條件限制,在TCP/IP 協議棧中主要能夠實現ARP,IP,ICMP,TCP 協議即可。
具體分析如下:以太網數據的傳輸是采用MAC 地址來識別的,而ARP 協議提供IP 地址和數據鏈路層使用的MAC 地址之間的轉換功能,為了保證系統在以太網的通信,首先要實現ARP 協議;由于嵌入式Web服務器要能在Internet 上通信,在網絡層一定要實現IP 協議,還要實現能報告數據傳送差錯等情況的ICMP 協議;同時,Web 服務器同Web 瀏覽器之間的通信是通過HTTP 協議進行的,在傳輸層采用TCP 協議,能保證可靠的數據傳輸,進而實現其基礎之上的HTTP 協議。
在TCP/IP參考模型里,應用層下面的各層提供了可靠的傳輸,實現網絡應用的是應用層的各類協議,但是它們并不直接為用戶服務,所以我們還必須定義一些自定義協議。當網絡向PC傳送數據時,需要以某種共同約定的方式來通知PC數據開始傳送了,數據的長度是多少;這些都需要自定義協議來實現。自定義協議,簡而言之就是為了正確傳輸自定義的內容而定義的“網絡傳輸規則”,包含特殊的命令或者特定的二進制位元。對于本系統而言,自定義協議要做的是將要傳輸的數據當作TCP或UDP包的“數據”,通過自定義的命令組成自定義協議,來正確的接收和處理這些數據,從而實現網絡的通信。
3.2.2 嵌入式Web服務器的實現
以FS8610為核心構建其Web服務器時,充分利用了其內嵌硬件TCP/IP協議棧的特點,在Kernel層庫函數和應用層協議的基礎上,編寫了Web服務器主要程序模塊:HTTP包的解析、HTML文件的搜索、HTML文件的參數管理以及HTTP包的響應。其體系結構如圖3所示。
嵌入式Web服務器需要根據瀏覽器發出的http請求及時更新網頁或從頭創建網頁,因此需要用動態交互技術實現。到目前為止要實現動態網頁,只能采用CGI,因為還不支持ASP, PHP等動態網頁技術。公共網關接口——CGI是一種服務器與瀏覽器信息、交換的標準接口。CGI建立在瀏覽器/服務器機制上,為外部擴展的應用程序與Web服務器交互提供了一個標準接口。按照CGI標準編寫的外部擴展應用程序可以處理客戶端輸入的工作數據,完成客戶端與服務器的交互操作等。
客戶端的用戶通過瀏覽器完成一定輸入工作后,向服務器發出HTTP請求(稱為CGI請求),服務器守護進程接收到該請求后,就創建一個子進程(稱為CGI子進程)。該CGI子進程將CGI請求的有關數據設置成環境變量,在CGI程序與服務器間建立兩條數據通道,然后啟動URL指定的CGI程序。子進程通過標準輸出流將處理結果傳遞給服務器守護進程,守護進程再將處理結果作為應答消息回送到客戶端。
一般的靜態網頁只能滿足客戶端瀏覽網頁的功能,無法滿足客戶端與服務器端的數據交互,因此在諸如遠程監控等許多場合實用性不強。而使用CGI接口,瀏覽器可以在HTTP內部調用函數并以網頁的形式接收結果,即實現動態網頁的功能,能夠有效解決客戶端與服務器端數據交互的問題。設計中相應的CGI文件(*. cgi)必須包含文本字符串\"%xx\",其中\"%\"是控制代碼,\"xx\"代表兩位變量標識符,其值為0~99。當HTTP服務器調用CGI文件,遇到這個文本字符串時,它將除去\"%\",并將\"xx\"提取出來,交給相應函數進行處理。本設計中瀏覽器使用HTML GET的方法以及多個參數來調用函數,服務器對其進行解析并使用實際方法的代碼和它的參數來調用主應用程序,在服務器的應用程序中設計了相應的代碼來實現回調函數,從而實現網頁的的動態連接。
4 結束語
該文介紹的基于FS8610 Web服務器對TCP/IP 協議棧進行了精簡,既兼顧了TCP/IP 協議的主要功能的實現,又照顧到嵌入式系統本身的弱點,利用嵌入式TCP/IP協議棧能擴展許多非智能設備的網絡功能,使之方便接入Internet,具有很高的實用價值。該Web服務器還可以應用到各種網絡產品中,不僅成本低廉、設計簡單,而且運行穩定,可見福華公司的FS8610在網絡應用方面將具有很好的前景。
參考文獻:
[1] 福華先進微電子.FS8610 L4MCU Design Target Specification.
[2] Http://www.realtek.com.tw,RTL8201CP Datasheet.
[3] Http://www.china-pub.com.TCP-IP詳解卷1-協議.