BT9G LABS / DHT a fondo #10

BEP 9 ut_metadata explicado: obtener Torrent Metadata desde Peer

Tipos de mensaje, pieces, validación y scheduling de BEP 9 para crawlers de alto volumen.

BT9G Labs / DHT Deep Dive #10. Entiende request/data/reject y por qué el objetivo no es solo recibir bytes, sino validar la identidad correcta.

BEP 9 ut_metadata explicado: obtener Torrent Metadata desde Peer

Resumen rápido

  • Tema: BEP 9 ut_metadata explicado: obtener Torrent Metadata desde Peer
  • Palabras clave: BEP 9, ut_metadata, Torrent Metadata, metadata piece, BitTorrent
  • Audiencia: ingenieros backend, investigadores de protocolos, ingenieros de búsqueda e implementadores de BitTorrent
  • Objetivo: Explicar el mecanismo con suficiente precisión como para apoyar decisiones reales de arquitectura de crawling, indexación y búsqueda.

Vista del sistema

Qué transfiere BEP 9

ut_metadata transmite principalmente el info dictionary bencoded, no todos los campos exteriores del .torrent. Los datos se dividen en pieces y metadata_size permite calcular el tamaño total y cuántas piezas hacen falta.

El scheduler necesita estado por piece para controlar solicitudes, faltantes y duplicados.

request, data y reject

El cliente solicita un piece y el Peer devuelve data o reject. Un reject no significa necesariamente fallo permanente: otro Peer puede servir la misma pieza. Es útil mantener varios candidatos y limitar outstanding requests por conexión.

Un Peer lento no debería bloquear toda la tarea; las piezas pendientes pueden reasignarse.

La validación no es opcional

Al terminar se debe recalcular el hash correspondiente y compararlo con la identidad objetivo. Que un bencode sea parseable no demuestra que sea correcto. Datos corruptos, de otro Torrent o maliciosos no deben llegar al canonical store.

El éxito debe registrarse después de la validación completa, no al recibir el primer piece.

Esquema de implementación

{"msg_type": 0, "piece": 0}          // request
{"msg_type": 1, "piece": 0,
 "total_size": 48321}                // data header, followed by bytes
{"msg_type": 2, "piece": 0}          // reject

Notas de ingeniería de BT9G Labs

En un indexador como BT9G importa más separar correctamente la identidad del contenido, las observaciones de red de corta duración, el estado de adquisición y los documentos de búsqueda que maximizar el número bruto de eventos. Cada campo derivado de DHT o de un Peer debería conservar su fuente y marca temporal, y las métricas deberían dividirse por etapas: discovery, conexión, handshake, soporte de extensiones, obtención de Metadata, validación, almacenamiento e indexación.

Errores comunes

  • Creer que BEP 9 transfiere todo el .torrent.
  • Ignorar metadata_size y límites de pieces.
  • Guardar datos parseables sin validar el hash.
  • Dejar que un Peer lento bloquee toda la tarea.

Artículos relacionados de BT9G Labs

Referencias


Siguiente artículo: BEP 10 Extension Protocol: ampliar BitTorrent sin romper compatibilidad →

Este artículo describe el comportamiento de protocolos públicos de BitTorrent con fines de ingeniería e investigación; no implica que todo Swarm observado esté disponible, sea válido o esté autorizado para su redistribución.