TON DHT 서비스
구현:
- https://github.com/ton-blockchain/ton/tree/master/dht
- https://github.com/ton-blockchain/ton/tree/master/dht-server
개요
카뎀리아와 유사한 분산 해시 테이블(DHT)은 TON 프로젝트의 네트워킹 부분에서 중요한 역할을 하며, 네트워크에서 다른 노드를 찾는 데 사용됩니다.
TON DHT의 키는 간단히 256비트 정수입니다. 대부분의 경우, 키는 TL 직렬화된 객체의 SHA256으로 계산됩니다.
이러한 256비트 키에 할당된 값은 기본적으로 길이가 제한된 임의의 바이트 문자열입니다. 이러한 바이트 문자열의 해석은 해당 키의 사전 이미지에 의해 결정되며, 일반적으로 키를 조회하는 노드와 키를 저장하는 노드 모두에 의해 알려져 있습니다.
가장 간단한 경우 키는 일부 노드의 ADNL 주소를 나타내며 값은 해당 노드의 IP 주소와 포트가 될 수 있습니다.
TON DHT의 키-값 매핑은 DHT 노드에 보관됩니다.
DHT 노드
각 DHT 노드에는 256비트 DHT 주소가 있습니다. ADNL 주소와 달리 DHT 주소는 너무 자주 변경하면 다른 노드가 찾고 있는 키를 찾을 수 없습니다.
키 K
의 값은 K
에 가장 가까운 S
카뎀리아 노드에 저장될 것으로 예상됩니다.
카뎀리아 거리 = 256비트 키 XOR
256비트 DHT 노드 주소(지리적 위치와는 무관함).
'S'는 작은 매개변수(예: S = 7
)로,
DHT의 안정성을 향상시키는 데 필요합니다(키를 하나의 노드, 즉 K
에 가장 가까운 노드에만 보관하면
해당 단일 노드가 오프라인 상태가 되면 해당 키의 값이 손실됩니다).
카뎀리아 라우팅 테이블
DHT에 참여하는 모든 노드는 일반적으로 카뎀리아 라우팅 테이블을 유지합니다.
0에서 255까지 번호가 매겨진 256개의 버킷으로 구성됩니다. 'i번째
버킷에는 노드 주소
a에서
2^i에서
2^(i+1)-1`까지 카뎀리아
거리에 있는 일부 알려진 노드("최고의" 노드 중 고정된 수
및 추가 후보)에 대한 정보가 들어 있습니다.
이 정보에는 DHT 주소, IP 주소 및 UDP 포트와 마지막 핑의 시간 및 지연과 같은 일부 가용성 정보가 포함됩니다.
Kademlia 노드가 어떤 쿼리의 결과 로 다른 Kademlia 노드를 알게 되면 라우팅 테이블의 적절한 버킷에 먼저 을 후보로 배치합니다. 그런 다음 해당 버킷의 "최적" 노드 중 일부가 실패하면(예: 오랫동안 핑 쿼리에 응답하지 않음), 이러한 후보 중 일부 로 대체될 수 있습니다. 이런 식으로 Kademlia 라우팅 테이블은 계속 채워집니다.
키-값 쌍
키-값 쌍은 TON DHT에서 추가 및 업데이트할 수 있습니다.
"업데이트 규칙"은 다를 수 있습니다. 어떤 경우에는 단순히 새 값 소유자/작성자가 서명하는 경우 이전 값을 새 값으로 대체하는 것을 허용합니다(서명은 값의 일부로 유지되어야 하며, 나중에 다른 노드가 이 키의 값을 얻은 후 확인할 수 있도록 해야 합니다). 다른 경우에는 이전 값이 새 값에 어떤 식으로든 영향을 미칩니다. 예를 들어 에는 시퀀스 번호가 포함될 수 있으며 새 시퀀스 번호가 더 큰 경우에만 이전 값을 덮어씁니다(리플레이 공격을 방지하기 위해).
TON DHT는 TON 스토리지의 특정 토렌트를 저장하는 노드의 주소 목록, 오버레이 서브 네트워크에 포함된 노드의 주소 목록, TON 서비스의 ADNL 주소 또는 TON 블록체인의 계정 ADNL 주소 등을 저장하는 데 사용될 뿐만 아니라 다른 용도로도 사용될 수 있습니다.
DHT](/develop/network/dht) 문서 또는 TON 백서의 3.2.장에서 TON DHT에 대한 자세한 내용을 확인할 수 있습니다.