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_from–id_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“.
This post is also available in: Czech