Поделиться через


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

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