青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-60  評論-111  文章-0  trackbacks-0

標 題: Windows網絡體系結構總結
作 者: jbwang
時 間: 2009-11-23,11:22:25
鏈 接: http://bbs.pediy.com/showthread.php?t=101794

做了一些東西自己也看了一些書,最近總結了一下,想給大家分享一下,高手可以飛過了。如果有什么問題可以給小弟指正一下,多謝!

在介紹Windows網絡體系架構之前,我首先介紹一下Windows中的兩個重要編程規范——TDI,NDIS.,然后再介紹網絡體系的架構。
TDI,Transport Driver Interface,傳輸驅動程序接口。\Windows\System32\Drivers\Tdi.sys
在實現網絡API驅動程序時,由于牽涉到很多不同協議,會用到不同協議驅動提供的接口,使得開發的工作復雜化。所以Microsoft在網絡API驅動程序和協議驅動之間又增加了一層TDI。TDI接口只是一種"將網絡請求格式化成IRP,以及申請網絡地址和數據通信"的做法規范化。遵從TDI標準的傳輸協議向他們的客戶(如Socket emulator,Netbios emulator等)導出了TDI接口,有利于上下層之間的通信:
?  一方面,對于TDI上層的網絡API驅動程序就不需要使用所有協議驅動程序所提供的接口,直接使用TDI提供的統一接口。
?  另一方面,對于下層協議驅動程序(也稱為TDI Transport Provider傳輸器)直接由TDI接口來調用,發出請求。
 


在Windows VISTA版本之后,TDI就不再使用了,取而代之的是Windows filter platform和Winsock kernel。

NDIS,Network Driver Interface Specification,網絡驅動程序接口規范,在操作系統中的位置
\Windows\System32\Drivers\NDIS.sys
當一個協議驅動程序想要按照其協議的格式解析網上讀寫的數據時,而這些數據必須通過網絡適配器才能取得,期望協議驅動程序能夠理解市場上的每一款網絡適配器的細微區別是不可能的。所以在1989年,由Microsoft和3Com聯合開發的了NDIS,使得協議驅動程序可以以一種與設備無關的方式來跟網絡適配器驅動程序進行通信。遵從NDIS的網絡適配器驅動程序稱為NDIS minport driver。

 

 
NDIS規范實現了與TDI標準類似的功能,都是將復雜的下層調用規范化、標準化,大大提高了Windows操作系統的可擴展性和兼容性。也表現在兩個方面:
?  對于下層,讓網絡適配器制造商很easy的開發自己的設備驅動程序,也就是Ndis miniport driver。這些miniport driver直接利用NDIS提供的接口發送指令,NDIS對這些格式化的指令進行解析,做進一步處理。(這些處理就到了HAL了)
?  對于上層,多個協議驅動程序與下層minport driver之間的通信,也都是通過統一的NDIS接口,NidsAllocatePacket,NdisSend等函數來收發數據。

廢話兩句:TDI和NDIS兩大接口規范,有力的提升了Windows操作系統對不同設備廠商的支持,降低了設備廠商對設備驅動程序開發的難度;也增加了對于不同網絡協議的支持,給用戶更強大的網絡功能支持。這種設計我們也可以在Windows存儲管理中看到,從中我們似乎可以了解到一些,Windows操作系統在商業上取得成功的原因。Linux操作系統中沒有這樣的驅動層次結構。

設備制造商開發的Ndis miniport driver直接調用NDIS庫中的接口函數,因此不需要考慮重入的問題,就是一個請求尚未結束的時候,新的請求又進來了。NDIS庫對請求進行了序列化,但是這種序列化也妨礙了多處理器的擴展性。所以NDIS5中提供了非序列化的操作項。下面,我來介紹一下,Deserialized和Serialized minport driver的區別:
Deserialized NDIS miniport driver自己序列化對MinportXxx函數的操作,排隊和管理多個并發請求的任務都由驅動程序自己來完成。而Serialized NDIS miniport driver以上的工作都是依賴于NDIS庫來完成的。從性能角度看,Deserialized NDIS miniport driver的性能是Serialized NDIS miniport driver性能的2倍多,所以到NDIS6.0之后的所有Miniport driver都是deserialize的。

 
以上是我參考MSDN以及自己的一些理解畫出來的windows網絡架構圖,下面我就從上到下來簡單介紹一下其中的各個層。

 


1.  網絡應用程,Network applicantion,用戶態的應用程序調用Windows操作系統提供的網絡API,網絡API包括:
a)  Windows套接字(winsock)
b)  遠程過程調用RPC
c)  Web訪問API
d)  命名管道和郵件槽
e)  其他網絡API
這些API既可以在用戶模式下實現,也可以同時在用戶模式和內核模式下實現。從本質上說這些API是下層提供接口的另一層封裝而已。
2.  TDI Clients,傳輸驅動程序接口客戶,是內核模式的設備驅動程序,用于實現網絡API的內核部分。將網絡API的請求轉換成IRP,通過TDI標準格式化后,發送給下層的協議驅動(也就是TDI傳輸器)。從sockets emulator的架構圖看到,TDI Clients的實現可以有用戶態的部分,也有內核態的部分。AFD輔助功能驅動程序通過向協議驅動程序發送TDI IRP來執行網絡套接字操作,比如發送和接受消息。AFD沒有不是確定使用哪一個協議驅動,而是上層通知其要使用的協議名稱,然后AFD去打開相應協議的設備對象。

 

 
3.  TDI Transport Providers、TDI傳輸器、NDIS協議驅動程序、協議驅動程序,所有這些其實就是指的同一個東西,我在后面就稱其為協議驅動程序。這個部分就是我們對某個協議的具體實現部分。做過網絡協議開發的朋友一定知道,協議其實就是雙發協商好的一套通信的規則。以IP協議為例,實際上就是對網絡數據的一種處理方式,根據網絡數據包的解析結構,做出相應的處理。Windows的tcpip.sys就實現了多個協議,ip、tcp、udp、arp、icmp、igmp,它為上層的TDI Clients提供了5個設備對象,用于訪問使用這些協議,TDI Clients打開這些設備對象,向其發送IRP請求來實現自己的操作。通過DDK的DeviceTree我們可以得到這些設備對象
a)  \Device\Rawip
b)  \Device\Tcp
c)  \Device\Udp
d)  \Device\IPMULTICAST
e)  \Device\Ip
協議驅動程序處理的數據是通過NDIS庫中提供的接口來獲取的,不需要發送IRP來取得。在DDK XP中提供了一個協議驅動程序了源程序Ndisuio,DDK XP后的版本提供的是Ndisport。在DriverEntry中我們可以看到,驅動程序一開始就注冊了一個NDIS_PROTOCOL_CHARACTERISTICS,這個結構體中是一堆NdisXxxx函數。NDIS規范在這里就開始發揮它的作用了。
協議驅動程序的另一個作用就是監聽網絡數據,自己開發一個網絡協議通過Ndis API獲得所有的網絡數據,但是不能夠攔截網絡數據,因為其他協議驅動也可以通過Nids API獲取數據。一個典型的應用就是Winpcap了,使用NPF.SYS來捕獲網絡數據,并且做好充分緩沖處理,防止大數據量到來時出現數據包丟失的情況。詳情情節winpcap的開源代碼。
具體的協議驅動開發過程,我就不細述了,大家可以參看Ndisuio和DDK doc,我推薦boywhp的一篇文檔《NDIS協議驅動開發》給大家。
4.  NDIS,Network Driver Interface Specification,網絡協議接口標準。從圖中我們可以看到包裹在其中的兩個驅動程序,一個是NDIS intermediate driver,NDIS中間層驅動程序,另一個是NDIS minport driver,小端口驅動程序。下面簡單介紹一下這兩個驅動程序:
a)  Ndis intermediate driver,NDIS中間層驅動程序,對于上層的protocol driver它充當minport driver的作用,對于下層的minport driver它充當一個protocol driver的作用,所以在驅動程序DriverEntry中就注冊NDIS_PROTOCOL_CHARACTERISTICS和NDIS_MINIPORT_CHARACTERISTICS,使用protocol characteristics中NDIS API從miniport driver那里取得數據包,再用miniport characteristics的NDIS API向上層的protocol driver發送數據包。Nids intermediate driver最大的優勢就是所有miniport driver的數據包都要通過它這里倒手給protocol driver,所以網絡防火墻就看上了這塊風水寶地。現在很多網絡防火墻都使用NDIS intermediate driver做數據包的過濾和攔截工作,過濾的規則設置到MPSendPackets,PTReceive,PTReceiveRacket這三個函數。具體開發過程請大家參考DDK提供的PassThru源代碼,www.ndis.com, 網上有很多相關的資料。
NDIS 6.0之后,filter driver就取代了Ndis intermediate driver,WDK中提供源碼。
b)  Ndis miniport driver一般是由設備廠商提供的,在DDK中也提供了miniport driver的一個例子e100bex,支持Intel EtherExpressTM PRO/100+ Ethernet PCI adapter 和Intel EtherExpressTM PRO/100B PCI adapter兩款網絡適配器。
5.  最后介紹一下總線,計算機總線有好幾種,USB總線、ISA總線、PCI總線、虛擬總線等,一般都是以PCI總線作為根總線,在Windows系統中其他的總線可以理解為PCI總線上的一個設備。PCI總線作為根總線,其傳輸速度較高,可以達到133MB/S,顯卡和網卡很多都是用PCI插槽。
PCI-ISA橋設備,也稱為南橋,實現了ISA總線與PCI總線的橋接, 南橋還包括終端、IDE、USB、DMA等控制器設備。其中USB-HOST設備實現了USB總線和PCI總線的橋接。HOST/PCI橋稱為北橋,是主處理器中心啊到基礎PCI局部總線。南橋和北橋組成了主板的芯片組,通過芯片的擴展實現了多種總線與基礎PCI局部總線的橋接。
總線驅動程序和PNP管理器實現了即插即用的功能,物理設備對象PDO就是由總線驅動程序產生的。

posted on 2011-02-22 14:48 shaker(太子) 閱讀(1179) 評論(0)  編輯 收藏 引用 所屬分類: C++
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美激情a∨在线视频播放| 狠狠色丁香婷综合久久| 亚洲国产一区二区视频| 久久精品国产v日韩v亚洲 | 午夜精品久久久久久久蜜桃app | 久久免费视频在线| 久久精品亚洲国产奇米99| 亚洲欧美日韩区| 午夜视频一区在线观看| 久久久久久久综合日本| 米奇777超碰欧美日韩亚洲| 久久夜色精品亚洲噜噜国产mv| 久久久最新网址| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美激情一区| 亚洲已满18点击进入久久| 久久婷婷国产综合尤物精品| 欧美激情中文字幕乱码免费| 久久精品成人一区二区三区蜜臀 | 国产一区二区无遮挡| 136国产福利精品导航网址| 精品不卡视频| 欧美一级专区免费大片| 亚洲黑丝一区二区| 性色av一区二区三区在线观看| 久久综合激情| 国模一区二区三区| 亚洲一区二区三区免费观看| 欧美激情一区二区久久久| 亚洲欧美春色| 欧美系列电影免费观看| 99精品热视频只有精品10| 欧美黄免费看| 欧美成人免费观看| 亚洲精品在线观| 欧美国产精品劲爆| 久久亚洲欧美| 亚洲国产精品va在线看黑人动漫| 久久精品综合网| 欧美一区二区三区免费视频| 国产一级精品aaaaa看| 久久久精品国产99久久精品芒果| 亚洲视频在线一区观看| 国产精品久久久久久久久久直播 | 亚洲第一在线| 欧美日韩直播| 欧美一级黄色网| 久久精品日产第一区二区三区| 亚洲欧美另类在线观看| 激情一区二区| 日韩视频中午一区| 韩国av一区二区三区| 免费的成人av| 欧美日韩亚洲一区二区三区在线观看 | 99在线精品观看| 国产精品久久久久久av福利软件| 亚洲欧美中文另类| 久久久人成影片一区二区三区观看| 亚洲福利视频一区| 亚洲一区二区三区久久| 揄拍成人国产精品视频| 一本色道88久久加勒比精品 | 欧美性理论片在线观看片免费| 欧美一级黄色网| 欧美日韩国产色站一区二区三区| 狂野欧美激情性xxxx欧美| 欧美午夜理伦三级在线观看| 亚洲国产高清在线| 国产亚洲欧美中文| 日韩一区二区精品| 一区二区三区久久网| 欧美mv日韩mv亚洲| 老司机67194精品线观看| 国产精品久久久久久久久免费| 亚洲黄色在线观看| 91久久精品网| 欧美**字幕| 亚洲精品一区久久久久久 | 免费成人高清视频| 欧美性大战xxxxx久久久| 99精品热视频| 欧美一区在线看| 国产一区二区三区在线免费观看| 欧美中文字幕第一页| 女同一区二区| 亚洲视频大全| 国产视频精品网| 欧美激情精品久久久久久黑人| 男同欧美伦乱| 亚洲综合二区| 一区免费在线| 欧美成人激情视频| 亚洲自拍三区| 亚洲精品国产精品国产自| 亚洲一区在线播放| 亚洲日本黄色| 国产在线播放一区二区三区| 欧美成人一区二区三区在线观看| 一区二区日韩欧美| 欧美激情视频一区二区三区在线播放 | 国产亚洲午夜| 欧美日产一区二区三区在线观看| 亚洲免费小视频| 亚洲电影免费在线| 欧美大香线蕉线伊人久久国产精品| 亚洲一级黄色av| 99国产麻豆精品| 在线观看欧美激情| 伊人久久综合| 国产午夜精品理论片a级大结局| 欧美日韩一区二区三区四区在线观看 | 国产精品一二一区| 欧美日韩精品综合在线| 欧美电影在线观看| 欧美黄污视频| 欧美激情中文不卡| 欧美极品在线播放| 欧美日韩亚洲国产精品| 女人香蕉久久**毛片精品| 久久嫩草精品久久久精品一| 香蕉国产精品偷在线观看不卡| 日韩视频永久免费| 午夜精品影院| 久久在线免费观看视频| 免费的成人av| 欧美午夜不卡影院在线观看完整版免费 | 亚洲欧美日本在线| 欧美亚洲三区| 欧美精品一区二区三区在线播放 | 亚洲欧洲精品一区二区精品久久久| 免费av成人在线| 亚洲精品欧洲| 精品1区2区3区4区| 亚洲一卡久久| 欧美国产亚洲另类动漫| 亚洲天堂男人| 欧美日韩另类在线| 国产一区久久| 亚洲一区免费在线观看| 亚洲福利视频一区| 久久久亚洲人| 韩国成人福利片在线播放| 亚洲视频一起| 91久久精品日日躁夜夜躁欧美| 欧美一级大片在线免费观看| 国产精品初高中精品久久| 先锋a资源在线看亚洲| 欧美成人精精品一区二区频| 国产喷白浆一区二区三区| 亚洲综合第一| 亚洲图片你懂的| 欧美午夜精彩| 亚洲一区二区三区精品视频| 亚洲欧洲日产国产综合网| 欧美大香线蕉线伊人久久国产精品| 国产一区二区观看| 久久综合精品国产一区二区三区| 亚洲婷婷国产精品电影人久久| 欧美日韩免费精品| 欧美在线观看网址综合| 欧美中在线观看| 亚洲日本在线视频观看| 亚洲国产日韩在线| 欧美激情一区二区三级高清视频| 亚洲三级影院| 一本色道久久综合亚洲二区三区| 国产精品日韩在线观看| 亚洲欧美一区二区原创| 久久蜜桃精品| 午夜免费电影一区在线观看| 亚洲欧美一区二区在线观看| 欧美成人蜜桃| 国产欧美精品一区二区色综合| 久久久xxx| 欧美精品在线免费播放| 久久精品国产一区二区三| 欧美日韩岛国| 亚洲夫妻自拍| 亚洲第一成人在线| 欧美一区二区三区免费看| 日韩一级精品| 久久国产精品高清| 久久精品99久久香蕉国产色戒| 久色成人在线| 麻豆乱码国产一区二区三区| 欧美精品系列| 亚洲国产一区二区三区在线播 | 欧美xxxx在线观看| 亚洲欧美另类中文字幕| 欧美激情一区二区三区高清视频| 久久精品亚洲国产奇米99| 国产精品卡一卡二卡三| 日韩视频免费观看高清在线视频| 一区精品在线播放| 久久偷窥视频| 欧美韩日一区| 亚洲午夜免费视频| 欧美少妇一区| 久久久综合网站| 亚洲国产精品悠悠久久琪琪|