Kademlia 프로토콜

in #kademlia5 years ago

카뎀리아는 분산된 p2p환경에서 어떻게 연결할 노드들을 찾는지(디스커버리)에 대한 분산해시테이블(DHT)이다.

일반적으로 p2p환경에서의 노드연결은 연결된 노드에 정보를 DHT(분산해시테이블)에 저장하고 관리하며, 해당 저장된 접속정보들로 노드간의 연결을 시도하게 된다.

카뎀리아에서는 이 DHT에 저장하는 노드의 접속정보의 저장할때, 사용하는 노드ID 키를 가지고 다른 노드와의 거리를 계산(XOR연산이용)할수있게 도와준다.

즉, 비트형식인 노드ID(공개키등을 이용한 160bit 숫자)를 특정 비트범위대로 그룹지은 트리노드로 분리,추가해줌으로써, 자신과 가까운 거리의 노드의 정보를 그루핑한다.

이렇게 되면, 서울에 있는 친구가 부산에 있는 친구에게 물어볼필요없이, 자신과 가까운 거리에 있는 노드ID를 구하고 해당 ID의 정보를 이용해, 인천에 있는 친구에게 물어보게 할수있다. 결과적으로, 좀더 빠르고 정보의 공유를 이룰수있고, 거리가 가까운 노드들간의 p2p접속이 활발히 이루어져, 하나의 작은 그룹모양의 작은 네트웤이 빠르게 구성이 되고, 더 견고해진다.

이런 작은 견고한 네트웤들의 집합들이 생겨나고, 해당 네트웤을 다시 글로벌하게 연결시켜주면, 랜덤하게 무작위로 연결이 되는 p2p 연결노드들보다, 더 안전한 p2p네트웤 환경이 탄생한다.

  • 주의 : 여기서 노드간의 거리란 물리적인 위치의 거리가 아니다. (노드ID간의 논리적인 거리를 말함)

여기서 함정이 하나있다. 노드간의 거리가 물리적인 위치의 거리가 아니라 단순히 노드ID의 XOR한 값이 같은 범위에 속한다는것을 의미한다. 예제에서는 서울,부산,인청등의 지역을 예로들오 헷갈릴수있겠지만, 결국은 노드간의 거리를 알수있다는것은 p2p분산환경에서 램덤하게 접속하는것이 아닌, 특정 노드에 접속할수있는 기회를 얻을수있다는것으로 해석이 되기때문에, p2p노드들의 안정적인 접속(?) 기회를 받을수가 있게 된다는 뜻으로 이해해야한다.

그룹에 그룹노드들이 p2p환경의 램덤환경에서 적절히 공평하게 접속될 기회를 갖게 하는것이다. 이것을 위한 어떤 룰이라는것이 노드ID의 거리를 이용하는것으로 이다.

example

이더리움같은경우는, 이 카뎀리아 프로토콜을 적절히 수정해서 사용하고 있다.

Coin Marketplace

STEEM 0.30
TRX 0.11
JST 0.030
BTC 67918.33
ETH 3740.37
USDT 1.00
SBD 3.69