Estoy codificando una implementación de p2p que me gustaría descentralizar, sin embargo estoy teniendo problemas para entender cómo funciona DHT en protocolos como bittorrent. ¿Cómo sabe el cliente dónde están los pares si no hay un rastreador? ¿Los compañeros están almacenados en el archivo torrent real?¿Cómo funciona DHT en torrentes?
Respuesta
Con torrents sin tracker/DHT, las direcciones IP del par se almacenan en el DHT utilizando el BitTorrent infohash como la clave. Como todo lo que hace un rastreador es, básicamente, responder a solicitudes de envío/recepción, esta funcionalidad corresponde exactamente a la interfaz que proporciona una DHT (tabla de hash distribuida): le permite buscar y almacenar direcciones IP en DHT mediante infohash.
Por lo tanto, una solicitud de "obtención" buscaría un infohash BT y devolvería un conjunto de direcciones IP. Un "poner" almacena una dirección IP para un infohash dado. Esto corresponde a la solicitud de "anunciar" que de otro modo haría al rastreador para recibir un diccionario de direcciones IP iguales.
En una DHT, los pares se asignan aleatoriamente a almacenar valores que pertenecen a una pequeña fracción del espacio clave; el hash asegura que las claves se distribuyan aleatoriamente entre los pares participantes. El protocolo DHT (Kademlia para BitTorrent) garantiza que las solicitudes put/get se enruten de manera eficiente a los pares responsables de mantener las listas de direcciones IP de una determinada clave.
La teoría general se puede encontrar en el artículo de la wikipedia en Kademlia. La especificación del protocolo específico utilizado en BitTorrent está aquí: http://wiki.theory.org/BitTorrentDraftDHTProtocol
¿Qué ocurre con BitTorrent y una DHT es que al principio BitTorrent utiliza la información incrustada en el archivo torrent para ir a cualquiera de un rastreador o una de un conjunto de nodos de la DHT. Luego, una vez que encuentra un nodo, puede seguir buscando otros y persistir utilizando el DHT sin necesidad de un rastreador centralizado para mantenerlo.
La información original inicia el uso posterior del DHT.
Los nodos DHT tienen identificadores únicos, denominados ID de nodo. Los identificadores de nodo se eligen al azar desde el mismo espacio de 160 bits que los hashes de información de BitTorrent. La cercanía se mide comparando las tablas de enrutamiento de Node ID, cuanto más cerca esté el Nodo, más detallada, resultando en
Lo que los hace más óptimos que su predecesor "Kademlia" que usa enteros simples sin signo: distancia (A, B) = | A xor B | Los valores más pequeños están más cerca. XOR. Además de no ser seguro, su lógica era defectuosa.
Si su cliente admite DHT, hay 8 bytes reservados en los que contiene 0x09 seguido de una carga útil de 2 bytes con el puerto UDP y el nodo DHT. Si el apretón de manos es exitoso, lo anterior continuará.
- 1. ¿Cómo se "arranca" un DHT en un cliente Bittorent?
- 2. El DHT más fácil de implementar
- 3. Explicación básica simple de una tabla hash distribuida (DHT)
- 4. ¿Dónde puedo encontrar una lista de bittorent dht bootstrap nodes?
- 5. ¿Cómo crear un árbol Huffman desde el encabezado FFC4 (DHT) en un archivo jpeg?
- 6. Implementación de DHT de código abierto simple en Java con fines de aprendizaje
- 7. ¿cómo funciona {} mientras (0) funciona en macro?
- 8. ¿Cómo funciona "en cascada"?
- 9. ¿Cómo funciona Arrays.asList (...). Contiene (...) funciona?
- 10. ¿Cómo funciona este "retraso" funciona
- 11. ¿Cómo funciona AOP en Drupal?
- 12. ¿Cómo funciona setTimeout en Node.JS?
- 13. ¿Cómo funciona get_FIELD_display (en django)?
- 14. ¿Cómo funciona 'call' en javascript?
- 15. ¿Cómo funciona require() en node.js?
- 16. ¿Cómo funciona string.unpack en Ruby?
- 17. ¿Cómo funciona sbrk() en C++?
- 18. ¿Cómo funciona extern en C++?
- 19. ¿Cómo funciona MatchEvaluator en Regex.Replace?
- 20. En jQuery, ¿cómo funciona this.each()?
- 21. ¿cómo funciona serializable en Java?
- 22. ¿Cómo funciona $ (this) en jQuery
- 23. ¿Cómo funciona setTimeLimit en R?
- 24. ¿Cómo funciona applicationWillTerminate en iPhone?
- 25. En CMake, ¿cómo funciona CHECK_INCLUDE_FILE_CXX?
- 26. ¿Cómo funciona local_assigns en Rails?
- 27. ¿Cómo funciona localStorage en HTML5?
- 28. Cómo funciona Eventbug en realidad
- 29. ¿Cómo funciona multiprocesamiento.Manager() en python?
- 30. Cómo funciona MVC en magento
¿de dónde obtiene el número de puerto para cada IP? –
el puerto está incluido junto con la dirección IP del par: http://www.bittorrent.org/beps/bep_0005.html#contact-encoding – cce
¿Los valores del espacio de claves se pierden o caducan? – schulwitz