본문 바로가기
네트워킹

P2P 연결을 위한 피어peer 찾기

by 영바이트 2021. 6. 28.

 

P2P 연결에서 가장 먼저 해야 할 일은 연결 상대를 찾는 것이다. 예를 들어 web RTC(Real Time Communication)등과 같은 P2P 연결을 위한 규약(프로토콜, protocol)들에서 연결을 어떻게 형성한다는 내용은 있지만 연결을 위한 대상들을 어떻게 찾는다는 내용은 다루고 있지 않다.

 

P2P 네트워크를 구성하고 있는 노드node는 서버와 클라이언트 역할을 함께 수행한다. 따라서 P2P에서는 어떤 노드를 일반적으로 피어peer라고 부른다. 그리고 연결 대상인 피어를 찾고 관리하는 방법을 일반적으로 peer discovery라고 표현한다. 많이 사용되는 peer discovery 방법들에는 어떤 것들이 있는지 살펴보자.

 

● Multicast DNS(mDNS)

로컬 네트워크에 있는 피어들에게 찾고자 하는 주제(topic)를 담고 있는 메시지를 무작위 전송(multicast)한다. Multicast 메시지에 담고 있는 주제에 대한 데이터를 가지고 있고 연결이 가능한 피어는 메시지를 전송한 피어에게 자신의 IP와 포트번호 등 접속을 위한 정보를 보낸다. 구현이 비교적 간단하고 접속을 위한 서버가 전혀 필요없는(pure p2p) 연결 방식이지만 피어들을 찾기 위한 전달 거리가 짧고 피어들을 찾기 위한 메시지들이 많아진다는 단점이 있다.
예) Apple의 Bonjour

 

● 수퍼 피어super peer

피어들의 정보를 가지고 있는 수퍼 피어에 질의를 보내 연결을 원하는 피어를 찾는 방법이다. 누구나 수퍼 피어가 될 수 있다는 점에서 기존의 서버-클라이언트 모델과는 차이가 있지만 서버 역할을 하는 노드가 있다는 점에서 서버-클라이언트 구조 안에 속한다고 볼 수 있다.
예) WebTorrent의 Tracker

 

● Distributed Hash Tables(DHTs)

Hash table은 '키(key)-값(value)'의 쌍으로 이루어진 테이블이다. P2P 연결에서는 키(key)로 관심있는 주제(topic), 값(value)으로 해당 주제와 관련한 데이터를 가지고 있는 피어의 IP와 포트 번호로 이루어진 hash table을 사용한다. 그리고 피어들 사이에 이 hash table을 공유하여 분산된 형태(distributed)로 보관한다.
처음 P2P 네트워크에 참여하는 피어는 IP가 알려진 bootstrap 노드에 해시 테이블을 요청할 수 있다. 예를 들면 BitTorrent의 가장 유명한 bootstrap 노드는 UDP 위에서 6881번 포트를 사용한다.
각 피어들은 DHT 전체 또는 그 내용의 일부를 공유함으로써 네트워크에서 피어들을 찾기 위해 많은 데이터를 발생시키지 않아도 된다. 더불어 연결을 위해 자신이 가진 해시 테이블을 사용할 수 있으므로 경우에 따라서는 피어를 찾기 위한 시간을 거의 없앨 수도 있다. 하지만 DHT 방식에서는 DHT를 생성하고 관리하기 위한 구현이 필요하고 bootstrap 노드가 노출되면 보안에 취약할 수 있는 단점이 존재한다.
예) BitTorrent DHT, WebTorrent DHT, Open DHT
 
일반적으로 P2P 네트워크에서는 피어를 찾고 관리하기 위해 다양한 방법을 동시에 사용한다.

 

참고: https://jsantell.com/p2p-peer-discovery/

 

P2P Peer Discovery

Jordan Santell, focusing on open web engineering, immersive web, WebXR, WebGL, JavaScript, open source, open standards, and all things weird web.

jsantell.com

 

'네트워킹' 카테고리의 다른 글

크롬 브라우저에서 티스토리 접속 오류  (0) 2021.09.13
CIDR - Classless Inter-Domain Routing  (0) 2021.03.14

댓글