基于以太網和DTMF編解碼的遠程家居控制器
2.3 TCP/IP協(xié)議棧
由于該嵌入式 Web 服務器硬件結構簡單,硬件資源,特別是系統(tǒng)程序存儲空間容量有限,所以我們在該系統(tǒng)中采用了精簡 TCP/IP 協(xié)議棧,系統(tǒng)在應用層實現(xiàn)了HTTP 超文本傳輸協(xié)議,在傳輸層采用 TCP 協(xié)議,在網絡層實現(xiàn) IP 協(xié)議,同時還實現(xiàn)能報告數(shù)據傳送差錯等情況的 ICMP 協(xié)議。以太網數(shù)據的傳輸采用 MAC 地址來識別,而ARP協(xié)議提供 IP 地址和數(shù)據鏈路層使用的MAC地址之間的轉換功能,為了保證系統(tǒng)在以太網的通信,實現(xiàn)了ARP協(xié)議。
本設計中的精簡 TCP/IP 協(xié)議具有同 TCP/IP 協(xié)議一樣的四層結構,各層實現(xiàn)的功能如下:
①鏈路層。設計中通過以太網接入到 Internet,因此物理層和數(shù)據鏈路層要符合以太網的 IEEE802.3 標準。ENC28J60向上層軟件提供與硬件無關的接口,最終完成了數(shù)據在以太網中的接收和發(fā)送。因此,設計中物理層與數(shù)據鏈路層的設計是通過 ENC28J60硬件和驅動程序共同實現(xiàn)的。
②網絡層實現(xiàn)了 ARP協(xié)議、ICMP協(xié)議和 IP協(xié)議。ARP是地址解析協(xié)議,具體處理過程是當接收到 ARP數(shù)據包,處理器就查看 IP地址是請求還是響應。如果是響應,則將響應中的網卡地址存到 ARP 高速緩存表中;如果是請求,處理器將返回自己的網卡物理地址給對方。ICMP 是調試響應 PING 的請求,檢測網路是否通順。依照系統(tǒng)實際應用的要求,IP協(xié)議只需實現(xiàn)對數(shù)據報傳送和接收,無須實現(xiàn)路由選擇算法和差錯控制,同時也不需支持IP數(shù)據報的分片和重組。
③傳輸層實現(xiàn) TCP 協(xié)議。TCP 協(xié)議是面向連接的、端對端的可靠通信協(xié)議。設計中采取了 TCP 連接的建立與關閉機制、超時重傳機制、數(shù)據包確認機制、流量控制機制來保證
它的可靠性。在超時重傳機制中,如果超時重傳定時器溢出后還沒有收到確認,則重傳該數(shù)據包,并復位重傳定時器。為簡單起見,程序里每次只發(fā)送一個 TCP 數(shù)據包,然后等待它的確認,只有收到確認后才會繼續(xù)發(fā)送下面的 TCP 數(shù)據包。在本設計,程序重傳的間隔時間是固定的,沒有采用 TCP 協(xié)議中的標準算法,當達到一定的次數(shù)后,發(fā)送方還沒有收到確認,則會放棄該包的發(fā)送并關閉 TCP 連接。TCP 的流量控制是為了協(xié)調通信雙方的收發(fā)速率不均衡而設計的。設計中考慮到系統(tǒng)在使用 TCP協(xié)議時,只設置了一個中等 IP包大小接收緩存,因此接收窗口恒定設為 1024。這樣遠端主機就會以較慢的傳輸速率與本端的 Web服務器進行通信,不會導致死機。
④應用層實現(xiàn)了 HTTP 協(xié)議。HTTP 是在 Web 服務器和瀏覽器之間通信的協(xié)議。為了簡化,設計中采用固定的 HTTP報文頭封裝 HTTP應答數(shù)據報文。在響應 HTTP 請求時,由于以太網數(shù)據包的數(shù)據部分不能超過 1500 字節(jié),因此當發(fā)送數(shù)據超過 1500 字節(jié),需要分組發(fā)送。
評論