嵌入式WEB服務器中TCP/IP協議棧的設計與實現
嵌入式TCP/IP協議棧結構如圖2所示。
圖2 嵌入式TCP/IP協議棧
2.2 嵌入式TCP/IP協議棧數據處理流程
嵌入式TCP/IP協議棧處理數據流程如圖3所示。
系統初始化后,進入主程序循環部分。主程序循環包括兩大部分:對接收到的以太網數據幀進行解包和對欲發送的數據進行封裝并發送。對接收到的以太網數據幀進行解包,供應用程序使用;對欲發送的數據進行打包,將數據以以太網數據幀的格式發送出去,使采用TCP/IP協議的以太網內所有計算機能收到此數據幀。
詳細過程為:先檢查是否收到以太網數據幀,若己收到以太網數據幀,則檢測以太網數據幀首部,判斷所載數據類型,然后對接收到的數據進行相應處理:若接收到的以太網數據幀中包含ARP數據,則調用ARP處理程序;若接收到的以太網數據幀中包含IP數據報,則針對其是否為ICMP、TCP協議格式分別進行相應的解包處理。若不包含IP數據報,則丟棄此數據幀。
若未收到以太網數據幀,此時若有數據要發送,則對數據進行打包,將數據以以太網數據幀的格式發送出去。若無數據要發送,則回到主程序循環。
圖3 嵌入式TCP/IP協議棧主流程圖
3 嵌入式Web服務器中TCP/IP棧的實現
3.1 ARP協議實現
嵌入式Web服務器中ARP協議主要功能是進行IP地址與以太網地址之間的轉換,當系統收到發送數據請求時,協議棧就需要返回IP數據報,所有的 IP數據報都要進一步封裝成以太網幀才能發送給網絡控制器,而所加的以太網首部中就包含了由ARP協議解析目的IP地址所得來的對應的物理地址。
首先ARP程序檢測以太網幀的類型字段以判斷其協議類型。以太網標準規定,當一個以太網幀攜帶一個ARP消息時,類型字段必須包含十六進制值0806。接著,檢測消息中的操作字段以確認是一個請求消息還是一個應答消息。若是一個請求消息,ARP程序比較目標IP地址與自己的IP地址,如果一樣,則要回發一個應答消息。對接收到的來自遠程主機的任何試圖解析Web服務器地址的ARP請求,Web服務器都會做出回應。
當Web服務器向客戶機發送一個ARP消息時,此消息是嵌入一個以太網幀中廣播給網上的所有計算機,每臺計算機收到這個請求后都會檢測其中的IP地址。與該IP地址匹配的計算機發送一個應答,這個應答消息被放進一個幀中直接發回給Web服務器,而其他的計算機則會丟棄收到的請求,不發任何應答。這種方式雖然對網絡造成一定的壓力,但節省嵌入式設備的寶貴資源。在等待應答的時間里,ARP將到達的TCP包丟棄,一旦收到應答,ARP高速緩存就用目的以太網地址更新,然后等待分組就用高速緩存中的目的以太網地址更新,分組就被發送了。
linux操作系統文章專題:linux操作系統詳解(linux不再難懂)tcp/ip相關文章:tcp/ip是什么
評論