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