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