Сведения о таблицах распределенной маршрутизации

Распределенная таблица маршрутизации (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.

Использование API таблицы распределенной маршрутизации

Справочник по API таблицы распределенной маршрутизации