본문 바로가기
Media

bittorrent 정리

by superchae 2023. 2. 3.

P2P

BitTorrent 동작원리

  1. Torrent 파일 (.torrent) 다운로드

    • 토렌트 파일 구조
      • Torrent
        • Filename
        • Info Hash: 파일 식별자, ____으로 표시된 4개 값으로 생성됨. 하나라도 변경될 경우 해쉬 값 바뀜
      • Tracker
        • Tracker URL: 파일을 공유하는 피어들의 정보를 관리하는 서버 (트래커) 주소 (다수의 트래커를 이용할 수 있음)
        • Tracker URL
        • ...
      • Meta Data
        • Directory: 파일 다운로드 위치 = Files에 적힌 여러 개의 파일을 포함시켜 배포할 수 있음
        • Created On
        • Created By
        • Comment
        • Piece Length: 통신 시 주고받는 파일 조각의 크기
        • Private
      • Files
        • Filname/Filesize: 공유하는 실제 파일의 이름
        • Filname/Filesize
        • ...
    • 트래커 URL이 다르게 적힌 동일한 토렌트 파일을 bitTorrent 클라이언트에서 실행할 경우, 두 트래커가 가진 피어 정보가 다르기 때문에 클라이언트간 파일 공유 불가능
  2. Tracker Request (트래커에게 피어 리스트 요청)

    • 동일한 hash값의 토렌트 파일을 실행한 BitTorrent 클라이언트들이 트래커 URL에 토렌트 파일에 포함된 정보를 전송 (Tracker Request/ HTTP Get)
    • Tracker는 해당 hash에 해당하는 swarm (스웜)을 생성하고, hash 값을 보낸 피어들의 IP 주소를 swarm을 통해 관리
  3. Tracker Response (피어 IP 리스트 받아오기)

    • 트래커 서버가 Tracker request를 받으면 해당 메시지에 포함된 hash값을 참조해서 swarm 유무 판별
      -> 없으면 새로운 swarm 생성 후 다른 피어로부터 tracker request 올때가지 대기
      -> 있으면 swarm에 포함된 피어 IP를 리스트로 만들어 Tracker Response (HTTP Response)로 응답 (피어들에게 피어 리스트 전달)
    • 스웜에 피어가 50개 이상일 경우, 무작위로 피어를 선정하여 피어 리스트 구성
    • Message parameter
      • complete: 현재 파일을 공유하고 있는 시더들의 개수
      • incomplete: 현재 파일을 받고 있는 리처들의 개수
      • downloaded: 해당 공유 파일의 다운로드 완료 횟수
      • interval: 클라이언트가 Tracker Request 전송하는 간격 (초)
      • peers: 피어 IP 리스트
  4. Handshake (파일 다운로드 받기 위한 피어 간 통신/ Hash 교환)

    • BitTorrent 클라이언트가 피어리스트를 받으면 피어리스트의 모든 피어 IP주소로 hash 값, peer Id 값을 보냄
    • 이 메시지를 받은 피어 중 파일 공유가 가능한 피어는 hash 값으로 응답
    • => Hash 교환을 통해 피어 간 세션 생성, 세션을 통해 파일 조각(piece)을 교환
      • BitTorrent 클라이언트는 트래커로부터 피어들의 IP 주소 (default 50) 를 받아 세션을 생성
      • 하나의 클라이언트는 동시에 여러 개의 세션을 생성함
    • Bittorrent Handshake -> [Have -> Request -> Piece (Data in Piece)] 반복
      • 내가 피스를 공유받으면 다른 피어들에게도 Have 를 보내서 공유받은 피스에 대해 Request를 받고 piece 전달 가능함
    • Bittorrent Message
      • Have: 자신이 가지고 있는 조각의 정보를 피어들에게 알림
      • Request: 받고자 하는 조각의 Index / Offset 정보를 대상 피어에게 알림
      • Piece: 실제 조각 (파일 데이터), Index / Offset 정보가 포함된 메시지
      • Keep-alive: 대상 피어가 온라인 상태인지 체크
      • Choke: request를 받아도 응답할 수 없는 상태임을 알림
      • Unchoke: Choke 상태를 해지하여 request를 받을 수 있는 상태임을 알림

'Media' 카테고리의 다른 글

ffmpeg shaka packger로 인코딩, mpd 파일 생성하기  (0) 2023.02.03
node.js 비디오 비교하기  (0) 2023.02.03
node.js HTTP 분할 다운로드 서버  (0) 2023.02.03