Computer Network #02-2. Application Layer : P2P applications

김서영·2025년 4월 18일
0

컴퓨터네트워크

목록 보기
8/15
post-thumbnail

1. P2P Architecture

P2P 구조는 항상 켜져있는 인프라스트럭처 서버에 최소한으로 의존하고,
간헐적으로 연결되는 호스트 쌍들(피어, peer)이 서로 직접 통신하는 구조

  • 항상 켜진 서버 x
    (서버에만 의존하지 않고, 개별 장치끼리 직접 통신)
  • End system 간 직접 통신
    (모든 장치(PC, 휴대폰 등)가 서로 서비스 주고받음)
  • 서로 요청/응답
    (내가 서비스를 받기도 하고, 남에게 제공하기도 함)
  • Self-scalability
    새로운 피어(peer)가 들어오면 → 서비스 제공 능력도 함께 늘어남 → 동시에 새로운 수요도 생김
  • IP 주소 변화/접속 불안정
    피어들이 수시로 연결되었다 끊어짐 (관리 복잡성 증가)

P2P Example

BitTorrent : 파일 공유
KanKan : 스트리밍
Skype : 인터넷 전화

2. File distribution Example

: client-server vs P2P 비교를 위한 예제

파일 크기 F를 하나의 서버가 N명의 피어(peer)에게 배포할 때 걸리는 시간 구하기

  • 업로드 / 다운로드 속도 모두 제한
  • 네트워크 대역폭 자체는 풍부하다고 가정
    (네트워크 내부 혼잡은 없음)

Client-Server 방식

서버 혼자 모든 피어에게 파일을 전송해야 함
→ 서버 업로드 속도가 병목

Server 입장

서버는 N개 복사본을 직접 업로드 해야함

  • 파일 1개 보내는데 걸리는 시간 : F/uF / uₛ
  • 파일 N개 보내는데 걸리는 시간 : N×(F/u)N × (F / uₛ)

Client 입장

각 클라이언트는 파일 1개를 다운로드 해야함

  • 클라이언트의 최소 다운로드 속도 : dₘᵢₙdₘᵢₙ
    (항상 빠를 수 없기에, 제일 느린 것으로 계산)
  • 파일 다운로드 시간 : F/dₘᵢₙF / dₘᵢₙ

전체 분배 시간

둘 중 더 오래 걸리는 쪽이 전체 소요 시간


P2P 방식

피어들도 자신이 받은 파일 조각을 다른 피어에게 전송함
→ 전체 업로드 리소스가 늘어남 (서버 + 피어들의 업로드 합산)

Server 입장

서버는 파일 1개만 업로드 하면 됨
(그 이후에는 peer들끼리 퍼트림)

F/uF / uₛ

Client 입장

각 클라이언트는 파일 1개 다운로드 해야함

F/dₘᵢₙF / dₘᵢₙ

Peers 입장

P2P에서는 모든 클라이언트가 업로드 함

  • 전체 업로드 속도 : u+Σuuₛ + Σ uᵢ
    (서버 업로드 + 모든 클라이언트들의 업로드 합친 것)
  • 총 업로드량 : NFNF (N개의 파일)
  • 필요한 시간 : NF/(u+Σu)NF / (uₛ + Σ uᵢ)
    (필요한 업로드량 / 전체 업로드 속도)

전체 분배 시간

셋 중 더 오래 걸리는 쪽이 전체 소요 시간


Client-server vs. P2P: example


N이 커져도 peer들이 도와줘서 감당 가능
(Client-server 에서 N×(F/u)N × (F / uₛ)의 값은 N이 커질 수록 기하급수적으로 증가)


3. BitTorrent 개요

전체 파일을 조각조각 나눠서 여러 peer끼리 나누는 구조

  • 큰 파일(예: A.mp3)을 256KB 단위로 나눠서 관리
  • 하나의 조각(chunk) 단위로 파일을 주고 받음

tracker

파일을 주고받는 peer들의 리스트를 관리하는 서버

torrent

특정 파일 조각들을 교환하는 peer들의 그룹


동작 과정

1) 새로 합류하는 Peer 접속

처음 참여한 peer는 아무 chunk 없음

Tracker에 등록해서 현재 파일 공유 중인 peer 리스트를 받고, 일부 peer와 연결해서 chunk 주고 받음

2) 다운로드 + 업로드 동시에 진행

파일을 받으면서 peer로부터 download
동시에 다른 peer에게 chunk를 업로드(upload)
(받기만 하지 않고, 바로바로 나눠주기)

3) Peer는 교환 peer를 변경할 수 있음

처음에 연결된 peer들과만 계속 교환
하지만 전송 속도 최적화를 위해, 업로드 상황에 따라 다른 peer들과 연결


Churn (척척 바뀌는 현상)

peer들이 왔다가 나갔다가 하는 현상
(연결 유지가 항상 안정적 x)

BitTorrent는 이런 churn 상황에도 잘 동작할 수 있게 설계되어있음

파일 다 받은 후 Peer 행동

모든 chunk를 받아서 파일이 완성된 peer는 다음과 같이 행동 가능

  • selfishly (이기적으로): 그냥 torrent를 떠날 수도 있음
  • altruistically (이타적으로): torrent에 남아서 다른 사람을 도와줄 수 있음

4. BitTorrent 상세 동작

조각 요청 (Requesting chunks)

각 peer들은 서로 다른 조각을 가지고 있음

주기적으로 다른 peer들에게 어떤 조각을 가지고 있는지 리스트를 요청

  • 자기에게 없는 희귀 chunk 먼저 요청

조각 전송 (Sending chunks) : tit-for-tat 전략

1) 친한 peer들에게만 조각 보내기

자신에게 가장 빠른 속도로 조각을 보내주고 있는 상위 4명의 peer에게만 조각을 보내줌
(나에게 빨리 주는 애들에게만 나도 보내줌)

  • 나머지 peer들은 choked 상태
    (데이터를 못 받은 상태)

2) 10초마다 상위 4명 재평가

누가 제일 빠르게 보내주는지 주기적으로 다시 판단

3) 30초마다 무작위로 peer 골라서 조각 보내기 (optimistically unchoke)

새로 고른 peer가 좋은 속도로 보내준다면, 상위 그룹에 들어갈 수도 있기에

profile
안녕하세요 :)

0개의 댓글