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