BTC
ETH
HTX
SOL
BNB
시장 동향 보기
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

P2P 네트워킹: Kademlia에서 Discv5까지

以太坊爱好者
特邀专栏作者
이 기사는 약 3633자로, 전체를 읽는 데 약 6분이 소요됩니다
Ethereum에서 사용하는 피어 투 피어 네트워킹 프로토콜의 진화.
AI 요약
Ethereum에서 사용하는 피어 투 피어 네트워킹 프로토콜의 진화.

편집자 주: 이 기사의 출처는이더리움 애호가(ID: ethfans)편집자 주: 이 기사의 출처는

이더리움 애호가(ID: ethfans)

, 저자: 학장, 번역 및 교정: Pei Qi & A Jian, Odaily의 승인을 받아 재인쇄됨.

Ethereum 또는 관련 기술에 대해 작업해 왔다면 discv4 또는 discv5에 대해 들어봤을 것입니다. 그러나 이것들은 정확히 무엇입니까? 그들은 어떻게 작동합니까? 그들의 우수성은 어디에 있습니까? 이러한 질문에 답하려면 처음부터 시작해야 합니다. 이 블로그 게시물은 독자가 해당 분야에 비교적 익숙하지 않다고 가정하므로 기술적 배경이 없는 사람도 읽을 수 있습니다.

보조 제목

이야기의 시작: P2P(peer-to-peer) 네트워크에서 노드의 상호 발견과 네트워크 형성 프로세스는 몇 가지 문제에 직면하게 됩니다.

Napster와 같은 초기 P2P 파일 공유 기술은 단일 서버를 사용하여 누가 어떤 파일을 소유했는지 기록하는 정보를 공유했습니다. 노드는 중앙 서버에 대한 연결을 시작하고 소유한 파일 목록을 제출합니다. 그런 다음 다른 노드가 동일한 중앙 서버에 대한 연결을 시작하고 필요한 파일의 스토리지 노드를 찾은 다음 찾은 노드와 연결을 설정합니다. 그러나 이것은 결함이 있는 시스템입니다. 이 시스템은 공격에 취약하고 중앙 집중식 서버 노드는 소송의 대상이 될 수 있습니다. (번역자 주: 파일 콘텐츠와 노드 간의 해당 관계는 단일 서버에 저장됩니다. 저작권 콘텐츠에 대한 일부 링크가 제공되는 경우 이 중앙 집중식 서버의 제공자는 원래 저작권 소유자가 직접 책임을 집니다.)

따라서 피어 투 피어 네트워크를 위한 또 다른 솔루션이 절실히 필요합니다. 수년간의 연구와 실험 끝에 연구원들은 분산 해시 테이블(DHT)을 제안했습니다.

보조 제목

분산 해시 테이블

DHT는 위에서 언급한 바 있습니다. 그렇다면 DHT는 정확히 무엇입니까?

Kademlia

분산 해시 테이블(DHT)은 분산 키-값 목록입니다. DHT에 참여하는 노드는 특정 키에 해당하는 값을 쉽게 검색할 수 있습니다.

네트워크에 9개의 키-값 쌍과 3개의 노드가 있다고 가정합니다.이상적으로 각 노드는 3개의 키-값 쌍만 저장하면 됩니다(가장 좋은 방법은 중복성을 제공하기 위해 6개의 키-값 쌍을 저장하는 것입니다). 키-값 쌍을 업데이트해야 하며 일부 네트워크 노드만 업데이트하면 됩니다. 일반적인 아이디어는 네트워크의 모든 노드가 노드 간에 정보가 배포되는 방식에 따라 필요한 특정 키-값 쌍을 찾을 위치를 알 수 있다는 것입니다.

보조 제목

XOR 10011001    00110010    --------    10101011

이제 DHT가 무엇인지 알았으니 discv4의 전신인 Kademlia를 살펴보겠습니다. Kademlia는 2002년 Petar Maymounkov와 David Mazières가 발명한 DHT 프로토콜입니다. 이 프로토콜이 가장 대중적이고 널리 사용되는 DHT 프로토콜이 아닐까 생각합니다. 작동 방식은 간단합니다. 알아 보겠습니다.

Kademlia에서 노드와 값은 거리에 따라 배열됩니다(배열은 엄격하게 수학적으로 정의됨). 여기서 거리는 지리적 거리가 아니라 식별자 기반 표현입니다. 일부 거리 함수를 사용하여 두 식별자 사이의 거리를 계산할 수 있습니다.

  • Kademlia는 거리 함수로 XOR(배타적 OR 연산자)을 사용합니다. XOR 함수의 특징은 입력이 다를 때만 출력이 참이라는 것입니다. 다음은 바이너리 식별자로 표현한 예입니다.

  • 위의 예는 십진수 153과 50 사이의 거리는 171이라고 말합니다.

  • XOR을 거리 함수로 사용하는 데는 다음과 같은 여러 가지 이유가 있습니다.

ID는 자신과의 거리가 0입니다.

거리는 대칭이며 A에서 B까지의 거리는 B에서 A까지의 거리와 같습니다.

삼각형 부등식에 따라 A, B, C가 삼각형의 세 점인 경우 A에서 B까지의 거리는 A에서 C까지의 거리에 B에서 C까지의 거리를 더한 값보다 작거나 같습니다.

요약하면, 노드는 거리 함수에 따라 어떤 노드가 자신에게 더 가까운지 결정할 수 있고 이 "거리"를 기반으로 결정을 내릴 수 있습니다.

Kademlia 노드는 라우팅 테이블을 저장합니다. 라우팅 테이블에는 여러 목록이 포함되어 있습니다. 각 후속 목록에 기록된 노드는 이전 목록의 노드보다 조금 더 멀리 떨어져 있습니다. 각 노드는 가장 가까운 노드에 대한 정보를 유지하며 다른 노드가 멀리 있을수록 로컬 노드가 유지하는 관련 정보가 적습니다.

  • 특정 노드를 찾고 싶다고 가정합니다. 내가 해야 할 일은 내 대상 노드에 더 가까운 레코드의 이웃을 반환하는 알려진 노드에 요청을 보내는 것입니다. 이웃 그룹이 대상 노드를 찾는 데 도움이 될 때까지 이 프로세스를 반복합니다.

  • 동일한 프로세스가 값에 적용됩니다. 값과 노드 사이의 거리는 결정적입니다. 값과 노드의 식별자 ID가 동일한 방식으로 구성되어 있으므로 이 거리를 계산할 수 있습니다. 값을 조회하려면 값을 저장하는 노드를 찾을 때까지 값의 키에 가장 가까운 이웃 노드를 찾습니다.

  • Kademlia 노드가 이러한 기능을 지원하기 위해 프로토콜은 다음 메시지를 통해 통신합니다.

  • PING - 노드가 여전히 실행 중인지 확인하는 데 사용됩니다.

FINDNODE - 주어진 ID에 요청된 가장 가까운 노드를 반환합니다.

Discv4

FINDVALUE - 노드가 특정 값을 저장하는 경우 값을 직접 반환한다는 점을 제외하면 FINDNODE와 동일합니다.

이것은 다양한 중요한 세부 사항을 건너뛰고 Kademlia에 대한 매우 단순화된 설명입니다. 보다 포괄적인 이해를 위해 원본 용지 또는 더 깊은 설계 사양을 강력히 권장합니다.

보조 제목

배경을 위한 길을 닦은 후 마침내 이더리움의 현재 노드 검색 프로토콜인 discv4(discovery v4를 의미)에 도달했습니다. Discv4 프로토콜 자체는 Kademlia를 기반으로 하지만 일부 변경 사항이 있습니다. 예를 들어 DHT의 값 부분은 더 이상 discv4에서 사용되지 않습니다.

Kademlia는 주로 네트워크 구성에 사용되므로 라우팅 테이블을 사용하여 다른 노드를 찾을 수 있습니다. 하지만 diskv4는 DHT에서 값 부분을 전혀 사용하지 않으므로 Kademlia에서 사용되는 FINDVALUE 및 STORE 명령을 버릴 수 있습니다.

이전에 Kademlia의 쿼리 방법은 노드가 피어를 얻는 방법을 설명했습니다. 노드는 노드를 자신에게 더 가까이 가져오기 위해 다른 노드에 대한 요청을 시작합니다. 새 노드를 찾을 수 없을 때까지 이 요청 프로세스를 반복합니다.

또한 discv4는 상호 터미널 인증을 추가합니다. 이는 FINDNODE 요청을 시작한 노드가 동일한 노드 검색 프로토콜에 참여하고 있는지 확인하기 위한 것입니다.

마지막으로 모든 discv4 노드는 최신 ENR 레코드를 유지해야 합니다. 레코드에는 노드에 대한 정보가 포함됩니다. 모든 노드는 ENR 요청이라는 discv4 특정 패키지를 사용하여 ENR 레코드를 요청할 수 있습니다.

ENR에 대한 자세한 내용을 알고 싶다면 내 다른 블로그 게시물인 이더리움의 네트워크 주소로 이동하십시오.

그러나 discv4에는 몇 가지 문제도 있습니다. 그 중 몇 가지를 살펴보겠습니다.

둘째, 재생 공격을 방어하기 위해 discv4는 타임스탬프를 사용합니다. 이것은 호스트의 시계가 잘못되었을 때 모든 종류의 문제를 일으킬 수 있습니다. 자세한 내용은 discv4 사양의 "알려진 문제" 섹션을 참조하십시오.

Discv5

마지막으로 단말의 상호 인증에도 문제가 있다. 패킷 손실 가능성 때문에 두 피어가 서로를 인증했는지 여부를 알 수 있는 방법이 없습니다. 즉, 우리는 우리가 인증되었다고 생각할 수 있지만 우리가 통신하고 있는 피어는 그렇지 않으며 결과적으로 우리의 FINDNODE 패킷을 드롭할 수 있습니다.

마지막으로 단말의 상호 인증에도 문제가 있다. 패킷 손실 가능성 때문에 두 피어가 서로를 인증했는지 여부를 알 수 있는 방법이 없습니다. 즉, 우리는 우리가 인증되었다고 생각할 수 있지만 우리가 통신하고 있는 피어는 그렇지 않으며 결과적으로 우리의 FINDNODE 패킷을 드롭할 수 있습니다.

보조 제목

마지막으로 discv5를 살펴보겠습니다. Discv5는 discv4의 반복 버전이며 Eth 2.0의 노드 검색 프로토콜 역할을 합니다. Discv5는 discv4에 존재했던 많은 문제를 해결하는 것을 목표로 합니다.

첫 번째 변경 사항은 FINDNODE가 작동하는 방식입니다. 전통적인 Kademlia와 discv5는 모두 식별자를 사용합니다. discv5에서는 대수 거리를 사용합니다. 즉, FINDNODE 요청을 보낸 후 응답에 포함된 노드는 모두 발신자 노드로부터 특정 대수 거리 내에 있습니다.

로그 거리의 의미: 먼저 거리를 계산한 다음 밑이 2인 로그 함수, 즉 log2(A xor B)를 사용합니다.

두 번째로 매우 중요한 변경 사항은 discv5가 discv4의 가장 큰 문제인 보조 프로토콜의 구분을 해결하는 데 전념했다는 것입니다. Discv5는 주제 테이블을 추가합니다. 주제 테이블은 특정 서비스를 제공하는 노드의 선입선출 목록입니다. 노드는 피어에 광고를 등록하여 이 목록에 자신을 추가합니다.

이 글을 쓰는 시점에서 이 하위 프로토콜 차별화 체계의 쓰기 작업에는 여전히 몇 가지 문제가 있습니다. 현재 노드가 여러 피어에 알릴 수 있는 효율적인 방법이 없기 때문에 각 피어에 별도의 요청을 보내야 하므로 대규모 네트워크에는 비효율적입니다.

또한 노드가 광고하는 피어의 수와 노드가 광고하는 피어의 수는 불분명합니다. 자세한 내용은 devp2p#136을 참조하십시오.

Discv5에는 다른 많은 작은 변경 사항이 있지만 이러한 변경 사항은 그다지 중요하지 않으므로 이 요약에서는 생략합니다.

ETH
Odaily 공식 커뮤니티에 가입하세요