티스토리 뷰
2.5 P2P 파일 분배
클라이언트-서버 파일 분배에서 서버는 파일 복사본을 각 피어들에게 보내야 한다.
- 서버에서 커다란 부하를 주고 많은 양의 서버 대역폭을 소비한다.
P2P 파일 분배에서 각 피어는 수신한 파일의 임의의 부분을 다른 피어들에게 재분배할 수 있어서 서버의 분배 프로세스를 도울 수 있다.
- P2P 파일 분배 프로토콜 중 유명한 것으로 비트토렌트가 있다.
- P2P의 핵심은 데이터가 어디있는지 알아내는 것이다!
1. P2P 구조의 확장성
분배 시간(distribution time)
- 모든 N개의 피어들이 파일의 복사본을 얻는 데 걸리는 시간이다.
클라이언트-서버
- 피어의 수가 증가함에 따라 분배 시간이 선형적으로 그리고 한계 없이 증가하는 것을 알 수 있다.
P2P 구조
- 최소 분배 시간이 클라이언트-서버 구조의 분배 시간보다 항상 작지는 않다.
- 또한 임의의 피어 수 N에 대해서 한 시간보다 작다.
따라서 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. 토렌트 내부의 피어들과 청크를 주고받는다.
'CS > 컴퓨터네트워크' 카테고리의 다른 글
[Computer Network] 3. 트랜스포트 계층 (0) | 2022.10.20 |
---|---|
[Computer Network] 2.7 소켓 프로그래밍: 네트워크 애플리케이션 생성 (0) | 2022.10.13 |
[Computer Network] 2.4 DNS - 인터넷 디렉터리 서비스 (0) | 2022.10.12 |
[Computer Network] 2.3 인터넷 전자메일 (0) | 2022.10.12 |
[Computer Network] 2.2 웹과 HTTP (0) | 2022.10.12 |