Aplikacje rozproszone, czyli robimy BitTorrenta

Prowadzący: Michał Zieliński


Kategorie: informatyka

Opis

W trakcie warsztatów poznasz podstawy tworzenia aplikacji działających w sieci, poprzez tworzenie programów coraz bardziej podobnych do BitTorrenta. Oprócz wskazówek, otrzymasz ode mnie coraz bardziej skomplikowane testy. Jak dobrze pójdzie, to warsztaty skończysz z działającym klientem BitTorrent (np. takim, który potrafi strumieniować filmy), a także z wiedzą jak tworzyć oprogramowanie działające przez sieć. 

Na warsztatach otrzymasz:

  1. coraz bardziej skomplikowane programy testowe
  2. adnotowaną specyfikację BitTorrent (BEP-0003)
  3. specjalnie przygotowany tracker

Będą także dostępne "wzorcowe" kody w Pythonie, żebyś miał od czego zacząć, jeżeli np. w pewnym momencie się zgubisz.

Wymagania

  1. umiejętność programowania, najlepiej w Pythonie
  2. używanie linii poleceń na Linuksie lub na Windowsach

Plan

Orientacyjny plan warsztatów - oczywiście w zależności od umiejętności uczestników możemy zrobić więcej lub mniej.

Dzień pierwszy

  • krótkie omówienie TCP/IP, API do socketów
  • omówienie protokołu BitTorrent
  • wskazanie alternatywnych rozwiązań do tych przyjętych przez BitTorrenta (inne formaty serializacji, binarne/tesktowe protokoły i takie tam)
  • implementujemy format serialiazacji BitTorrenta

Dzień drugi

  • implementujemy interfejs do trackera
  • implementujemy szeregowe pobieranie i wysyłanie danych do jednego peera

Dzień trzeci

  • multithreading i alternatywy (epoll itp)
  • implementujemy jednoczesne pobieranie i wysyłanie
  • implementujemy maszynę stanów BitTorrenta (chocking)
  • jak starczy czasu: omówienie DHT (Distributed Hash Table)

Przydatne rzeczy

Polecane lektury

Tanenbaum, Wetherall "Sieci Komputerowe", Wydanie V, Helion 2012 (Tanenbaum "Computer Networks")

Specyfikacja BitTorrent (http://www.bittorrent.org/beps/bep_0003.htmlhttp://www.bittorrent.org/beps/bep_0023.html)

https://wiki.theory.org/BitTorrentSpecification

Zadania kwalifikacyjne w trakcie przygotowania

Zadania kwalifikacyjne i pytania można przesyłać na michal@zielinscy.org.pl. Proszę o rozpoczynanie tematu wiadomości przez "[WWW11]". Prześlij też krótką notkę o tym jakich języków chciałbyś używać (i jakie znasz). Do kwalifikacji na warsztaty powinno wystarczyć ok. 10 pkt.

Zadanie 1 – Przechwytywanie ruchu (5 pkt)

Przechwyć ruch sieciowy generowany przez przeglądarkę. Odwiedź stronę gazeta.pl i www.atomshare.net. Przefiltruj przechwycony ruch, tak aby zawierał tylko pakiety od/do www.atomshare.net. Wyeksportuj przechwycone dane w formacie .pcap i prześlij mi je. 

Moźesz użyć np. programu Wireshark albo tcpdump.

Zadanie 2 – HTTP (10 pkt)

  1. (4 pkt) Napisz program do pobierania plików przez HTTP. Program powinien działać w linii poleceń - za argumenty przyjmować adres URL i docelową nazwę pliku do zapisania. Nie używaj żadnych bibliotek do obsługi HTTP. 

  2. (6 pkt) Napisz program do pobierania plików, który potrafi pobierać ten sam plik z kilku źródeł jednocześnie wykorzystując nagłówek HTTP Range. Nie używaj żadnych bibliotek do obsługi HTTP. 

Adresy http://slowdownload.atomshare.net/file1, http://slowdownload.atomshare.net/file2, http://slowdownload.atomshare.net/file3 zawierają ten sam plik. Transfer jest celowo ograniczony do 50kB/s na połączenie, więc pobieranie przy pomocy trzech połączeń powinno być trzy razy szybsze.

Zadanie 3 – Tajemniczy timeout (10 pkt)

  1. (4 pkt) Połączenia TCP po pewnym okresie nieaktywności są zamykane. Jesteś twórcą internetowego chatu, gdzie zdarzają się długie okresy, kiedy nikt nic nie pisze. Wtedy użytkownik traci połączenie z serwerem, przez co nie otrzymuje nowych wiadomości. Jak można temu zapobiec?
  2. (6 pkt) Co powoduje, że połączenie TCP muszą wygasać (timeoutować) przy braku aktywności?

Zadanie 4 – Śledczy (15 pkt)

Alicja pobrała tajne dokumenty od Boba używają BitTorrenta. Ewie udało się przechwycić plik .torrent oraz strumień przesyłany między klientami Torrent od Boba do Alicji. Odtwórz tajny dokument. 

Przechwycone pliki: https://users.atomshare.net/~zlmch/torrent/ (Możliwe jest odtworzenie pliku nie używając pliku .torrent)

  1. (8 pkt) Rozwiązanie (tzn. odzyskanie pliku)
  2. (7 pkt) Walory szczególne

Wskazówka. Zobacz https://wiki.theory.org/BitTorrentSpecification