<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 測試測量 > 設計應用 > 基于SF0020芯片的嵌入式TCP/IP協(xié)議族設計與實現(xiàn)

          基于SF0020芯片的嵌入式TCP/IP協(xié)議族設計與實現(xiàn)

          作者: 時間:2009-08-11 來源:網(wǎng)絡 收藏

          發(fā)送數(shù)據(jù)報時采用大緩沖區(qū)方案:即將緩沖區(qū)劃分的足夠大(1514字節(jié)),提前留出協(xié)議首部字節(jié)的大小,能夠存儲最長的分組。接收數(shù)據(jù)報時采用鏈表方案:為了避免內存碎片的產生該緩沖區(qū)采用固定大小。鏈表的特點是允許快速封裝而無需數(shù)據(jù)的復制,也就是說當接收到遞交上來的數(shù)據(jù)報后,就分配一個新緩沖區(qū),填寫其中的內容后將新緩沖區(qū)插入保存此信息的鏈接列表中,這樣就可以很容易的在某個信息的前面插入附加字節(jié),而無需移動已經(jīng)存在的數(shù)據(jù)。采用此方法可以優(yōu)化數(shù)據(jù)報的重組。
          采用以上兩種方法可以最大限度實現(xiàn)/協(xié)議族內數(shù)據(jù)公用,無需額外數(shù)據(jù)搬移。
          3.3 協(xié)議族數(shù)據(jù)流程
          如下圖3所示,用戶待發(fā)送的數(shù)據(jù)首先通過socket接口程序進入/協(xié)議族,分別進行TCP與的數(shù)據(jù)封裝后查詢ARP高速緩存,如果存在當前目的IP與硬件地址的映射則填充以太網(wǎng)幀頭部信息后拷貝至以太網(wǎng)驅動程序空間立即發(fā)送,否則發(fā)出ARP查詢報文,將當前用戶數(shù)據(jù)拷貝至發(fā)送等待緩沖,進入接收狀態(tài)等待ARP查詢報文的應答。

          由于輸入操作發(fā)生在中斷期間,此時設備驅動程序是不能調用任何過程來處理分組,也就是說中斷服務程序并不直接調用IP,而是使用了消息傳遞的方式。當一個IP分組到達之后用消息通知主循環(huán),由主循環(huán)調用協(xié)議族進行數(shù)據(jù)處理。如下圖4所示,首先通過以太網(wǎng)子層分路到達幀,如果是ARP報文則檢查更新ARP緩沖,收到ARP請求立即應答,若是應答報文則檢查本地發(fā)送等待隊列如有數(shù)據(jù)立即發(fā)送;如果是IP報文首先判定其協(xié)議類型,ICMP報文中的ping命令請求回顯則立即應答,源站抑制報文交給TCP處理;若是TCP協(xié)議進入有限狀態(tài)機進行解析最后將有效數(shù)據(jù)通過socket接口遞交上層。


          圖3 協(xié)議族數(shù)據(jù)發(fā)送處理框圖 圖4 協(xié)議族數(shù)據(jù)接收處理框圖

          4、 結論
          經(jīng)過裁剪的嵌入式TCP/IP協(xié)議族,結構精簡,實時性強,可以在芯片上穩(wěn)定運行,基于該協(xié)議族的網(wǎng)絡監(jiān)控系統(tǒng)控制終端通過了專項測試達到期望的要求。

          本文引用地址:http://www.ex-cimer.com/article/195759.htm

          tcp/ip相關文章:tcp/ip是什么



          上一頁 1 2 3 下一頁

          關鍵詞: 0020 TCP SF IP

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();