a一级爱做片免费观看欧美,久久国产一区二区,日本一二三区免费,久草视频手机在线观看

新聞中心

EEPW首頁 > 手機與無線通信 > 設計應用 > 對Windows TCP/IP協議棧的一種簡化設計

對Windows TCP/IP協議棧的一種簡化設計

作者: 時間:2012-05-22 來源:網絡 收藏

摘要:為了讓下的網絡數據快速發送與接收,提高實時性能,采用對 棧進行一種,通過利用提供的用戶與設備對象的交互,減少Windows從用戶態到內核態的分層,對Socket層進行簡單的封裝,并且利用零拷貝技術減少數據的拷貝次數以及設置多級優先級隊列使數據按照優先級發送,從而使數據達到快速發送和接收的目的。實驗結果驗證了這種方法能達到預期效果。

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

關鍵詞:網絡體系結構;驅動;;零拷貝;優先級隊列

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

1 Windows網絡的多層結構

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

a.JPG

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

2 對Windows TCP/IP協議棧的

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

b.JPG

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

2.1 采用零拷貝技術

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

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

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

反之,在收包時,網卡通過DMA把數據傳輸到內核緩沖區中,網卡驅動程序中依然用包描述符來指明數據的地址,大小等信息。在收包處理線程中,對數據包的拆包等操作,同樣的不需要拷貝到新的緩沖區中,利用包描述符提供的包地址,大小等信息進行處理即可。

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



上一頁 1 2 3 下一頁

評論


相關推薦

技術專區

關閉