基于SX單片機WebServer和網(wǎng)絡協(xié)議棧的實現(xiàn)
四階TLT電壓增益公式推導及其特性日益普及,信息共享程度的不斷提高,給工作和生活帶來了極大的方便?,F(xiàn)在,上網(wǎng)瀏覽對于人們來說是一件很平常的事情。不僅如此,架構一個WebServer,做自己的主頁也是司空見慣的。一般情況下,人們通過一臺上網(wǎng)的電腦來建立WebServer。在這里將討論另外一種方法:通過單片機來建立WebServer。之所以會想到用單片機來實現(xiàn) WebServer,是因為隨著嵌入式系統(tǒng)的迅猛發(fā)展和IA(信息電器)的出現(xiàn),以單片機為中心的應用系統(tǒng)將搭上Internet的快車逐步取代傳統(tǒng)的以 PC為中心的應用,成為未來Internet發(fā)展中的主力軍。
一、 具體應用方案
1. 基于單片機的WebServer方案
基于單片機的WebServer的硬件平臺如圖1所示。
2. 主要芯片介紹
(1) SX52BD100
SX52BD100 是UBICOM公司生產(chǎn)的一款RISC指令集的單片機,片上帶有4K×16 位的Flash存儲器和262×8位的RAM。由于采用CPU并行流水線方式及單時鐘周期指令,在100MHz晶振驅動下指令執(zhí)行速度可達 100MIPS。該單片機的最大特點就是虛擬外設功能,即通過軟件對I/O口進行靈活的配置,CPU執(zhí)行虛擬軟件模塊就可以驅動普通的I/O口來模擬外設的功能,比如UART、SPI、IIC和FSK等。當然,令人驚奇的是,SX52BD100可以通過虛擬外設功能來運行網(wǎng)絡協(xié)議棧,例如TCP、IP、 HTTP以及SMTP等。
(2)RTL8019AS
RTL8019AS是ReaLTEk公司出品的一種全雙工以太網(wǎng)控制器。它自帶16KB的SRAM,工作在Ethernet II和IEEE802.3、 10Base5、10Base2、10BaseT下,與NE2000兼容。
(3)24LC256
24LC256是MicroChip公司生產(chǎn)的一種串行32KB的 E2PROM存儲器,采用CMOS工藝,通過2根數(shù)據(jù)線和外界通信,兼容I2C總線接口,可設為硬件寫保護,10萬次的擦寫,200年以上的數(shù)據(jù)保護。
3.工作流程和軟件設計
RJ45為此系統(tǒng)與局域網(wǎng)的接口。由于大部分局域網(wǎng)都采用以太網(wǎng),這里的RTL8019AS就是處理以太網(wǎng)協(xié)議(IEEE802.3)的。數(shù)據(jù)的流向為:請求信息從局域網(wǎng)中來,通過RJ45送到RTL8019AS,處理后的數(shù)據(jù)包送入SX52BD100協(xié)議棧,由協(xié)議棧對數(shù)據(jù)包進行解析,得到原始請求信息。請求信息再經(jīng)過SX52BD100的處理,產(chǎn)生回復信息?;貜托畔⒌骄钟蚓W(wǎng)的過程與上面正好相反。
整個系統(tǒng)的軟件流程如圖2所示。
圖1中的E2PROM 24LC256用來存儲WebServer的網(wǎng)頁信息。它可以處理Web頁面、圖像文件、PDF文檔記憶其它文件。當然,它不能像PC上WebServer中的硬盤那樣可以存儲大量的頁面。它的容量決定了WebServer的資源文件的大小。
二、網(wǎng)絡協(xié)議棧的實現(xiàn)
網(wǎng)絡協(xié)議通常分不同層次進行開發(fā),每一層分別負責不同的通信功能。一個協(xié)議族,比如TCP/IP,是一組不同層次上的多個協(xié)議的組合。TCP/IP通常被認為是一個四層協(xié)議系統(tǒng),如圖3所示。每一層負責不同的功能。
(1)數(shù)據(jù)鏈路層,有時也稱為網(wǎng)絡接口層。通常包括操作系統(tǒng)中的設備驅動程序和計算機中對應的網(wǎng)絡接口卡。它們一起處理與電纜(或其他任何傳輸媒介)的物理接口細節(jié)。
(2)網(wǎng)絡層,有時也稱作互聯(lián)網(wǎng)層。處理分組在網(wǎng)絡中的活動,例如分組的選路。在TCP/IP協(xié)議族中,網(wǎng)絡層協(xié)議包括IP協(xié)議(網(wǎng)際協(xié)議)、ICMP 協(xié)議(Internet互聯(lián)網(wǎng)控制報文協(xié)議)以及IGMP 協(xié)議(Internet組管理協(xié)議)。這里主要討論IP協(xié)議。
(3)傳輸層主要為兩臺主機上的應用程序提供端到端的通信。TCP為兩臺主機提供高可靠性的數(shù)據(jù)通信。它所做的工作包括把應用程序交給它的數(shù)據(jù)分成合適的小塊交給下面的網(wǎng)絡層,確認接收到的分組,設置發(fā)送最后確認分組的超時時鐘等。由于運輸層提供了高可靠性的端到端的通信,因此應用層可以忽略所有這些細節(jié)。
(4)應用層負責處理特定的應用程序細節(jié)。幾乎各種不同的TCP/IP實現(xiàn)都會提供下面這些應用:
① HTTP超文本傳輸控制協(xié)議;
② TELNET遠程登錄;
③ FTP文件傳輸協(xié)議;
④ SMTP簡單郵件傳送協(xié)議;
⑤ SNMP簡單網(wǎng)絡管理協(xié)議。
因為數(shù)據(jù)鏈路層主要是網(wǎng)絡接口卡及驅動,由RTL8019AS來實現(xiàn),所以下面討論網(wǎng)絡層、傳輸層和應用層協(xié)議棧的實現(xiàn)。
1. 網(wǎng)絡層
(1) IP協(xié)議
IP是TCP/IP 協(xié)議族中最為核心的協(xié)議。Internet所有的數(shù)據(jù)都以IP 數(shù)據(jù)報格式傳輸。IP協(xié)議最大的特點是提供不可靠的和無連接的數(shù)據(jù)包傳送服務。
不可靠(unreliable)的意思是它不能保證IP數(shù)據(jù)報能成功地到達目的地。IP僅提供最好的傳輸服務。若發(fā)生某種錯誤時,如某個路由器暫時用完了緩沖區(qū),IP有一個簡單的錯誤處理算法:丟棄該數(shù)據(jù)報,然后發(fā)送ICMP(Internet控制報文協(xié)議)消息報給信源端。任何要求的可靠性必須由上層來提供(如TCP)。
無連接(connectionless)的意思是IP并不維護任何關于后續(xù)數(shù)據(jù)報的狀態(tài)信息。每個數(shù)據(jù)報的處理是相互獨立的。這也說明,IP數(shù)據(jù)報可以不按發(fā)送順序接收。如果一信源向相同的信宿發(fā)送兩個連續(xù)的數(shù)據(jù)報(先是A,然后是B),每個數(shù)據(jù)報都是獨立地進行路由選擇,可能選擇不同的路線,因此, B可能在A到達之前先到達。
IP數(shù)據(jù)包的格式如圖4所示。
版本是指IP協(xié)議的版本號。目前的協(xié)議版本號是4, 因此IP也稱作IPV4。
首部長度指的是首部占32bit字的數(shù)目。由于它是一個4位字段,因此首部最長為60個字節(jié)。在這里,IP數(shù)據(jù)報字段的值是5。
服務類型字段包括一個3位的優(yōu)先權子字段(現(xiàn)在已被忽略)、4位的TOS子字段和1位未用位但必須置0。4bit的TOS分別代表:最小時延、最大吞吐量、最高可靠性和最小費用。4bit中只能置其中1bit 。如果所有4bit 均為0,那么就意味著是一般服務。
總長度字段是指整個I P 數(shù)據(jù)報的長度,以字節(jié)為單位。利用首部長度字段和總長度字段,就可以知道I P 數(shù)據(jù)報中數(shù)據(jù)內容的起始位置和長度。
標識字段唯一地標識主機發(fā)送的每一份數(shù)據(jù)報。
標志字段用來指定目的地址是一個完整的主機地址還是一個網(wǎng)絡地址。
生存時間字段設置了數(shù)據(jù)報可以經(jīng)過的最多路由器數(shù)。
首部檢驗和字段是根據(jù)IP首部計算的檢驗和碼。
源地址和目的地址都是32位的數(shù)據(jù)。
可選項定義安全和處理限制、記錄路徑、時間戳、寬松的源站選路、嚴格的源站選路等信息。
(2)SX協(xié)議棧對IP層的實現(xiàn)
SX52BD100的協(xié)議棧中,IP層的實現(xiàn)就是把要發(fā)送出去的消息進行IP打包,即加上IP包頭,使之符合IP數(shù)據(jù)包的格式發(fā)送到物理層;將接收到的來自物理層的數(shù)據(jù)包進行IP解包,即去掉包頭,送到TCP層。應注意,協(xié)議棧不接收分片的IP包,因為它并不對接收到的數(shù)據(jù)進行重新打包。
2. 傳輸層
(1)TCP 協(xié)議
TCP提供一種面向連接的、可靠的字節(jié)流傳送服務。TCP數(shù)據(jù)包的結構如圖5所示。
每個TCP段都包含源端和目的端的端口號,用于尋找發(fā)端和收端應用進程。這兩個值加上IP包頭中的源端IP地址和目的端IP地址,唯一確定一個TCP連接。
序號用來標識從T C P 發(fā)端向T C P 收端發(fā)送的數(shù)據(jù)字節(jié)流。它表示在這個報文段中的第一個數(shù)據(jù)字節(jié)。
確認序號包含發(fā)送確認的一端所期望收到的下一個序號。
首部長度給出首部中32bit字的數(shù)目。
緊急指針是一個正的偏移量,與序號字段中的值相加表示緊急數(shù)據(jù)最后一個字節(jié)的序號。其余字段的意義和IP包中的差不多。
為了保證TCP層的數(shù)據(jù)能有效地傳輸,在建立TCP連接時,用到了三向握手機制。具體過程如下(假設在A、B間通信,A、B的初始化序號為X、Y):
① 由A向B發(fā)出SYN信號,告訴B,A的初始化序號為X。
② 由B向A發(fā)出ACK和SYN信號,告訴A,B知道A的初始化序號為X,B的是Y。
③ 由A向B發(fā)出ACK信號,告訴B,A知道B的初始化序號是Y。
經(jīng)過這樣的初始化后,TCP連接的建立就完成了,A與B之間的數(shù)據(jù)傳輸也可靠了。
(2) SX協(xié)議棧對TCP層的實現(xiàn)
在SX52BD100的協(xié)議棧中,對TCP層的實現(xiàn)是通過提供的TCP API(應用程序接口)來實現(xiàn)。TCP的API主要包括下面的函數(shù)和變量:
TCPApp1Init():建立第一個TCP連接的初始化函數(shù);
TCPApp2Init():建立第二個TCP連接的初始化函數(shù);
TCPAppTxBytes():TCP連接中發(fā)送數(shù)據(jù)的字節(jié)數(shù);
TCPAppRxBytes():TCP連接中接收數(shù)據(jù)的字節(jié)數(shù);
TCPAppTxData():發(fā)送數(shù)據(jù);
TCPAppRxData():接收數(shù)據(jù);
TCPAppTxDone():發(fā)送完畢;
TCPAppRxDone():接收完畢;
TCPAppPassiveOpen():被動TCP連接;
TCPApPACtiv