반응형
P2P applications
Pure P2P architecture에 관한 내용은 이 곳을 참고해주세요.
이 글은 전편에 이어지는 글입니다. P2P application의 초창기 모델인 "Napster"와 "Gnutella"에 대한 설명은 여기를 참조해주세요.
(3) "BitTorrent"
- Piece: 공유 파일의 한 조각 (256 kb)
- 피어들은 파일을 256kb로 쪼개어 공유한다. (사실, 공유하는 파일의 크기가 크면, 쪼개는 파일의 크기를 256kb로 고정하지 않고, 늘리는 경우도 있다.)
- Peer: Piece들을 upload/download 하는 주체.
- Seeder: 모든 piece를 전부 가지고 있는 피어를 지칭
- Leecher: 일부 piece만을 가지고 있는 피어를 지칭
- Tracker: 클라이언트(피어)에게 peer list를 전달하는 중앙 컴퓨터 (공개/비공개)
- Swarm: Tracker 안에 있으며, peer list를 담고 있는 DB
작동방식 :
Torrent의 알고리즘과 전략
-
- 조각 선택 알고리즘 (Piece Selection Algorithm)
- (1) Strict Priority (전 과정)
- 조각을 받기 시작하면, 다른 조각에 신경 쓰지 말고, 해당 조각을 다운 받는데 최선을 다하라.
- (2) Random First Piece (처음)
- Client가 어떤 조각도 갖고 있지 않을 경우, random으로 piece를 선택해서 download를 시작한다.
- (3) Rarest First (중간)
- download 시, 자신이 download 해야하는 조각 중에서 해당 조각을 가지고 있는 peer의 수가 가장 적은 조각으로 결정한다.
- 따라서 가장 많은 peer를 가지고 있는 조각이 다운로드의 마지막에 남게 된다.
- 첫 조각은 Random First Piece 전략을 사용하며, 그 다음 조각부터 Rarest First 전략을 사용한다.
- (4) End Game Mode (마지막)
- 마지막 한 개의 조각을 download 할 때는, peer 전체에게 download request를 한다.
- download가 끝나면 다른 peer들에게는 cancel 요청을 한다.
- (1) Strict Priority (전 과정)
- 조각 선택 알고리즘 (Piece Selection Algorithm)
-
- 피어 선택 알고리즘 (Peer Selection Algorithm)
- Choking
- upload를 하지 않고, download만 하는 peer를 방지하는 방법.
- "일시적으로 특정한 client에게 uploading을 거부하는 것."
- 10초마다 갱신되는 각각의 peer로부터의 download 속도를 계산하여 choke를 할지 unchoke를 할지 계산한다.
- BitTorrent에서는 uploading 하는 peer가 downloading 하는 peer에게 “unchoke”를 보냄으로서 download가 시작된다.
- “unchoke” 되는 peer의 수는 4개
- "optimistic unchocking"
- 자신으로 uploading하는 속도가 빠른 peer에 대해 unchoke를 실행
- (20초 단위로 관측하고, 10초마다 unchoke peer를 변경)
- 30초마다 optimistic unchocking 하지 않고, "random selection" 한다.
- 방금 접속한 새로운 peer들에게 기회를 주는 역할을 한다.
- Choking
- 피어 선택 알고리즘 (Peer Selection Algorithm)
- 번외) torrent 운영 회사의 수익 모델은 무엇인가?
- SW의 업데이트, 신규 배포 등을 torrent를 통해 배포를 하기 대문에 수익이 발생한다.
참고 자료
- Computer Networking: A Top Down Approach 6th edition - Jim Kurose, Keith Ross Addison-Wesley March 2012
반응형
'Computer Science > Computer Network' 카테고리의 다른 글
[네트워크] Reliable Data Transfer의 원리와 RDT 모델 알고리즘 (0) | 2022.10.18 |
---|---|
[네트워크] TCP, UDP - Transport Layer Protocol (0) | 2022.10.18 |
[네트워크] "Napster", "Gnutella" - P2P applications (1) (0) | 2022.10.18 |
[네트워크] DNS (Domain Name System, 도메인 네임 시스템) (0) | 2022.10.18 |
[네트워크] Cookies(쿠키), Web caches(웹 캐시), Proxy server(프록시 서버) (0) | 2022.10.17 |