본문으로 건너뛰기

TON DHT 서비스

구현:

개요

Kademlia 기반의 분산 해시 테이블(DHT)은 TON 프로젝트의 네트워킹 부분에서 중요한 역할을 하며 네트워크의 다른 노드들을 찾는 데 사용됩니다.

TON DHT의 키는 단순히 256비트 정수입니다. 대부분의 경우 TL-직렬화된 객체의 SHA256으로 계산됩니다.

이 256비트 키에 할당된 값은 본질적으로 제한된 길이의 임의 바이트 문자열입니다. 이러한 바이트 문자열의 해석은 해당 키의 원상(preimage)에 의해 결정됩니다. 일반적으로 키를 조회하는 노드와 키를 저장하는 노드 모두 이를 알고 있습니다.

가장 단순한 경우, 키는 특정 노드의 ADNL 주소를 나타내고 값은 해당 노드의 IP 주소와 포트가 될 수 있습니다.

TON DHT의 키-값 매핑은 DHT 노드에 유지됩니다.

DHT 노드

각 DHT 노드는 256비트 DHT 주소를 가집니다. ADNL 주소와 달리 DHT 주소는 너무 자주 변경되어서는 안 됩니다. 그렇지 않으면 다른 노드들이 찾고자 하는 키를 찾을 수 없게 됩니다.

K의 값은 K에 Kademlia 거리로 가장 가까운 S개의 노드에 저장될 것으로 예상됩니다.

Kademlia 거리 = 256비트 키 XOR 256비트 DHT 노드 주소 (지리적 위치와는 관련이 없음).

S는 작은 매개변수(예: S = 7)로, DHT의 신뢰성을 향상시키기 위해 필요합니다 (K에 가장 가까운 하나의 노드에만 키를 저장한다면, 그 단일 노드가 오프라인이 되면 해당 키의 값이 손실될 것입니다).

Kademlia 라우팅 테이블

DHT에 참여하는 모든 노드는 일반적으로 Kademlia 라우팅 테이블을 유지합니다.

이는 0부터 255까지 번호가 매겨진 256개의 버킷으로 구성됩니다. i번째 버킷은 노드의 주소 a로부터 Kademlia 거리가 2^i에서 2^(i+1) − 1 사이인 알려진 노드들에 대한 정보(고정된 수의 "최상" 노드들과 추가 후보들)를 포함합니다.

이 정보에는 DHT 주소, IP 주소, UDP 포트 및 마지막 핑의 시간과 지연과 같은 가용성 정보가 포함됩니다.

Kademlia 노드가 쿼리의 결과로 다른 Kademlia 노드에 대해 알게 되면, 먼저 후보로서 라우팅 테이블의 적절한 버킷에 배치합니다. 그런 다음 해당 버킷의 "최상" 노드 중 일부가 실패하면(예: 오랫동안 핑 쿼리에 응답하지 않음) 이러한 후보들 중 일부로 대체될 수 있습니다. 이러한 방식으로 Kademlia 라우팅 테이블이 계속 채워집니다.

키-값 쌍

TON DHT에서 키-값 쌍을 추가하고 업데이트할 수 있습니다.

"업데이트 규칙"은 다를 수 있습니다. 일부 경우에는 소유자/생성자가 새 값에 서명한 경우에만 이전 값을 새 값으로 대체할 수 있습니다(서명은 다른 노드들이 이 키의 값을 얻은 후 나중에 확인할 수 있도록 값의 일부로 유지되어야 합니다). 다른 경우에는 이전 값이 어떤 식으로든 새 값에 영향을 미칩니다. 예를 들어 시퀀스 번호를 포함할 수 있고 새 시퀀스 번호가 더 큰 경우에만 이전 값을 덮어쓰게 됩니다(재생 공격을 방지하기 위함).

TON DHT는 ADNL 노드의 IP 주소를 저장하는 데만 사용되는 것이 아니라 다른 목적으로도 사용됩니다 - TON Storage의 특정 토렌트를 저장하는 노드들의 주소 목록, 오버레이 서브네트워크에 포함된 노드들의 주소 목록, TON 서비스의 ADNL 주소 또는 TON 블록체인 계정의 ADNL 주소 등을 저장할 수 있습니다.

정보

TON DHT에 대해 더 자세히 알아보려면 DHT 문서나 TON 백서의 3.2장을 참고하세요.