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

          新聞中心

          EEPW首頁 > 手機(jī)與無線通信 > 設(shè)計(jì)應(yīng)用 > 對(duì)Windows TCP/IP協(xié)議棧的一種簡化設(shè)計(jì)

          對(duì)Windows TCP/IP協(xié)議棧的一種簡化設(shè)計(jì)

          作者: 時(shí)間:2012-05-22 來源:網(wǎng)絡(luò) 收藏

          摘要:為了讓下的網(wǎng)絡(luò)數(shù)據(jù)快速發(fā)送與接收,提高實(shí)時(shí)性能,采用對(duì) 棧進(jìn)行一種,通過利用提供的用戶與設(shè)備對(duì)象的交互,減少Windows從用戶態(tài)到內(nèi)核態(tài)的分層,對(duì)Socket層進(jìn)行簡單的封裝,并且利用零拷貝技術(shù)減少數(shù)據(jù)的拷貝次數(shù)以及設(shè)置多級(jí)優(yōu)先級(jí)隊(duì)列使數(shù)據(jù)按照優(yōu)先級(jí)發(fā)送,從而使數(shù)據(jù)達(dá)到快速發(fā)送和接收的目的。實(shí)驗(yàn)結(jié)果驗(yàn)證了這種方法能達(dá)到預(yù)期效果。

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

          關(guān)鍵詞:網(wǎng)絡(luò)體系結(jié)構(gòu);驅(qū)動(dòng);;零拷貝;優(yōu)先級(jí)隊(duì)列

          隨著現(xiàn)代信息技術(shù)的進(jìn)一步發(fā)展,對(duì)信息傳遞的速度及對(duì)大信息量的傳輸都有進(jìn)一步需求,在這樣的情況下,無論是對(duì)于硬件要求還是軟件方面的要求都在提升。而在相同的硬件條件下,如何提高通信的速度、實(shí)時(shí)性能,軟件的優(yōu)劣在很大程度上影響著這些方面。由于Windo ws的廣泛使用和其方便完善的網(wǎng)絡(luò)結(jié)構(gòu)的支持,針對(duì)Windows的網(wǎng)絡(luò)開發(fā)不斷增加,然而由于Windows系統(tǒng)為了包容多種以及Windows分層驅(qū)動(dòng)的特點(diǎn),導(dǎo)致數(shù)據(jù)從用戶應(yīng)用程序到網(wǎng)卡經(jīng)過的驅(qū)動(dòng)層數(shù)很多,勢(shì)必導(dǎo)致數(shù)據(jù)的延遲增加,這對(duì)那些要求通信實(shí)時(shí)性能較高的系統(tǒng)來說是無法容忍的。所以研究Windows網(wǎng)絡(luò)體系架構(gòu),對(duì)協(xié)議棧進(jìn)行優(yōu)化,使之適合于對(duì)于特定要求的系統(tǒng),有很重要的研究意義和價(jià)值。

          1 Windows網(wǎng)絡(luò)的多層結(jié)構(gòu)

          如圖1所示,標(biāo)準(zhǔn)的Windows網(wǎng)絡(luò)體系結(jié)構(gòu)的最底層是網(wǎng)卡,網(wǎng)卡通過NDIS與網(wǎng)卡(NIC)驅(qū)動(dòng)程序通信,網(wǎng)卡驅(qū)動(dòng)程序又通過NDIS與協(xié)議驅(qū)動(dòng)程序通信。在NIC驅(qū)動(dòng)程序和協(xié)議驅(qū)動(dòng)程序之間還可以插進(jìn)去一個(gè)中間驅(qū)動(dòng)程序。在協(xié)議驅(qū)動(dòng)程序的上邊,是內(nèi)核模式TDI客戶驅(qū)動(dòng)程序,通過TDI接口同協(xié)議驅(qū)動(dòng)程序交互。再往上,則是用戶模式的動(dòng)態(tài)連接庫(提供WIN32 NETAPI)及網(wǎng)絡(luò)應(yīng)用程序。

          a.JPG

          從圖1中可以看出,用戶層編寫網(wǎng)絡(luò)程序與其他主機(jī)進(jìn)行通信,發(fā)送數(shù)據(jù)需要經(jīng)過Sockets接口,TDI客戶,TDI傳輸驅(qū)動(dòng)接口,MDIS協(xié)議驅(qū)動(dòng)(TCP/IP協(xié)議棧),NIC驅(qū)動(dòng)程序,網(wǎng)卡,可以看出數(shù)據(jù)從用戶提交給網(wǎng)卡的分層很多,Windows操作系統(tǒng)利用這種分層的方法,有諸多好處,開發(fā)人員可以只關(guān)注整個(gè)結(jié)構(gòu)中的某一層;分層可以降低層與層之間的依賴,既可以良好地保證未來的可擴(kuò)展,在復(fù)用性上也是很好的優(yōu)勢(shì)。但是分層結(jié)構(gòu)也不可避免具有一些缺陷,一方面,分層過多會(huì)導(dǎo)致系統(tǒng)性能的下降,因?yàn)椴徊捎梅謱咏Y(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫,以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過中間層來完成,其中需要處理數(shù)據(jù)通過各層的信息等操作,這些都降低了系統(tǒng)性能;另一方面是數(shù)據(jù)的拷貝次數(shù)增多,數(shù)據(jù)拷貝操作不單需要占用CPU時(shí)間片,同時(shí)也需要占用額外的內(nèi)存帶寬,這就增加了系統(tǒng)開銷。這些消耗都會(huì)造成數(shù)據(jù)的時(shí)間延遲增加,這對(duì)于那些對(duì)實(shí)時(shí)性能有特別要求的而又需要利用Windows平臺(tái)的系統(tǒng)來說,這是很難容忍的。

          2 對(duì)Windows TCP/IP協(xié)議棧的

          由于Windows網(wǎng)絡(luò)結(jié)構(gòu)分層較多,導(dǎo)致系統(tǒng)性能下降,網(wǎng)絡(luò)數(shù)據(jù)的實(shí)時(shí)性能得不到體現(xiàn),一種策略是現(xiàn)今Windows TCP/IP協(xié)議棧,減少分層;另一方面,利用零拷貝技術(shù)減少拷貝次數(shù),減少系統(tǒng)性能消耗;可以采用多級(jí)優(yōu)先級(jí)隊(duì)列,讓優(yōu)先級(jí)較高的數(shù)據(jù)比優(yōu)先級(jí)低的數(shù)據(jù)優(yōu)先發(fā)送的基本策略,采用適當(dāng)?shù)恼{(diào)度算法進(jìn)行處理。通過這幾個(gè)方面的改進(jìn),可以一定程度上彌補(bǔ)Windows系統(tǒng)網(wǎng)絡(luò)通信延遲較大的缺陷。

          b.JPG

          如圖2所示,第1層為用戶應(yīng)用層;第2層是協(xié)議驅(qū)動(dòng),里面包括簡化了的TCP/IP協(xié)議棧,只保留TCP,UDP,ARP,ICMP協(xié)議,并且對(duì)Wind ows中的AFD驅(qū)動(dòng)模塊簡化,一些數(shù)據(jù)結(jié)構(gòu)等就存放在設(shè)備擴(kuò)展中;第3層是網(wǎng)卡驅(qū)動(dòng),第4層就是具體收發(fā)數(shù)據(jù)的網(wǎng)卡。在這幾層里面第2層是最關(guān)鍵的部分,下面就具體如何設(shè)計(jì)進(jìn)行比較詳細(xì)的介紹。

          2.1 采用零拷貝技術(shù)

          簡單一點(diǎn)來說.零拷貝就是一種避免CPU將數(shù)據(jù)從一塊存儲(chǔ)拷貝到另外一塊存儲(chǔ)的技術(shù)。零拷貝技術(shù)可以減少數(shù)據(jù)拷貝和共享總線操作的次數(shù),消除傳輸數(shù)據(jù)在存儲(chǔ)器之間不必要的中間拷貝次數(shù),從而有效地提高數(shù)據(jù)傳輸效率。而且,零拷貝技術(shù)減少了用戶應(yīng)用程序地址空間和操作系統(tǒng)內(nèi)核地址空間之間因?yàn)樯舷挛那袚Q而帶來的開銷。在本文中對(duì)于TCP/IP協(xié)議棧,采用零拷貝技術(shù),避免操作系統(tǒng)內(nèi)核緩沖區(qū)之間進(jìn)行數(shù)據(jù)拷貝操作,可以大大提高系統(tǒng)性能。

          在接收發(fā)送數(shù)據(jù)時(shí),用NDIS中的NDIS_PACKET包描述符,包描述符中包含了數(shù)據(jù)包的總長度,指向第一個(gè)緩沖描述符NDIS_BUFFER的指針,緩沖描述符NDIS_BUFFER里面的Start Virtual Address才是指向真正的數(shù)據(jù)所在的首地址以及包含了此緩沖中的數(shù)據(jù)長度。利用這個(gè)NDIS_PACKET包描述符,可以實(shí)現(xiàn)無需對(duì)數(shù)據(jù)進(jìn)行拷貝,只要獲得包描述符即可。

          當(dāng)用戶數(shù)據(jù)提交給內(nèi)核緩沖區(qū)時(shí),采用直接I/O的方式,在內(nèi)核中需要分配一個(gè)包首部的大小,用于TCP/IP協(xié)議層加上各層的首部,并且把該首部地址以及用戶緩沖區(qū)地址用NDIS_PACKET包描述符封裝。當(dāng)發(fā)包線程把NDIS_PACKET包提交給協(xié)議棧處理時(shí),不需要把包描述符中的數(shù)據(jù)拷貝到新的緩沖區(qū)中,可以直接利用NDIS提供的函數(shù)得到數(shù)據(jù)的首地址,以及數(shù)據(jù)包的總長度等。在協(xié)議棧中添加上各層首部以及其他操作后,就可以調(diào)用發(fā)包函數(shù)把NDIS_PACKET包描述符提交給網(wǎng)卡驅(qū)動(dòng),網(wǎng)卡驅(qū)動(dòng)通過DMA把數(shù)據(jù)傳送到網(wǎng)卡環(huán)形緩沖區(qū)中,再由網(wǎng)卡發(fā)送出去。

          反之,在收包時(shí),網(wǎng)卡通過DMA把數(shù)據(jù)傳輸?shù)絻?nèi)核緩沖區(qū)中,網(wǎng)卡驅(qū)動(dòng)程序中依然用包描述符來指明數(shù)據(jù)的地址,大小等信息。在收包處理線程中,對(duì)數(shù)據(jù)包的拆包等操作,同樣的不需要拷貝到新的緩沖區(qū)中,利用包描述符提供的包地址,大小等信息進(jìn)行處理即可。

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



          上一頁 1 2 3 下一頁

          評(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); })();