基于SF0020芯片的嵌入式TCP/IP協(xié)議族設(shè)計(jì)與實(shí)現(xiàn)
發(fā)送數(shù)據(jù)報(bào)時(shí)采用大緩沖區(qū)方案:即將緩沖區(qū)劃分的足夠大(1514字節(jié)),提前留出協(xié)議首部字節(jié)的大小,能夠存儲(chǔ)最長(zhǎng)的分組。接收數(shù)據(jù)報(bào)時(shí)采用鏈表方案:為了避免內(nèi)存碎片的產(chǎn)生該緩沖區(qū)采用固定大小。鏈表的特點(diǎn)是允許快速封裝而無(wú)需數(shù)據(jù)的復(fù)制,也就是說當(dāng)接收到遞交上來(lái)的數(shù)據(jù)報(bào)后,就分配一個(gè)新緩沖區(qū),填寫其中的內(nèi)容后將新緩沖區(qū)插入保存此信息的鏈接列表中,這樣就可以很容易的在某個(gè)信息的前面插入附加字節(jié),而無(wú)需移動(dòng)已經(jīng)存在的數(shù)據(jù)。采用此方法可以優(yōu)化TCP數(shù)據(jù)報(bào)的重組。
采用以上兩種方法可以最大限度實(shí)現(xiàn)TCP/IP協(xié)議族內(nèi)數(shù)據(jù)公用,無(wú)需額外數(shù)據(jù)搬移。
3.3 協(xié)議族數(shù)據(jù)流程
如下圖3所示,用戶待發(fā)送的數(shù)據(jù)首先通過socket接口程序進(jìn)入TCP/IP協(xié)議族,分別進(jìn)行TCP與IP的數(shù)據(jù)封裝后查詢ARP高速緩存,如果存在當(dāng)前目的IP與硬件地址的映射則填充以太網(wǎng)幀頭部信息后拷貝至以太網(wǎng)驅(qū)動(dòng)程序空間立即發(fā)送,否則發(fā)出ARP查詢報(bào)文,將當(dāng)前用戶數(shù)據(jù)拷貝至發(fā)送等待緩沖,進(jìn)入接收狀態(tài)等待ARP查詢報(bào)文的應(yīng)答。
由于輸入操作發(fā)生在中斷期間,此時(shí)設(shè)備驅(qū)動(dòng)程序是不能調(diào)用任何過程來(lái)處理分組,也就是說中斷服務(wù)程序并不直接調(diào)用IP,而是使用了消息傳遞的方式。當(dāng)一個(gè)IP分組到達(dá)之后用消息通知主循環(huán),由主循環(huán)調(diào)用協(xié)議族進(jìn)行數(shù)據(jù)處理。如下圖4所示,首先通過以太網(wǎng)子層分路到達(dá)幀,如果是ARP報(bào)文則檢查更新ARP緩沖,收到ARP請(qǐng)求立即應(yīng)答,若是應(yīng)答報(bào)文則檢查本地發(fā)送等待隊(duì)列如有數(shù)據(jù)立即發(fā)送;如果是IP報(bào)文首先判定其協(xié)議類型,ICMP報(bào)文中的ping命令請(qǐng)求回顯則立即應(yīng)答,源站抑制報(bào)文交給TCP處理;若是TCP協(xié)議進(jìn)入有限狀態(tài)機(jī)進(jìn)行解析最后將有效數(shù)據(jù)通過socket接口遞交上層。
圖3 協(xié)議族數(shù)據(jù)發(fā)送處理框圖 圖4 協(xié)議族數(shù)據(jù)接收處理框圖
4、 結(jié)論
經(jīng)過裁剪的嵌入式TCP/IP協(xié)議族,結(jié)構(gòu)精簡(jiǎn),實(shí)時(shí)性強(qiáng),可以在SF0020芯片上穩(wěn)定運(yùn)行,基于該協(xié)議族的網(wǎng)絡(luò)監(jiān)控系統(tǒng)控制終端通過了專項(xiàng)測(cè)試達(dá)到期望的要求。本文引用地址:http://www.ex-cimer.com/article/195759.htm
tcp/ip相關(guān)文章:tcp/ip是什么
評(píng)論