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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > UDP數(shù)據(jù)報(bào)與TCP傳輸應(yīng)用系統(tǒng)的層間接口設(shè)計(jì)

          UDP數(shù)據(jù)報(bào)與TCP傳輸應(yīng)用系統(tǒng)的層間接口設(shè)計(jì)

          作者: 時(shí)間:2011-12-08 來(lái)源:網(wǎng)絡(luò) 收藏
          TCP/IP協(xié)議大致可以分為以下的層次:應(yīng)用層、TCP/IP協(xié)議層、網(wǎng)卡驅(qū)動(dòng)。這些協(xié)議層之間的接口如圖 1所示,其中輸出是數(shù)據(jù)流向?qū)Ψ?,輸入是?shù)據(jù)流向本地應(yīng)用層。

            (1)應(yīng)用層和rap層的接口

            如果是作為客戶端,則包含:

            ·bind:使用bind綁定本地端口;

            ·cONnect:需要使用connect進(jìn)行連接,當(dāng)應(yīng)用層調(diào)用connect函數(shù)時(shí),TCP層負(fù)責(zé)建立連接,返回值指 示是否連接成功;

            ·send:使用send發(fā)送一個(gè)應(yīng)用層的數(shù)據(jù);

            ·recelve:當(dāng)rap層有數(shù)據(jù)到達(dá)時(shí),rap層將觸發(fā)OnReceive函數(shù),用戶可以在OnReceive函數(shù)中做接收 處理;

            ·close:需要使用close函數(shù)主動(dòng)和對(duì)方斷開(kāi)連接,連接斷開(kāi)以后返回真,如果斷開(kāi)操作超時(shí),則返回假。


           圖1 TCP/IP

            如果是作為服務(wù)器,則包含:

            ·bind綁定;

            ·listen:在綁定的本地端口監(jiān)聽(tīng);

            ·對(duì)方發(fā)來(lái)連接;

            ·send發(fā)送;

            ·recelve接收;

            ·close斷開(kāi)連接。

            總的來(lái)說(shuō),rap層要提供給應(yīng)用層以上的一些函數(shù)。

           ?。?)協(xié)議和網(wǎng)卡驅(qū)動(dòng)的接口

            發(fā)送時(shí),網(wǎng)卡提供send函數(shù),當(dāng)協(xié)議調(diào)用send函數(shù)時(shí),網(wǎng)卡驅(qū)動(dòng)負(fù)責(zé)發(fā)送這個(gè)包。

            接收時(shí),當(dāng)網(wǎng)卡接收到一個(gè)數(shù)據(jù)包以后,產(chǎn)生一個(gè)中斷,系統(tǒng)提供一個(gè)中斷處理函數(shù),在這個(gè)中斷函 數(shù)中將這個(gè)包提交給TCP/IP層。

            (3)TCP/IP內(nèi)部的

            發(fā)送流程如下:應(yīng)用層調(diào)用send,要求rap層發(fā)送,TOP層填寫好TCP頭部信息以后,要求IP層發(fā)送,IP 層檢查是否能在ARP緩存中找到IP對(duì)應(yīng)的物理地址,如果沒(méi)有則要ARP協(xié)議發(fā)送一個(gè)ARP請(qǐng)求,如果有則填 寫IP頭。再設(shè)置一個(gè)網(wǎng)絡(luò)接口層,這一層負(fù)責(zé)填寫MAC層頭部,這一層的另外一個(gè)功能是將接收網(wǎng)絡(luò)數(shù)據(jù) 流分流(也就是對(duì)IP包和ARP交給不同的函數(shù)處理)。

            對(duì)網(wǎng)卡的接收和TCP/IP協(xié)議的接口來(lái)說(shuō),直接在驅(qū)動(dòng)程序的接收中斷處理函數(shù)中處理P頭、TCP頭,然 后把數(shù)據(jù)送給應(yīng)用層。

            (4)實(shí)現(xiàn)隊(duì)列

            ·中斷處理函數(shù)過(guò)大,可能會(huì)帶來(lái)問(wèn)題;

            ·各個(gè)層的界面不清晰;

            ·越向底層所要發(fā)送的包數(shù)目越多。如果發(fā)送時(shí)也是從應(yīng)用層一直運(yùn)行到網(wǎng)卡驅(qū)動(dòng),

            那么就比較難解決底層的多佘數(shù)據(jù)包發(fā)送的問(wèn)題。

            所以將在層次之間設(shè)一個(gè)隊(duì)列,程序循環(huán)檢測(cè)各個(gè)層間隊(duì)列中是否有元素,如果有元素則提取后處理 。構(gòu)建的一個(gè)隊(duì)列結(jié)構(gòu)體如下。

            這個(gè)隊(duì)列提供隊(duì)列的初始化、隊(duì)列的寫入、隊(duì)列的讀出等函數(shù),以及完成隊(duì)列的操作。但是隊(duì)列多也 會(huì)占用資源和查詢時(shí)間,所以在沒(méi)有必要設(shè)置隊(duì)列的地方將苴接采用函數(shù)調(diào)用的方法。

           ?。?)模塊和模塊之間的接口

            各個(gè)模塊之中有三種類型的子模塊:一般函數(shù)、中斷函數(shù)和進(jìn)程。

            ·一般函數(shù)只有在被進(jìn)程調(diào)用時(shí)才運(yùn)行。

            ·中斷函數(shù)一般由中斷觸發(fā)而運(yùn)行,這里主要有網(wǎng)卡驅(qū)動(dòng)的接收處理函數(shù)和定時(shí)器模

            塊中的定時(shí)器。

            由于這里采用隊(duì)列的方式作為模塊或?qū)娱g的接口,所以必須反復(fù)查詢各個(gè)模塊的輸入隊(duì)列,所有含有 輸入隊(duì)列的模塊都必須有一個(gè)反復(fù)被調(diào)用的函數(shù),稱之為進(jìn)程。在主進(jìn)程maln函數(shù)中反復(fù)地調(diào)用這些進(jìn)程。

          tcp/ip相關(guān)文章:tcp/ip是什么




          關(guān)鍵詞: UDP TCP傳輸 層間接口

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();