개요
P2P(peer-to-peer network) 혹은 동등 계층간 통신망(同等階層間通信網)은 비교적 소수의 서버에 집중하기보다는 망구성에 참여하는 기계들의 계산과 대역폭 성능에 의존하여 구성되는 통신망이다. P2P 통신망은 일반적으로 노드들을 서로 연결하는 경우 이용된다. 오디오나 비디오, 데이터 등 임의의 디지털 형식 파일의 공유는 매우 보편적이다. 또한, 인터넷 전화(VoIP)같은 실시간 데이터 등도 P2P 기술을 통해 서로 전달될 수 있다.
자기 확장성
P2P는 자기 확장성을 가진다. 이 말은 망에 존재하는 한 파일이 퍼져서 전체 시스템의 안정성과 속도를 올리게 된다는 것이다.
서버의 유무
순수 P2P 파일 전송 네트워크는 클라이언트나 서버란 개념 없이, 오로지 동등한 계층 노드들(peer nodes)이 서로 클라이언트와 서버 역할을 동시에 네트워크 위에서 하게 된다. 이 네트워크 구성 모델은 보통 중앙 서버를 통하는 통신 형태의 클라이언트-서버 모델과는 구별된다. 그러나 대부분 전체 흐름을 관장하는 서버가 있어서 (토렌트의 경우에는 트랙커) 교통정리를 하게 된다.
리소스 기반의 어드레싱
P2P는 인터넷에 연결되어 있는 여러가지 형태의 리소스 (저장 공간, 씨피유 파워, 콘텐츠, 그리고 연결된 컴퓨터를 쓰고 있는 사람 그 자체)를 이용하는 일종의 응용 프로그램이다. 그런데 이들은 고정된 ip 주소도 없고, 연결이 되었다 안 되었다 하는 '불안정한' 형태로 존재하는 분산된 리소스이다. 따라서 P2P 노드는 종래의 DNS '바깥에서' 운용될 수밖에 없으며 강력한 중앙의 서버들의 영향력이 미치지 않는다. P2P 디자이너들은 그런 특징을 활용해서 CPU 싸이클들을 모을 수 있는 방법, 파일을 공유할 수 있는 방법, 채팅하는 방법 등을 만들어 낸다.
DNS를 우회하는 P2P
1996년 나온 ICQ는 항상 인터넷에 연결되어 있는 서버와는 다른, 접속하다 끊을 수도 있는 개인용 컴퓨터들끼리 서로 접속할 수 있는 길을 처음으로 터 주었다. 모든 것이 점차 휴대화되어 가는 추세를 맞아, ICQ는 DNS를 우회해서 저만의 독자적인 프로토콜 주소 디렉터리(protocol-specific address directory)를 창조했다. 이를 통해 IP 주소는 실시간으로 업데이트 될 수 있었다. Groove, Napster, Netmeeting 등이 ICQ를 따라 이런 방법을 사용한다. (물론 모든 P2P 시스템이 이 트릭을 쓰는 것은 아니다. 그누텔라 (Gnutella) 나 Freenet의 경우, DNS를 우회하는 것은 이전 방식과 똑같지만 숫자로 표시되는 IP 주소를 활용한다는 점에서 다르다. Popular Power와 SETI@Home은 각 노드가 고정된 주소에 접속할 수 있는 스케줄을 제공해서, 접속 당시의 IP 주소를 전달하는 방식을 택하고 있다. Whois에 따르면 IP 주소가 처음 뿌리를 내린 1984년 이후 16년 동안 2천3백만 개의 도메인 이름이 만들어졌다. 하지만 냅스터는 혼자서 16개월 만에 2천 3백만 개의 비 DNS 주소를 만들어냈다. 그리고 만약 사용자가 모든 비 DNS 인스턴트 메시징 주소에 가입한다고 하면 동적인 IP 주소에 접근할 수 있는 P2P 주소의 개수는 모두 2억 개를 넘어선다. 평균 DNS 호스트가 10개의 second.first.com 같은 형태의 2차 주소를 갖고 있다고 가정해 보아도, 현재의 P2P 주소의 모든 개수는 불과 4년 뒤엔 DNS 주소의 모든 개수와 같아지게 될 것이며, 오늘날의 DNS 세계보다 훨씬 더 광대한 세계로 성장해 가게 된다는 셈이 된다. 무선 PDA 같은 새로운 종류의 인터넷 접속 장치나 TiVo, Replay 같은 디지털 비디오 레코더가 보급됨에 따라 이들 역시 인터넷의 중요한 일부가 될 것이 확실하다. 하지만 현재로는 피씨 그 자체야말로 개척되지 않은 리소스의 절대 다수를 갖고 있다. 피씨는 인터넷의 다크호스이다. 그리고 그 피씨가 갖고 있는 '덜' 사용된 리소스는 P2P 혁명을 더욱 가속화할 것이다.
이용 애플리케이션
비트 토렌트
파일의 분재에 참여하는 모든 피어들의 모임을 토렌트라고 부른다. 토렌트에 참여하는 피어들은 서로에게서 같은 크기의 청크를 다운로드 한다. 일반적으로 청크의 길이는 256킬로바이트이다. 각 토렌트는 트랙커라고 부르는 기반구조 노드를 갖고 있다. 한 피어가 토렌트에 가입할때 트랙커에 자신을 등록하고 주기적으로 자신이 아직 토렌트에 있음을 알린다.
- 새로운 피어가 접속하면 트랙커는 피어 집합의 부분집합의 목록에 새로운 피어를 참여시키고 목록을 반환한다.
- 새로운 피어는 목록에 있는 피어들에게 TCP연결을 시도한다.
- 이웃피어로부터 소유하고 있는 청크 리스트를 요구한다.
- 가장 드문 것 먼저 즉 청크중 가장 드문 청크를 결정하고 그 청크를 받고자 노력한다.
- 피어는 자신에게 가장 빠른 속도로 데이터를 제공하는 이웃 피어에게 우선순위를 부과한다. 이를 통해 최적의 이웃 피어 4개를 선발한다.
- 매 10초마다 속도를 재계산하고 4개의 피어 집합을 수정한다. 또한 30초마다 임의로 피어를 추가로 선택하여 그것에게 청크르 보낸다.
- 결국 피어들은 양립할 수 있는 속도로 업로드할 능력을 가진 피어들이 서로를 찾게 된다.
이 상으로 피어들은 서로의 최적의 이웃을 찾아서 청크를 교환하게 된다. 제일 드문 청크를 먼저 교환하기에 청크 집합의 밀도는 서로 비슷해지며, 자기 확장성을 통해서 토렌트를 통한 파일 공유라는 목적을 달성할 수 있게 된다.
DHT (Distributed Hash Table)
분산 해시 테이블(distributed hash tables, 줄여서 DHT 또는 DHTs)은 이름대로 해시 테이블을 분산하여 관리하는 기술이다. 어떤 항목을 찾아갈 때 해시 테이블을 이용하는데, 중앙 시스템이 아닌 각 노드들이 이름을 값으로 맵핑하는 기능을 하는 방식이다. 부하가 집중되지 않고 분산된다는 큰 장점이 있어, 극단적으로 큰 규모의 노드들도 관리할 수 있다. DHT는 순수 P2P라도 네트워크의 부하를 억제할 수 있으며 네트워크 상의 콘텐츠를 빠르고 정확히 검색할 수 있는 것이 가능하다. 종래의 순수 P2P에서 채용되었던 방식에서는 수십만 노드 정도가 한계였으나, DHT의 사용으로 수십억개의 노드를 검색범위로 할 수 있게 되었다. 그러나 DHT는 실제 구현이 어렵다. 특히 완전한 일치검색만이 가능하여, 와일드 카드 등을 활용한 복잡한 검색을 하지 못하는 단점이 있다. DHT를 활용한 대표적인 시스템으로 비트토렌트(DHT를 확장하여 사용), eDonkey 등이 있다.
즉 순수 P2P가 에드혹방식으로 접속할시 생기는 문제점을 해결하기 위해서 해시테이블을 공유하며 그를 통해 피어를 찾는 기법이다.
가상 화폐와의 유사성
코인판은 제각각해서 망했다. P2P도 나르호도.