✍️ Hybrid architecture
tracker를 기본으로하는 중앙화된 구조(중앙 서버가 있는 구조)
서버는 밑에 사항을 포함하는 ".torrent"file을 유지한다.
- tracker의 주소
- 배포된 파일에 대한 정보
trackerless한 중앙화 되지 않는 구조(중앙 서버가 없는 구조)
Kademlia DHT를 사용
✍️torrent file
peer들은 전체 파일을 가지고 있거나, 파일을 쪼개서 일부만 가지고 있다.
트래커를 통해 다른 피어들로 부터 파일 조각을 모아서 온전한 파일 하나로 합쳐서 파일을 다운로드 할 수 있게 된다.
피어 자신도 다른 피어의 요청이 오면 파일 조각을 건내주고, 이런 자신의 상태를 트래커와 공유한다.
- seeder가 한 완전한 content를 공유하길 원할때, seeder가 tracker에게 알린다. 그리고 토렌트 파일을 웹서버에 업로드한다.
- 그 content를 다운받기를 원하는 한 client가 웹서버에서 해당 토렌트 파일을 찾는다.
- 토렌트파일의 정보를 가지면, client는 tracker를 가지고 TCP connection을 만든다.
- traker로 부터 해당 content와 연관된 peer들의 리스트를 요청한다.
- tracker는 찾고있는 swarm이 있나 확인한다.
- swarm을 찾으면, tracker는 swarm으로부터 그들의 ip address와 peer number를 가진 정보를 제공한다.
- client는 tracker를 거치지 않고 직접 리스트에 있던 peer들과 연결을 시작한다.
- 다른 peer들은 같은 과정으로 content를 얻거나 제공한다.
현재 자신의 chunk를 가장 빠른 속도로 보낼 수 있는 4개의 peer에게 chunk를 보낸다.
다른 peer들은 chunk를 받지 못하고 막힌다.
10초마다 제일 빠른 4 peer를 재평가한다.
30초마다, chunk를 보내기 시작할 peer들을 랜덤으로 선택한다.
새롭게 선택한 peer들은 top4에 합류할수 있을 것이다.
이런식으로 더 빨라지게 된다.