[네트워크 메모] Peer To Peer (P2P) 의 용어들에 대해서 알아보자

in #network6 years ago


1)P2P란 (Peer to Peer) 

컴퓨터의 쌍방향 파일 전송 시스템을 가리킵니다. 중앙서버 없이 컴퓨터와 컴퓨터간을 연결해주며 프로그램 엔지만 만들면 되기 때문에 매우 간편하게 파일을 전송할 수 있다. 인터넷이 발달되면서 파일전송속도가 더 빨라집니다.

즉 네트워크를 형상하고 있는 당사자가 동일한 기능을 갖고 어느 당사자도 통신 세션을 시작할 수 있는 분산된 통신 모델입니다. 대규모 병렬 컴퓨팅, 분산 스토리지 및 기타 기능의 익명화 된 라우터를 제공하는데 사용할 수 있습니다. 

결론적으로 P2P파일을 다운로드 하는데 사용 되는 네트워크 프로토콜입니다.

2)피어(PEER) - A(B)

 피어는 네트워크의 다른 사용자이거나 인터넷과 같은 것입니다. 피어는 자신에 컴퓨터에 전체 파일이 없습니다.  

A는 자신에게 붙은 모든 사람들 뜻합니다. 즉 2(18)이라면 2ㅜ명이 내개 배포해주고 있는 인원으로 볼 수 있습니다. B는 완료된 사람을 제외한 이 화일에 관계된 모든 사람을 뜻합니다   Seeder 와 Leecher 를 총칭

3)Swarm(스웜)

특정 파일과 관련된 사람들의 그룹입니다 여기에는 씨앗과 동료가 포함되어 있습니다. 함께 토렌트를 공유하는 사람들을 스웜이라고 합니다. 6명의 피어(동료)와 2명의(시드) 는 8개의 스웜이라할 수 있습니다. 트래커가 가지고 있는 것으로 공유 파일마다 해시 정보와 피어 리스트의 정보 모음입니다.

다시 말해서 현재 해당 파일을 공유하고 있다고 Track서버 등록되어 있는 피어들의 목록을 의미합니다. 이를 Tracker에게 접속하는 client들에게 peer목록을 ㅁ전송해줌 


4)lech(거머리)

업로드하는 것보다 훨씬 많이 다운로드하는 부정적인 영향을 끼치는 동료입니다. 

5)Snubbed (스노보드)

다운로드 클라이언트가 60초가 넘지 못하면 스눕으로 표시됩니다. 

6)seeds(씨앗)  X(Y)

이름에서 알 수 있다 싶이 파일의 작성자입니다. 씨드에는 컴퓨터에 완전한 파일이 있습니다. 동일한 파일에 대해 여러 시드가 인터넷에 있을 수 있습니다. 이것은 P2P 공유를 보다 원활하게 만듭니다.  - 11(16) 이라면 16명이 다운받았고 11명이 온라인상에서 공유하면서 제게 파일을 배포한다고 보면 된다. 16은 완전체 자신이 최초 공유나 배포자가 되었다면 x는 항상 0이다.   공유 파일의 모든 조각을 가지고 있는 사람을 Seeder라고 한다. 일부만 가지고  있다면 Leecher

7)DHT : Distributed Hash Table의 약자입니다. 이 테이블은 추적 프로그램에서 특정 파일을 호스트하는 피어 목록을 컴파일하는 데 사용됩니다.

TorrentsTorrent : 작은 메타 데이터 파일이며 .torrent 확장자로 끝납니다. 이 파일에는 다운로드 중인 파일(영화, 음악, 게임 등)에 대한 모든 정보가 들어있습니다. P2P  다운로드가 시작되면 토렌트 파일이 컴퓨터로 전송됩니다.

8)Piece : 공유 파일의 한조각 , 토렌트는 조각단위로 공유함, 조각의 크기는 생성시 설정 가능

9)Tracker 

: 파일 공유를 위한 피어들의 정보를 가지고 있는 서버, 관련 지식이 있다면 누구나 트래커를 개설, 운영할 수 있음, 토렌트 파일마다 여러 트래커를 가질 수 있고 유명한 트래커일수록 많은 피어들이 있을 수 있다. 많은 피어가 있다는건 속도가 높다는 것

 구글 검색만으로도 전세계 유명 트래커 서버 주소들을 알 수있으며 일반적으로 비공개 토렌트 집단은 하나의 비공개 트래커 서버를 통해 이뤄지는 것이며 트래커서버에서는 접속하는 클라이언트의 정보(누가 얼머나 업로드 했는지, 다운로드했는지 정보)를 이용해 운영 규칙에 맞지 않는 사용자들을 필터링 함




가용(ratio)

- 자신이 위에 얘기한 A,B들이 가지고 있는 소스들을 주고 받으면서 몇 개의 완전체를 만들 수 있는


비율(Ratio)

- 일의 총 용량과 자신이 업로드한 양에 대한 비율


토렌트 동작 방 


1)토렌트 시작




- 토렌트 파일을 실행하여 클라이언트에 등록

- 해당 토렌트 파일에 명시된 트래커에 접속

2) 피어와 트래커간의 통신 - Tracker Request (http프로토콜 이용)

 - 클라이언트가 트래커에게 해당 토렌트파일의 고유한 해시 값과 보인 피어의 정보를 전송함 (해당 토렌트 피어 목록 얻기 위함)

 - 파라미터 : 고유(peerid, port, upload(총양), download, left(남은 크기), key(클라이언트 ip바뀌어도 인식할 수 있는 비공개 값 peer간에도 공유되지 않음), ip

3)피어와 트래커간의 통신 -  Tracker Response

- 트래커가 해당 토렌트의 해시값을 참조하여 스웜이 존재하는지 검색

- 존재한다면 스웜에 포함된 피어들을 목록으로 만들어 클라이언트에 전송 갯수는 기본 50개이고 순수하게 랜덤으로 선정된다. 

- 스웜은 앞서 설명한 것처럼 Peer들이 토렌트 시작시 전송한 트래커 Tracker Request에 의해 목록이 생성되고 관리된다. 

- 트래커 response 보내는것 : complete(현재 seeder들의 개수), downloaded(다운로드완ㄹ료), incomplete(공유받고 있는 Leecher들의 개수), min interval(간격)


*피어목록을 결정할때 문제점 

- 트래커가 피어를 결정할때는 현재 네트워크 트래픽과 피어간의 거리 등을 고려하지 않고 랜덤, 다른 나라에 네트워크망과 연결되면 추가 금전비ㅣ용이 발생함, 이를 해결해서 나온것이 p4p isp사업자들이 싫어하기 때


4)  피어간 통신  - 세션 연결 

- 트래커를 통해서 피어 목록을 받은 클라이언트는 해당 피얻르에게 해시, 본인의 Peer id를 전송하여 연결 가능 여부를 파악,

- 해시를 받은 피어는 본인이 연결 가능하다면 해시 본인의 PeerID를 전송하여 응답

- 서로 해시를 주고 받으면 세션이 연결되고 파일 전송을 준비함 

- 피어의 수에 따라 여러개의 세션이 연결 됨 

- Keep-alive(대상 피어가 on-line상태인지), choke (Request받아도 응답할 수 없는 상태), HAVE(자신이 가지고 있는 Piace의 인덕스와 Offset 정보를 대상 Peer에게 알림)


5) 피어간 통신 - Piece전송

- 세션 연결에 성공한 Peer는 자신이 보유한 Piece정보를 전송함

- 클라이언트는 Peer들에게 받은 Piace를 토대로 자신에게 필요한 piece를 요청하고 해당 peer로부터 piece를 다운함


6) peer 간 통신 - Piece 다운로드 완료

- 완료되면 다른 피어들에게 해당 Piece를 보유하고 있다고 정보를 전송함

7) 모든 Piece다운로드 완료 

- 클라이언트는 모든 piece 를 받으면 해당 토렌트를 Leecher에서 seeder로 변경하고 업로드 대기함