저는 DHT 구현과 이론을 공부하기 시작했습니다. 그리고 노드 시작시 노드 ID를 생성하고 네트워크에 연결할 때 부분적으로 고정됩니다. 그 ID는 일부 해시 범위에서 무작위 해시이지만 고유 해시입니까? 그리고 해시는이 노드가 저장하는 데이터를 닫지 않습니다. 이걸 도와 줘.DHT 노드 ID 생성?
1
A
답변
1
DHT/P2P 시스템에서 큰 값 공간에 대해 좋은 해시 함수를 사용하여 노드 ID를 자체 생성하는 것이 일반적인 기술입니다. 해시가 좋은 랜덤 분포를 보장하기 때문에 충돌 확률은 매우 적습니다. 통계적으로 ID는 (거의 항상) 고유 할 것입니다.
해시는 노드에 저장된 데이터와 독립적입니다.
0
import random
import hashlib
def newID():
s = ""
for i in range(20):
s += chr(random.randint(0, 255))
m = hashlib.sha1()
m.update(s)
return m.digest()
0
로서 이전 답변에 상기 노드의 ID는이 IP 어드레스의 해시에 의해 생성되거나 다른 고유 식별 정보 (일반적으로 말해서, 이러한 Chord 등 DHT의 경우이다).
노드가 n- 네트워크에 가입하거나 탈퇴 할 때 Consistent Hashing을 사용하기 때문에 1/n
키만 다시 매핑해야하므로 피어 투 피어와 같은 매우 동적 인 네트워크 토폴로지에 적합합니다.
기술적으로 생성 된 해시는이 노드에 저장된 데이터에 대한 정보를 전달하지 않습니다. 오히려 특정 키의 해시 (또는 이러한 목적으로 사용되는 경우 데이터 저장소의 항목)는 키워드 (또는 파일 이름 또는 파일 내용)의 해시에서 비롯됩니다.
일관된 해싱의 직접적인 결과로 키 사이의 거리에 대한 추상적 개념이 나타납니다. (설명한대로 here) 노드는 식별 키 (ID)가 거리 메트릭에 따라 가장 가까운 모든 키를 소유합니다.
(거의 항상 ID 공간이 2^160이고 대략 10^47 (엄청납니다!)) – gsk