BT9G LABS / DHT em profundidade #11
BEP 10 Extension Protocol: como expandir BitTorrent sem quebrar compatibilidade
Extended handshake, message IDs dinâmicos e o papel do BEP 10 como base para ut_metadata e PEX.
BT9G Labs / DHT Deep Dive #11. Entenda como capacidades são negociadas por conexão sem alterar o Peer Wire Protocol básico para cada novo recurso.
Resumo rápido
- Tema: BEP 10 Extension Protocol: como expandir BitTorrent sem quebrar compatibilidade
- Palavras-chave: BEP 10, Extension Protocol, extended handshake, ut_metadata, BitTorrent
- Público: engenheiros backend, pesquisadores de protocolos, engenheiros de busca e implementadores de BitTorrent
- Objetivo: Explicar o mecanismo com precisão suficiente para orientar decisões reais de arquitetura de crawling, indexação e busca.
Visão do sistema
O problema de compatibilidade
Um protocolo P2P de longa vida precisa adicionar recursos sem quebrar clientes antigos. BEP 10 usa reserved bits no handshake base para indicar suporte e depois troca um extended handshake com as capacidades concretas.
Assim extensões podem evoluir sem grandes mudanças no protocolo base.
Extended handshake e IDs dinâmicos
O dicionário m mapeia nomes de extensões para message IDs escolhidos pelo Peer naquela conexão. Também pode trazer versão do cliente, porta ou metadata_size. O ID numérico de ut_metadata não é uma constante global e precisa ser lido por conexão.
Hardcode desse número é um erro clássico.
Por que isso importa ao indexador
Um indexador baseado em Magnet costuma depender de BEP 9 e descobre ut_metadata por BEP 10. Medir separadamente connection success, basic handshake, suporte BEP 10, suporte ut_metadata e Metadata complete mostra exatamente onde a conversão está sendo perdida.
Unsupported extension e network failure devem ser categorias distintas.
Esboço de implementação
Base handshake
reserved bit says: extension protocol supported
|
v
Extended handshake
m = { "ut_metadata": 3, "ut_pex": 1 }
metadata_size = 48321
|
v
Extended message 3 now means ut_metadata for this connection
Notas de engenharia do BT9G Labs
Em um indexador como o BT9G, é mais importante separar corretamente a identidade do conteúdo, observações de rede de curta duração, estado de aquisição e documentos de busca do que maximizar o número bruto de eventos. Campos derivados de DHT ou de um Peer devem manter origem e timestamp, e as métricas devem ser divididas por etapas: discovery, conexão, handshake, suporte a extensões, obtenção de Metadata, validação, armazenamento e indexação.
Erros comuns
- Assumir que todo Peer suporta BEP 10.
- Usar um message ID fixo em todas as conexões.
- Enviar
ut_metadataantes do extended handshake. - Misturar unsupported extension e network failure.
Artigos relacionados do BT9G Labs
- De Magnet Link a Metadata: fluxo completo de Peer Discovery e BEP 9/10
- BEP 9 ut_metadata explicado: obtendo Torrent Metadata de Peer
- Tracker vs DHT vs PEX: comparação de três mecanismos de Peer Discovery
- Seeders e Leechers: o que os números significam e como são medidos
Referências
- BEP 10 - Extension Protocol
- BEP 9 - Extension for Peers to Send Metadata Files
- BEP 11 - Peer Exchange (PEX)
Próximo artigo: Tracker vs DHT vs PEX: comparação de três mecanismos de Peer Discovery →
Este artigo descreve o comportamento de protocolos públicos do BitTorrent para fins de engenharia e pesquisa; não implica que todo Swarm observado esteja disponível, seja válido ou autorizado para redistribuição.