2016年8月12日 星期五

TDI Transports and Their Clients - III

TDI File Objects

所有的I/O請求被定向到一個打開的檔案物件,檔案物件可以表示為一個實體或是虛擬裝置,一個數據檔案,或是任何I/O請求的邏輯目標。檔案物件可以透過特定的程序開。舉例來說,I/O管理員對於每一個程序打開的特定數據檔案創建一個檔案物件。

TDI使用檔案物件來表示存在於網路環境下的任何實體。如下為TDI定義的實體類型:

TDI傳輸驅動以及底層的NDIS驅動提供一個機制,讓數據可以在一個程序上的網路節點轉移到另一個或多個程序上的網路節點上(遠端程序彼此的網路節點可能相同或不同)。前面提到的位址以及連接端點檔案物件可以展示了這樣的轉移發生手段

舉例來說,Windows2000及之後的版本的重定向程序開了兩個檔案物件,一個是傳輸位址而另外一個是關聯到此傳輸位址的連接端點,發送SMB(Server Message Block)訊息到一個遠端節點上的伺服程序以及接收來自遠端節點伺服程序的數據。


TDI支援的數據傳輸方式有不可靠的非連線與可靠連線導向這兩種。

不可靠的非連線數據可以發送至遠端節點程序(一個或是群組程序)中已經開的特定傳輸位址。當發送不可靠非連線數據,如數據報(UDP,datagrams),發送者只需要辨認遠端節點的位址。

如果一個端點-端點的連線(或稱作一個虛擬線路)已經建立,則可靠的連線導向數據傳輸可以在這兩個端點程序之間傳輸。端點-端點的連線是兩者之間的一對一關聯,並且只有兩個程序。要建立這樣的連線,一個程序必須要辨認另一個他想建立連線的程序。每個這樣的程序(client - server)必須開一個傳輸位址以及開各自網路節點上的連接端點,並且各自關聯打開的傳輸位址與連接端點。更多有關連接端點請看File Objects Represent Connection Endpoints.

TDI實體用於辨認一個特定的程序或者一個群的程序,TDI實體為一個或多個開特定程序的檔案物件,此檔案物件表示一個特定的傳輸位址(transport address)。這樣一個檔案物件包含傳輸指標(transport-supplied pointers)用於驅動維護特定程序的識別狀態以及程序所在的節點。一個”routable”傳輸狀態,例如TCP/IP, Mcsxns, AppleTalk 以及NWLink,維護有關這樣的位址也包含了識別節點所在網路(subnet)的資訊。

某些TDI定義的傳輸位址種類容納明示與暗示,指示位址辨識單一程序(為一位址),或是可以辨識一個群的程序(群位址)。在群位址的例子,TDI定義的位址可以包含辨識特定程序的資訊。

TDI支援多種的位址類型,下面介紹格式以及三種常用的TDI位址類型(這裡只會翻譯TDI_ADDRESS_IP,而NETBIOSIPX請參考原文):

TDI_ADDRESS_IP
IP類型位址包含一個port號碼以及一個標準Internet Protocol (IP)位址。因為TCP/IP允許在多個節點上的程序註冊相同的port號碼。IP位址需要唯一的識別該節點,以及port號碼需要唯一的識別該節點上的程序。在無連線的數據傳輸(使用TCP/IP中的UDP協議),可以在多個程序註冊相同的port號碼。另外,某些IP位址可以用於多個節點。數據發送至TDI位址(包含IP位址與port號碼),並且會接收來自於IP位址上所有節點的數據:數據會通過所有註冊特定(UDP)port號碼的程序。

File Objects Represent Connection Endpoints

檔案物件表示為一個開的連接端點(connection endpoint),此檔案物件可以識別為一個本地程序與遠端程序跨過網路彼此溝通的特定連結。

任何這樣的檔案物件必須與另一個開的檔案物件(特定的傳輸位址)彼此關聯。傳輸位址可以識別為一個程序,在 File Objects Represent Transport Addresses已經介紹過了。

在類似的方法中,傳輸(transport)使用本地連結端點的檔案物件來維護有關遠端節點的程序狀態,例如遠端節點傳輸位址與它的本地節點客戶端建立的端點到端點的連接。

客戶端程序可以在他自己與其他程序或是遠端節點之間建立多個端點-端點連接。例如,重定向在他自己與每一個遠端伺服端之間建立分開的連結。每一個客戶端可以擁有多個開的連接端點,並且分別地與同個傳輸位址互相的關聯。

每一個連接終端檔案物件用於區分在同一個程序上所建立的端點-端點連接。

沒有留言:

張貼留言