티스토리 뷰

2.5 P2P 파일 분배

클라이언트-서버 파일 분배에서 서버는 파일 복사본을 각 피어들에게 보내야 한다.

  • 서버에서 커다란 부하를 주고 많은 양의 서버 대역폭을 소비한다.

 

P2P 파일 분배에서 각 피어는 수신한 파일의 임의의 부분을 다른 피어들에게 재분배할 수 있어서 서버의 분배 프로세스를 도울 수 있다.

  • P2P 파일 분배 프로토콜 중 유명한 것으로 비트토렌트가 있다.
  • P2P의 핵심은 데이터가 어디있는지 알아내는 것이다!

 


1. P2P 구조의 확장성

분배 시간(distribution time)

  • 모든 N개의 피어들이 파일의 복사본을 얻는 데 걸리는 시간이다.

클라이언트-서버

  • 피어의 수가 증가함에 따라 분배 시간이 선형적으로 그리고 한계 없이 증가하는 것을 알 수 있다.

P2P 구조

  • 최소 분배 시간이 클라이언트-서버 구조의 분배 시간보다 항상 작지는 않다.
  • 또한 임의의 피어 수 N에 대해서 한 시간보다 작다.

 

따라서 P2P 구조를 가진 애플리케이션은 자가 확장성을 가진다.
이 확장성은 피어가 비트의 소비자이자 재분배자인 것의 직접적인 결과다.

 

P2P 구조와 클라이언트-서버 구조의 분배 시간

 

2. 비트토렌트

  • 비트토렌트는 파일 분배를 위한 인기 있는 P2P 프로토콜이다.
  • 자기가 자신의 파일을 배포할 때 사용

 

토렌트(torrent)

  • 파일의 분배에 참여하는 모든 피어들의 모임

청크(chunk)

  • 파일들의 조각
  • 일반적인 청크의 크기는 256킬로바이트다.

 

토렌트에 참여하는 피어들은 서로에게서 같은 크기의 청크(chunk)를 다운로드한다.

피어가 처음으로 토렌트에 가입하면, 그 피어에는 청크가 없지만 시간이 지남에 따라 점점 많은 청크들을 쌓을 수 있다.

 

 

비트토렌트가 어떻게 동작하는지

  • 각 토렌트는 트랙커(tracker)라고 부르는 기반구조 노드를 갖고 있다.
  • 트랙커는 토렌트에 참여하는 피어들을 추적한다.
  • 한 피어가 토렌트에 가입할 때 트랙커에 자신을 등록하고 주기적으로 자신이 아직 토렌트에 있음을 알린다.
    • 이러한 방식으로, 트랙커는 토렌트에 참여하는 피어들을 추적한다.
    • 주어진 토렌트는 어느 순간에 수백 혹은 수천의 피어들이 참여하고 있을 수 있다.

 

🟢요청

  • 피어들은 각각 다른 파일들의 조각(청크)를 가지고 있을 수 있다.
  • 그러므로 피어들은 주기적으로 다른 피어들이 가지고 있는 청크의 리스트를 요청해 받는다.
  • 청크들을 요청할 때는 가장 드문 것 먼저(rarest first) 받는다.
  • 청크를 가져올 때 순서는 상관이 없다. 가져와서 붙이면 된다.

 

🟡전송

  • Tit-For-Tat
    • 눈에는 눈 이에는 이
    • 나에게 파일을 보내야 나도 너에게 보낸다.
  • 자신에게 가장 높은 속도로 청크를 보내고 있는 4명의 피어에게 청크를 전송한다.
    • 4개의 피어들을 활성화(unchocked)되었다고 한다.
  • 나머지에게는 전송하지 않는다(Chocked).
  • 해당 4명의 피어 리스트는 10초마다 한번씩 갱신된다.
  • Optimistically Unchoked
    • 30초마다 추가로 랜덤하게 피어를 골라 청크를 전송한다.
    • 해당 피어가 지금 4명의 피어 리스트에 있는 피어들보다 빠르다면
      • 그 피어가 새로운 Top 4가 될 것

 

비트토렌트의 파일 분배

 

간단히 말하면

1. 앨리스가 파일을 얻고 싶다.

2. 피어 리스트를 Tracker 에게서 얻는다.

  • 이 리스트에 있는 피어들과 동시에 TCP 연결을 설정한다.
  • 성공적으로 TCP 연결 설정한 모든 피어들을 이웃 피어라고 부른다.
  • 시간이 지남에 따라 이들 피어 중 일부는 떠나고 다른 피어들이 앨리스와 TCP 연결을 시도한다.
  • 그래서 피어의 이웃들은 시간에 따라 변동한다.

3. 토렌트 내부의 피어들과 청크를 주고받는다.