Specifikace torrentoidního protokolu

Budeme mít dva základní typy komunikace.

Node ↔ Tracker

  • Spojení může začít kterákoliv strana. Tracker posílá „HELO NODE“ a node odpovídá „HELO TRACKER“ (nebo v opačném pořadí). Tím je session považována za započatou.
  • Udržování session probíhá pomocí zprávy „NOOP“ (druhá strana odpoví stejně).
  • Požadavky na chunks mohou přijít taktéž z obou směrů. K tomu slouží zpráva INEED v jedné z následujících variant:
    • INEED ALL“ je žádost na poslání celého seznamu dostupných chunks (v případě, že zasílá tracker) anebo maximálního přípustného seznamu ostatních uzlů (v případě, že zasílá node; co znamená „maximální přípustný“, to si určuje tracker).
    • INEED SOURCES number_of_sources“ zasílá node trackerovi a žádá number_of_sources adres dalších uzlů (které ještě nemá). Tracker může nebo nemusí vyhovět.
    • INEED chunks“ zasílá node trackerovi a žádá zdroje, které mají konkrétně chunks.
  • chunks je seznam prvků oddělený mezerami, kde prvek je buď id jednoho chunku (celé kladné číslo) anebo „id_fromid_to“ celý interval chunks
  • Na žádost INEED odpovídá uzel zprávou IHAVE, a to některou z variant:
    • IHAVE ALL„, tzn. daný uzel je seeder
    • IHAVE NONE„, tzn. uzel je právě začínající leecher
    • IHAVE chunks“ (seznam chunks viz. výše)
  • Tracker na INEED odpovídá zprávou „NODES NONE„, pokud žádné dostupné uzly momentálně nevyhovují dotazu, anebo „NODES node_list„, kde node_list je seznam prvků ip:port oddělených mezerami.
  • Node může trackerovi nahlásit, že je pro něj jiný node nedostupný, pomocí zprávy „TOOFAR node_ip„.
  • Oznámení o ukončení session se provádí zprávou „BYEBYE„. Tu smí zaslat node komukoliv a tracker seederovi.
  • V případě nerozpoznané, špatně formulované nebo nevhodné zprávy je session resetována zprávou „BLAHBLAHBLAH

Node ↔ Node

  • Session je zahájena výměnou zpráv „HELO NODE„, udržuje se zprávou „NOOP“ a ukončuje „BYEBYE„.
  • Používají se zprávy INEED, IHAVE stejně jako u komunikace s trackerem.
  • Požadavek na stažení konkrétního chunku je „GET chunk_id„, na což může druhá strana odpovědět následujícími způsoby:
    • PUT chunk_data“ – samotný přenos.
    • WAIT“ – počkat dvě minuty, pokud nepřijde PUT. Pak zkoušet znova.
    • NOTNOW“ – druhý node je příliš zaneprázdněn, zkusit později.
  • Nesrozumitelnost komunikace je druhé straně oznámena zprávou „BLAHBLAHBLAH„.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *


This site uses Akismet to reduce spam. Learn how your comment data is processed.