Сведения о таблицах распределенной маршрутизации
Распределенная таблица маршрутизации (DRT) существует в виде сетки взаимодействующих узлов, где каждый узел является экземпляром приложения, использующего API DRT. Узлы, которые публикуют ключи, отвечают за помощь другим узлам в публикации и разрешении ключей. Узлы также могут участвовать в режиме "только разрешение", который не требует, чтобы они помогали одноранговым узлам. Протокол DRT выполняется через транспорт UDP/IPv6.
Узел, который публикует ключ, создает и поддерживает локальную таблицу маршрутизации других узлов в сетке. Эта таблица маршрутизации оптимизирована для того, чтобы узел мог быстро найти определенный ключ в сетке, найдя ключ непосредственно в локальной таблице маршрутизации или запросив другие узлы, публикующие ключи, числово близко к целевому объекту. Это действие повторяется до тех пор, пока не будет найден необходимый ключ или узел не определит, что такой ключ не существует.
Ключи DRT — это 256-разрядные целые числа без знака. Близость между ключами определяется числовым различием между ними. Пространство ключей DRT считается циклическим. Например, первое возможное значение ключа и последнее возможное значение ключа считаются соседями.
В защищенном DRT узлы требуются для проверки подлинности ключей, которые они публикуют. Механизм, с помощью которого узлы должны задавать ключи проверки подлинности с помощью API DRT при инициализации DRT. Это делается путем выбора поставщика безопасности для DRT. Поставщик безопасности — это модуль, который может создавать маркеры, используемые для проверки подлинности ключей, и проверять маркеры, созданные другими узлами. Он должен реализовывать интерфейс поставщика безопасности, определенный в этой документации. Windows 7 DRT поставляется с двумя полностью реализованными поставщиками безопасности, которые можно использовать для создания приложений Windows.
Во время инициализации приложение также должно предоставить DRT с поставщиком начальной загрузки. Поставщик начальной загрузки — это модуль, который может извлекать конечные точки сети узлов, уже присутствующих в сетке DRT, и вызывается DRT при установке нового узла. Как и в случае с модулем поставщика безопасности, поставщик начальной загрузки должен реализовывать четко определенный интерфейс. Windows 7 DRT поставляется с двумя полностью реализованными поставщиками начальной загрузки.
DRT считает непосредственных соседей ключа специальным. Пять ближайших ключей числом меньше и пять ближайших ключей числовое больше, чем опубликованный ключ, образуют то, что называется конечным набором. DRT сообщает об изменениях в конечном наборе ключа через API DRT.
Переходы жизненного цикла и состояния DRT
Приложение может инициализировать локальный экземпляр DRT с помощью функции DrtOpen . Эта функция запускает процесс начальной загрузки, когда API DRT вызывает поставщика начальной загрузки для изучения ключей и конечных точек сети других узлов, уже участвующих в 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 | В локальном узле произошла серьезная ошибка. Например, если на локальном компьютере заканчивается физическая память. Пока узел переходит в это состояние, приложение должно вызвать API DrtClose , устранить проблему и повторно инициализировать DRT с помощью DrtOpen. |