intercambiar archivos • Cada cliente es un Peer que se conecta a un Tracker para conocer quienes son los otros Peers para bajar Pieces de un Torrent Mas info
archivo es generar un archivo .torrent Este archivo contiene la información necesaria para que un Peer sepa encontrar otros Peers que intercambien el mismo archivo: hash value, tamaño y nombre del archivo(s), IP del tracker(s), tamaño de las Pieces. • Un Magnet link tiene la información necesaria para pedirle el .torrent al resto de los clientes y bajarlo como si fuese un archivo más del torrent. Por lo tanto no se necesita alojar el .torrent en ningún lado. • Cada .torrent tiene un identificador único que es un hash SHA-1 de 20 bytes.
la lista inicial de quiénes están compartiendo un torrent. • Un Peer “anuncia” en un Tracker que está dispuesto a intercambiar un torrent y la disponibilidad que tiene del mismo. • Es el punto de entrada al Enjambre (Swarm)
de intercambio de la red torrent. • El .torrent tiene la información del tamaño y la cantidad de Pieces a descargar. • Normalmente tienen entre 64KB y 4MB. • Cada Piece tiene un identificador SHA-1 único. • Más info en derecho a leer
implementación de BitTorrent en C++. ◦ Enfocada a performance y usabilidad. ◦ Demasiado Buena documentación. ◦ PYTHON BINDING!! ◦ Muy simple de usar. ◦ Disponible en cualquier SO respetable (... y en Windows).
loop principal del thread que maneja los torrents que estamos descargando • Torrent Handle: Maneja la descarga de un archivo .torrent • Torrent Status: Contiene toda la información de estado del torrent
una máscara de bits (bitmask) que representa todas las Pieces y su estado. (True si ya la descargamos) • handle.piece_priority() permite setear u obtener la prioridad de un piece. • status.get_downlodad_queue() expone la cola de descarga. • status.download_rate() y status.upload_rate()
se van a incorporar en la cola de descarga. • Tiene diferentes estrategias, por default usa rare first. En este modo siempre le da una prioridad más alta a las pieces que menos disponibilidad tienen en el enjambre. Es la estrategia más solidaria. • Cada Piece tiene una prioridad de 1 a 7 (7 es la más alta) y un deadline (handle.set_piece_deadline() ) que también influyen sobre el orden en que el Piece picker las encola. • TIP: Una Piece con un deadline muy bajo va a ser descargada ASAP.
son un ejemplo de una de las piezas más potentes de Python: La comunidad. Como pueden ver nos ahorramos la mitad del trabajo gracias a librerías de terceros. ;)