피어 교환

**피어 교환**, **피어 익스체인지**(peer exchange) 또는 **PEX**는 비트토렌트 파일 공유 프로토콜을 확장하는 통신 프로토콜이다. 이 프로토콜을 통해 특정 파일을 공유하기 위해 협력하는 사용자 그룹(또는 피어)이 더 신속하고 효율적으로 파일을 공유할 수 있다. 비트토렌트 파일 공유 프로토콜의 초기 설계에서, 파일 공유 그룹(스와름이라고 함)의 피어(사용자)는 서로를 찾고 스와름을 유지하기 위해 트래커라고 불리는 중앙 서버에 의존했다. PEX는 각 피어가 현재 스와름에 있는 피어에 대해 스와름의 다른 피어에게 직접 업데이트할 수 있도록 하여 피어의 트래커 의존도를 크게 줄인다. 중앙 집중식 트래커에 대한 의존도를 줄임으로써 PEX는 비트토렌트 프로토콜의 속도, 효율성 및 견고성을 향상시킨다.
# 설명
파일의 복사본을 얻고자 하는 사용자는 일반적으로 공유할 파일과 .torrent 파일에 설명된 파일(들)을 현재 공유하는 피어 목록을 유지하는 하나 이상의 중앙 컴퓨터인 트래커의 URL을 설명하는 토렌트 파일을 먼저 다운로드한다. 초기 비트토렌트 설계에서 피어는 서로를 찾고 스와름을 유지하기 위해 이 중앙 트래커에 의존했다. 나중에 분산 해시 테이블(DHT)이 개발되면서 피어의 부분 목록이 스와름의 다른 컴퓨터에 저장될 수 있었고 중앙 트래커 컴퓨터의 부하가 줄어들었다. PEX는 스와름의 피어가 트래커 컴퓨터나 DHT에 폴링하지 않고도 스와름에 대한 정보를 직접 교환할 수 있도록 한다. 그렇게 함으로써 PEX는 사용자가 연결된 피어에게 연결된 피어의 주소를 요청하여 피어의 지식을 활용한다. 이는 하나의 트래커에만 의존하는 것보다 빠르고 효율적이며 트래커의 처리 부하를 줄인다. 또한 트래커가 다운되었을 때 스와름이 함께 유지되도록 한다.url-status=dead 피어 교환은 새로운 피어를 스와름에 도입하는 데 단독으로 사용될 수 없다. 스와름과 초기 접촉을 하려면 각 피어는 ".torrent" 파일을 사용하여 트래커에 연결하거나, 부트스트랩 노드라고 하는 라우터 컴퓨터를 사용하여 스와름의 피어 목록을 설명하는 분산 해시 테이블(DHT)을 찾아야 한다. 대부분의 비트토렌트 사용자에게 DHT와 PEX는 사용자가 비트토렌트 클라이언트를 시작하고 .torrent 파일을 열면 자동으로 작동하기 시작한다. 주목할 만한 예외는 자유롭게 사용할 수 없는 "프라이빗 토렌트"이며, 이들은 일반적으로 DHT를 비활성화한다.
## 피어 교환 규칙
PEX와 같은 비트토렌트 확장은 일반적으로 두 가지 일반적인 확장 프로토콜 중 하나인 AZMPaccess-date=2019-11-20 또는 LTEPaccess-date=2019-11-20를 사용하여 구현된다. 두 가지 유형의 피어 교환 모두 스와름에 추가될 피어 그룹과 제거될 피어 그룹을 포함하는 메시지를 보낸다. Azureus와 뮤토렌트 개발자들은 위에 언급된 메커니즘 중 하나를 구현하는 모든 클라이언트가 PEX 메시지를 보낼 때 다음 제한을 준수하도록 노력하기로 합의했다. * 어떤 PEX 메시지에도 추가된 피어는 50개, 제거된 피어는 50개를 초과해서는 안 된다. * 피어 교환 메시지는 1분에 한 번 이상 보내면 안 된다. 일부 클라이언트는 이러한 제한을 적용하고 이를 무시하는 클라이언트로부터의 연결을 끊을 수 있다.access-date=2019-11-20
## DHT
균일하게 분산된 피어 선택을 제공하는 PEX 프로토콜을 생성하기 위해 토렌트에 로컬인 작은 분산 해시 테이블(DHT)을 형성할 수 있다. 원하는 새 피어마다 (균일하게) 무작위 키를 찾아 해당 키를 담당하는 노드를 새 피어로 사용할 수 있다. 이는 개념적으로 간단하지만 상당한 오버헤드를 필요로 한다. "트래커 없는" 토렌트의 경우, 메인라인 DHT가 필요에 따라 로드를 분산할 수 있으므로 PEX가 어떤 가치를 제공하는지는 명확하지 않다. 트래커 역할을 하는 각 DHT 노드는 피어의 하위 집합만 저장할 수 있지만, 이는 단일 피어의 관점보다는 DHT 노드 로드에 의해서만 제한되는 최대 하위 집합이다. 프라이빗 토렌트는 일반적으로 DHT를 비활성화하며, 이 경우 PEX는 피어가 트래커로부터 충분한 피어를 얻는다면 유용할 수 있다.
# 버전
세 가지 호환되지 않는 PEX 구현이 있다(스와름에서 별개의 "네트워크"를 만든다). * Vuze – Azureus에서 도입됨 * 비트코멧 – 독점 – 비트코멧에서 도입됨, 버전 1.19부터 BEP11을 지원하며,language=en 메인라인과 호환된다.url=https://bitcomet.com/en/changelog * 메인라인 – μTorrent에서 도입됨
# 피어 교환을 지원하는 클라이언트
대부분의 비트토렌트 클라이언트는 트래커와 DHT 외에 PEX를 사용하여 피어를 수집한다. Vuze 3.0.5.0 릴리스부터 모든 주요 비트토렌트 클라이언트가 이제 호환되는 피어 교환을 지원한다. 다음 각 클라이언트는 피어 교환의 일부 버전을 구현한다. *aria2, 뮤토렌트 PEX 지원archive-date=2015-04-02 *Vuze, 이전 이름은 Azureus이며, 이를 기반으로 한 클라이언트 (Vuze PEX는 트랜스미션 클라이언트와만 호환된다. 다른 클라이언트와의 PEX는 Vuze와 Azureus 3.0.4.3 버전부터 구현되었다)url-status=dead *비트코멧은 이전 버전에서 독점 프로토콜을 사용하여 PEX를 지원한다.access-date=2010-02-23 v.1.19부터 확장 프로토콜을 기반으로 한 μTorrent/메인라인 PEX 구현도 지원한다.access-date=2010-02-23 *Bitfluaccess-date=2007-03-30 *비트토렌트BitTorrent User Manual - Appendix A: The BitTorrent Interface - Miscellaneous - Torrent Properties - General - Other Settings - Peer Exchange date=2014-07-06 *K토렌트는 2.1 RC1부터 완전한 μTorrent PEX 지원을 구현했다.access-date=2007-03-30 *libtorrent 및 이를 기반으로 한 클라이언트 (Deluge,archive-date=2008-12-25 qBittorrent,access-date=2007-05-14 MooPoliceaccess-date=2007-03-30) 뮤토렌트와 호환된다. *Tixati *뮤토렌트archive-date=2006-11-25 *오페라 9.5, 뮤토렌트 PEX 지원access-date=2007-09-04 *qBittorrent, 뮤토렌트 PEX 지원quote=μTorrent-compatible Peer eXchange (PeX) *rTorrenturl-status=dead *트랜스미션 (μTorrent 및 Vuze 구현 모두와 호환)archive-date=2007-08-24 *XTorrent는 트랜스미션 소스 코드를 기반으로 하며, 버전 1.0 (v40)부터 Vuze 및 μTorrent 구현을 모두 완벽하게 지원한다.Xtorrent P2P (for Mac OS X)