<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > UDP數據報與TCP傳輸應用系統的層間接口設計

UDP數據報與TCP傳輸應用系統的層間接口設計

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

 ?。?)應用層和rap層的接口

  如果是作為客戶(hù)端,則包含:

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

  ·cONnect:需要使用connect進(jìn)行連接,當應用層調用connect函數時(shí),TCP層負責建立連接,返回值指 示是否連接成功;

  ·send:使用send發(fā)送一個(gè)應用層的數據;

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

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


 圖1 TCP/IP

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

  ·bind綁定;

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

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

  ·send發(fā)送;

  ·recelve接收;

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

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

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

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

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

 ?。?)TCP/IP內部的

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

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

 ?。?)實(shí)現隊列

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

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

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

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

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

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

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

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

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

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

  塊中的定時(shí)器。

  由于這里采用隊列的方式作為模塊或層間的接口,所以必須反復查詢(xún)各個(gè)模塊的輸入隊列,所有含有 輸入隊列的模塊都必須有一個(gè)反復被調用的函數,稱(chēng)之為進(jìn)程。在主進(jìn)程maln函數中反復地調用這些進(jìn)程。

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




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

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>