<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è) > 手機與無(wú)線(xiàn)通信 > 設計應用 > 對Windows TCP/IP協(xié)議棧的一種簡(jiǎn)化設計

對Windows TCP/IP協(xié)議棧的一種簡(jiǎn)化設計

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

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

本文引用地址:http://dyxdggzs.com/article/154883.htm

關(guān)鍵詞:網(wǎng)絡(luò )體系結構;驅動(dòng);;零拷貝;優(yōu)先級隊列

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

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

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

a.JPG

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

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

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

b.JPG

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

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

簡(jiǎn)單一點(diǎn)來(lái)說(shuō).零拷貝就是一種避免CPU將數據從一塊存儲拷貝到另外一塊存儲的技術(shù)。零拷貝技術(shù)可以減少數據拷貝和共享總線(xiàn)操作的次數,消除傳輸數據在存儲器之間不必要的中間拷貝次數,從而有效地提高數據傳輸效率。而且,零拷貝技術(shù)減少了用戶(hù)應用程序地址空間和操作系統內核地址空間之間因為上下文切換而帶來(lái)的開(kāi)銷(xiāo)。在本文中對于TCP/IP協(xié)議棧,采用零拷貝技術(shù),避免操作系統內核緩沖區之間進(jìn)行數據拷貝操作,可以大大提高系統性能。

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

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

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

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



上一頁(yè) 1 2 3 下一頁(yè)

評論


相關(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>