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„.