Anatomia sesji torrenta


Klient sieci BitTorrent komunikuje się z trackerem poprzez zwykłą komendę http GET. Poniżej rozpatrujemy poszczególne przypadki, jakie występują pomiędzy trackerem, a klientem.


Podstawowe polecenie klienta:

tracker otrzymuje rozkaz:
GET /announce.php?info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=0&downloaded=0&left=753690875&event=started

Co oznacza kolejno:
 Info_hash   Jest ciągiem znaków (sumą kontrolną) identyfikującym torrent.
 Peer_id   Identyfikuje nazwę klienta, np. człon s588 rozpoznaje klienta Shadow 5.8.8, reszta członu jest generowana losowo.
 Port   Jest portem nasłuchu, umożliwiającym innym peerom łączyć się do tego torrenta.
 Uploaded   Ilość oddanych danych w bajtach.
 Downloaded   Ilość pobranych danych w bajtach.
 Left   Ilość danych brakujących do ukończenia pobierania w bajtach.
 Event   Stan torrenta.


Należy zauważyć, że klient nie demaskuje tutaj IP użytkownika (chyba, że sam user zmieni ustawienia klienta). Tracker widzi peer_id, nie związane z IP komputera, łączy z właściwymi portami i statystykami, umożliwiając ściąganie i wysyłanie plików, posługując się wyłącznie w/w potokiem danych dołączanym do listy userów korzystających z danego torrenta.
Od tej chwili klient będzie wymieniał dane (ściągał i wysyłał) z trackerem, zmieniając dane w potoku.

Naliczanie statystyk

tracker otrzymuje rozkaz:
GET /announce.php?info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=67960832&downloaded=40828928& left=715417851&numwant=0

"Numwant" jest zmienną mówiącą, ile nowi peerzy potrzebują jeszcze danych tego torrenta. Jak możecie zobaczyć, w tym przykładzie użytkownik udostępnił mniej więcej 68MB i ściągnął mniej więcej 40MB. Przez cały czas trwania sesji tracker otrzymuje te dane i modernizuje wszystkie statystyki: tak samo uploadu jak i downloadu, chwilowego i całkowitego. Te dane są wysyłane przez połączone klienty co 15 min, chyba że ustawienia wymuszą inną częstotliwość aktualizacji statystyk.

Kończenie sesji:

tracker otrzymuje rozkaz:
GET /announce.php?info_hash=c%97%91%C5jG%951%BE%C7M%F9%BFa%03%F2%2C%ED%EE%0F& peer_id=S588-----gqQ8TqDeqaY&port=6882&uploaded=754384896&downloaded=754215163 &left=0&numwant=0&event=completed

Cała sesja jest zakończona "event=completed". W tym momencie zakończono przesyłanie potoku danych do klienta i torrent został usunięty z twojego profilu na stronie. Jeżeli z jakichkolwiek powodów (tracker down, zerwane połączenie, nieprawidłowy klient...) wystąpią zaburzenia w zamknięciu sesji i tracker nie otrzyma powyższego komunikatu, potok danych (pewna niewielka ilość) nadal będzie naliczany w profilu usera, dopóki tracker nie dokona zakończenia sesji. Komunikat o zakończeniu sesji zostanie wysłany do trackera tylko wtedy, gdy nastąpi prawidłowe zamknięcie klienta. Inaczej tracker będzie nadal załączał klienta do listy pobierających z left=0 (brakuje 0 bajtów), lecz jeśli nie otrzyma komunikatu w określonym czasie (timeout) uzna sesje za zakończoną.
Powyższą sytuację wykorzystano w niektórych klientach do "modyfikacji" statystyk poprzez wymuszanie przerwań wysyłania/ściągania strumienia danych. Jest to nieuczciwe i grozi banem !


0.000017s