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

BitTorrent : 파일 공유
KanKan : 스트리밍
Skype : 인터넷 전화
2. File distribution Example
: client-server vs P2P 비교를 위한 예제
파일 크기 F를 하나의 서버가 N명의 피어(peer)에게 배포할 때 걸리는 시간 구하기

서버 혼자 모든 피어에게 파일을 전송해야 함
→ 서버 업로드 속도가 병목
서버는 N개 복사본을 직접 업로드 해야함
각 클라이언트는 파일 1개를 다운로드 해야함
둘 중 더 오래 걸리는 쪽이 전체 소요 시간

피어들도 자신이 받은 파일 조각을 다른 피어에게 전송함
→ 전체 업로드 리소스가 늘어남 (서버 + 피어들의 업로드 합산)
서버는 파일 1개만 업로드 하면 됨
(그 이후에는 peer들끼리 퍼트림)
각 클라이언트는 파일 1개 다운로드 해야함
P2P에서는 모든 클라이언트가 업로드 함
셋 중 더 오래 걸리는 쪽이 전체 소요 시간

Client-server vs. P2P: example
N이 커져도 peer들이 도와줘서 감당 가능
(Client-server 에서 의 값은 N이 커질 수록 기하급수적으로 증가)
3. BitTorrent 개요
전체 파일을 조각조각 나눠서 여러 peer끼리 나누는 구조
파일을 주고받는 peer들의 리스트를 관리하는 서버
특정 파일 조각들을 교환하는 peer들의 그룹

처음 참여한 peer는 아무 chunk 없음
Tracker에 등록해서 현재 파일 공유 중인 peer 리스트를 받고, 일부 peer와 연결해서 chunk 주고 받음
파일을 받으면서 peer로부터 download
동시에 다른 peer에게 chunk를 업로드(upload)
(받기만 하지 않고, 바로바로 나눠주기)
처음에 연결된 peer들과만 계속 교환
하지만 전송 속도 최적화를 위해, 업로드 상황에 따라 다른 peer들과 연결
peer들이 왔다가 나갔다가 하는 현상
(연결 유지가 항상 안정적 x)
BitTorrent는 이런 churn 상황에도 잘 동작할 수 있게 설계되어있음
모든 chunk를 받아서 파일이 완성된 peer는 다음과 같이 행동 가능
4. BitTorrent 상세 동작
각 peer들은 서로 다른 조각을 가지고 있음
주기적으로 다른 peer들에게 어떤 조각을 가지고 있는지 리스트를 요청

자신에게 가장 빠른 속도로 조각을 보내주고 있는 상위 4명의 peer에게만 조각을 보내줌
(나에게 빨리 주는 애들에게만 나도 보내줌)
누가 제일 빠르게 보내주는지 주기적으로 다시 판단
새로 고른 peer가 좋은 속도로 보내준다면, 상위 그룹에 들어갈 수도 있기에