다음을 통해 공유


분산 라우팅 테이블 정보

DRT(분산 라우팅 테이블)는 각 노드가 DRT API를 사용하는 애플리케이션의 instance 협력 노드의 메시로 존재합니다. 키를 게시하는 노드는 다른 노드가 키를 게시하고 resolve 데 도움을 줍니다. 노드는 피어를 지원할 필요가 없는 "resolve 전용" 방식으로 참여할 수도 있습니다. DRT 프로토콜은 UDP/IPv6 전송을 통해 실행됩니다.

키를 게시하는 노드는 메시에 있는 다른 노드의 로컬 라우팅 테이블을 빌드하고 유지 관리합니다. 이 라우팅 테이블은 노드가 로컬 라우팅 테이블에서 직접 키를 찾거나 다른 노드에 숫자로 대상에 가까운 키를 게시하도록 요청하여 메시에서 특정 키를 빠르게 찾을 수 있도록 최적화됩니다. 이 작업은 필요한 키를 찾거나 노드가 해당 키가 없음을 결정할 때까지 반복됩니다.

DRT 키는 256비트 부호 없는 정수입니다. 키 간의 근접성은 키 간의 숫자 차이에 의해 정의됩니다. DRT 키스페이스는 순환으로 간주됩니다. 예를 들어 가능한 첫 번째 키 값과 마지막 가능한 키 값은 인접 항목으로 간주됩니다.

보안 DRT에서 노드는 게시하는 키를 인증해야 합니다. DRT가 초기화될 때 노드가 DRT API를 사용하여 키를 인증하는 메커니즘을 설정해야 합니다. 이 작업은 DRT에 대한 보안 공급자를 선택하여 수행됩니다. 보안 공급자는 키를 인증하는 데 사용되는 토큰을 생성하고 다른 노드에서 생성된 토큰을 확인할 수 있는 모듈입니다. 이 설명서에 정의된 보안 공급자 인터페이스를 구현해야 합니다. Windows 7 DRT는 Windows 애플리케이션을 빌드하는 데 사용할 수 있는 완전히 구현된 두 개의 보안 공급자와 함께 제공합니다.

초기화하는 동안 애플리케이션은 DRT에 부트스트랩 공급자를 제공해야 합니다. 부트스트랩 공급자는 DRT 메시에 이미 있는 노드의 네트워크 엔드포인트를 검색할 수 있는 모듈이며 새 노드가 설정되면 DRT에서 호출합니다. 보안 공급자 모듈과 마찬가지로 부트스트랩 공급자는 잘 정의된 인터페이스를 구현해야 합니다. Windows 7 DRT는 완전히 구현된 두 개의 부트스트랩 공급자와 함께 제공됩니다.

DRT는 키의 인접 항목이 특수하다고 간주합니다. 가장 가까운 키 5개는 숫자로 더 작고, 5개의 가장 가까운 키는 리프 집합이라고 하는 게시된 키 형식보다 숫자적으로 큽니다. DRT는 DRT API를 통해 키의 리프 집합에 대한 변경 내용을 보고합니다.

DRT 수명 주기 및 상태 전환

애플리케이션은 DrtOpen 함수를 사용하여 로컬 DRT instance 초기화할 수 있습니다. 이 함수는 부트스트랩 프로세스를 트리거합니다. 여기서 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를 다시 초기화해야 합니다.

분산 라우팅 테이블 API 사용

분산 라우팅 테이블 API 참조