P2P

eunsukim·2024년 10월 14일

P2P

P2P 네트워크는 클라이언트-서버 모델과 달리 중앙 집중형 서버가 필요하지 않다. 네트워크 내의 임의의 피어(peer)들이 직접 연결되어 데이터를 주고 받을 수 있다. 새로운 피어가 네트워크에 접속하면, 그 피어는 다른 피어로부터 파일을 받을 수 있고, 제공할 수 있다. 이로 인해 스스로 확장이 가능하며, 사용자가 늘어남에 따라서 리소스 또한 늘어나므로 리소스의 제한을 덜 받는다.

피어들은 항상 네트워크에 접속해있는 것이 아니라 필요할 때만 접속하고 데이터를 주고 받는다. 이는 동적이고 비연속적인 연결을 의미한다.

이와 같이 P2P 네트워크는 중앙 집중형 구조로 이루어지지 않았기 때문에 일반적인 클라이언트-서버 모델보다 관리 및 트래픽 제어가 복잡할 수 있다. 또한 고정된 서버가 없기 때문에 IP주소가 자주 바뀔 수 있고 피어들은 네트워크 내에서 서버와 클라이언트의 역할을 동시에 수행한다.

예시로는 비트 토렌트, 칸칸, 스카이프 등이 존재한다.

File distribution: Client-server vs. P2P

Q: 파일 f를 n개의 피어(노드)와 공유할 때 시간이 얼마나 걸릴까?

  • 피어 업로드 및 다운로드 용량은 제약이 존재한다.
    UsU_s = server upload capacity
    did_i = download capacity
    uiu_i = peer upload capacity

Client-server:

n개의 클라이언트에게 파일 f를 보내는 과정:

  • 한개의 카피를 보내려면 f/usf / u_s
  • n개 보내려면 nf/usnf / u_s

각 클라이언트의 다운로드 시간:
클라이언트 중 가장 느린 클라이언트의 다운로드 속도가 전체 시간에 영향을 미친다.

  • 클라이언트 다운로드 시간: f/dminf/d_{min} (minimal download capacity)

총 걸리는 시간:
다음 두 값 중 큰 값이 파일 배포에 걸리는 전체 시간이다.

  • max(nf/Us,f/dmin)max(nf/U_s, f/d_{min})

  • 서버의 업로드와 클라이언트의 다운로드는 동시에, 병렬적으로 진행되기 때문에 두 값을 더하지 않고, max값을 구하는 것이다.

P2P:

서버에서 최초 피어에게 파일전송:

  • f/Usf/U_s

P2P에서는 서버가 모든 파일을 모든 노드에 전송할 필요가 없다. 각 피어는 서버뿐만 아니라 다른 피어들에게서 파일을 받을 수 있다.

  • Us+ΣuiU_s + \Sigma u_i

클라이언트 다운로드 시간:

  • f/dminf/ d_{min}

총 걸리는 시간:

  • max(f/Us,f/dmin,nf/(Us+Σui))max(f/U_s, f/d_{min}, nf/(U_s+\Sigma u_i))
  • nf/(Us+Σui)nf/(U_s+\Sigma u_i) 에서 n이 증가할 수록 분자와 분모가 함께 증가한다.

Client-server vs. P2P: example

  • Client-server: max(nf/Us,f/dmin)max(nf/U_s, f/d_{min})
  • P2P: max(f/Us,f/dmin,nf/(Us+Σui))max(f/U_s, f/d_{min}, nf/(U_s+\Sigma u_i))

클라이언트-서버는 n이 증가할수록 배포 시간또한 그에 비례하여 선형적으로 증가한다.
P2P의 경우 n이 증가할수록 분자와 분모가 함께 증가하므로 완만한 기울기로 증가한다.
(사용자가 많아질수록 리소스가 함께 증가한다.)

BitTorrent

비트 토렌트는 P2P 파일 공유 프로토콜이다.

  • 파일은 256Kb의 조각들로 나눠진다.
  • torrent의 피어들은 서로 파일 조각들을 제공하거나 제공받는다.
  1. tracker: 트래커는 피어들의 리스트를 관리하는 중앙서버이다. 파일을 다운로드하거나 업로드하는 피어들에 대한 정보를 제공한다. 새로운 피어가 네트워크에 접속할 때, 현재 파일을 공유하고 있는 다른 피어들의 목록을 제공한다.

  2. torrent: 토렌트는 하나의 파일을 공유하고 있는 피어들의 그룹이다. 이 그룹에 속한 피어들은 서로 파일 조각을 주고 받는다.

피어들이 서로 동시에 파일을 공유함으로써 파일 전송 속도와 효율성을 높이고 있다.

BitTorrent 배포 과정

  1. 피어가 토렌트에 참여할 때:

    • 초기 상태: 새로운 피어가 토렌트에 참여하면, 파일 조각을 전혀 가지고 있지 않다.

    • 조각 획득: 시간이 지나면서 다른 피어들로부터 조각을 다운로드하여 파일을 점차적으로 완성한다.

    • 트래커와 등록: 피어는 트래커 서버에 등록하여 네트워크 상에서 파일을 공유하고 있는 다른 피어들의 리스트를 받아 연결을 맺고, 파일 조각을 교환할 수 있다.

  2. 파일을 다운로드 할 때:

    • 피어는 파일을 다운로드하는 동안 자신이 받았던 파일 조각을 다른 피어들에게 업로드한다. 즉, 파일을 전부 다 받지 않더라도 받은 조각들을 다른 피어들에게 제공하며 동시에 업로드와 다운로드를 진행한다.
  3. 피어 변경:

    • 피어는 조각을 교환하는 이웃 피어들을 변경할 수 있다. 상황에 따라 더 나은 속도를 제공할 수 있는 피어와 연결될 수 있다.
  4. 변동성(Churn):

    • 변동성은 피어가 언제나 네트워크에서 임의적으로 참여하거나 떠날 수 있음을 의미한다.
  1. 파일 다운로드 완료:
    • 피어가 전체 파일을 모두 다운로드한 경우 두가지 선택을 할 수 있다.

      • 이기적으로 떠남(selfishly leave): 더이상 네트워크에서 시더 역할을 하지 않음.

      • 이타적으로 남음(altruistically remain): 파일을 모두 다운받았음에도 계속 네트워크에 남아 시더 역할을 계속하며, 다른 피어들이 파일을 받을 수 있도록 파일 조각들을 업로드함.

      • 시더 역할이란 전체 파일을 모두 가진 피어가 다른 피어들에게 파일의 조각을 제공하는 역할이다.

BitTorrent 파일 조각 요청 (Requesting Chunks)

  1. 각 피어들은 서로 다른 파일 조각들을 가지고 있다.

  2. 피어들에게 파일 조각 목록을 요청한다.

    • 피어는 주기적으로 다른 피어들에게 그들이 가진 파일 조각의 목록을 요청한다. 이를 통해 아직 받지 못한 파일 조각이 누구에게 있는지 확인할 수 있다.
  3. 희소 조각 우선 다운로드 (Rarest first)

    • 다른 피어들로부터 가장 희소한(적게 분포하는) 조각을 우선적으로 요청한다. 이를 통해 네트워크 내에서 모든 파일 조각들이 고르게 분포할 수 있다.

BitTorrent 파일 조각 보내기 (Sending Chunks)

  1. Tit-for-Tat:

    • Tit-for-Tat 전략은 자신에게 가장 빠르게 파일을 전송해 주는 상위 4명의 피어에게 파일 조각을 업로드 하는 방식이다. 이를 통해 자신에게 유리한 피어들과 파일을 교환하여 네트워크 전체의 효율성이 높아진다.
  2. Choking (목 졸리기):

    • 자신에게 빠르게 파일을 전송하지 않는 다른 피어들에게는 파일 조각을 보내지 않는다. 이러한 상태를 Choked (차단)라고 한다.
    • 10초마다 상위 4명의 피어를 재평가하고, 전송 속도가 더 높은 피어가 나타나면 해당 피어를 상위 4명으로 포함시킨다.
  3. Optimistic Unchoking (낙관적 차단 해제):

    • 30초마다 무작위로 다른 피어를 한 명 선택하여 그 피어에게 파일 조각을 업로드한다. 상위 4명의 피어가 아니더라도 파일을 받을 수 있게 된다.
    • 이를 통해 네트워크에 처음 들어온 새로운 피어들이 파일 조각을 다운로드할 수 있도록 한다.

위의 방식으로 효율적인 파일 전송피어 간 공정한 자원 분배를 달성할 수 있다.

0개의 댓글