關於分散式路由表
分散式路由表 (DRT) 會以網格的形式存在,其中每個節點都是使用 DRT API 的應用程式實例。 發佈金鑰的節點負責協助其他節點發布和解析金鑰。 節點也可以參與「僅解析」方式,不需要它們協助對等。 DRT 通訊協定會透過 UDP/IPv6 傳輸執行。
發佈金鑰組建並維護網格中其他節點的本機路由表的節點。 此路由表已優化,讓節點可以直接在本機路由表中尋找索引鍵,或要求其他節點以數值接近目標的方式,快速找出網格中的特定索引鍵。 此動作會重複執行,直到找到必要的金鑰,或節點判斷沒有這類金鑰存在為止。
DRT 金鑰是 256 位不帶正負號的整數。 索引鍵之間的接近性是由索引鍵之間的數值差異所定義。 DRT keyspace 會被視為迴圈。 例如,第一個可能的索引鍵值,最後一個可能的索引鍵值會被視為芳鄰。
在安全的 DRT 中,需要節點才能驗證其發佈的金鑰。 在初始化 DRT 時,節點必須使用 DRT API 來設定驗證金鑰的機制。 這是藉由選擇 DRT 的安全性提供者來完成。 安全性提供者是一個模組,可產生用來驗證金鑰的權杖,以及驗證其他節點所產生的權杖。 它必須實作本檔中定義的安全性提供者介面。 Windows 7 DRT 隨附兩個完全實作的安全性提供者,可用來建置 Windows 應用程式。
在初始化期間,應用程式也必須提供 DRT 與啟動程式提供者。 啟動程式提供者是一個模組,可擷取已存在於 DRT 網狀結構中的節點網路端點,並在建立新節點時由 DRT 呼叫。 如同安全性提供者模組,啟動程式提供者必須實作定義良好的介面。 Windows 7 DRT 隨附兩個完全實作的啟動程式提供者。
DRT 會考慮金鑰特殊專案的緊鄰。 五個最接近的索引鍵數值較小,而五個最接近的索引鍵數值大於已發佈的索引鍵形式,稱為分葉集。 DRT 會透過 DRT API 報告金鑰分葉集的變更。
DRT 生命週期和狀態轉換
應用程式可以使用 DrtOpen 函式來初始化本機 DRT 實例。 此函式會觸發啟動程式,其中 DRT API 會在啟動程式提供者上呼叫,以瞭解已參與 DRT 之其他節點的金鑰和網路端點。 如果啟動程式提供者已成功找到至少一個其他節點,DRT 就會進入DRT_ACTIVE狀態。 在此狀態下,應用程式可以搜尋其他節點所發佈的金鑰,並可發佈可解析的金鑰。 如果啟動程式提供者無法成功找到其他節點,DRT 就會進入DRT_ALONE狀態。 DRT 會保持DRT_ALONE狀態,並嘗試定期啟動,以找出對等並移至DRT_ACTIVE狀態。
節點可以從DRT_ACTIVE轉換至這些狀態。
生命週期狀態 | 條件 |
---|---|
DRT_ALONE | 本機節點尚未探索到 DRT 中的其他節點。 處於此狀態時,節點會繼續接聽 DRT 內的其他節點。 如果另一個節點聯結 DRT,本機節點會轉換為DRT_ACTIVE狀態。 如果網路已關閉,則會轉換為DRT_NO_NETWORK。 如果 DRT 發生嚴重錯誤,節點將會轉換成DRT_FAULTED狀態。 |
DRT_NO_NETWORK | 當節點失去網路連線能力時,它會轉換成DRT_NO_NETWORK狀態。 此時,應用程式可以等候網路線上還原,而且可以關閉 DRT。 |
DRT_FAULTED | 本機節點內發生嚴重錯誤。 例如,如果本機電腦用完實體記憶體。 當節點進入此狀態時,應用程式必須呼叫 DrtClose API、修正問題,並使用 DrtOpen 重新初始化 DRT。 |