Dudas sobre el funcionamiento redes P2P descentralizadas

Buenas,

Tengo una idea bastante loca para hacer a medio/largo plazo y llevo bastante tiempo investigando acerca de las redes p2p y su funcionamiento pero es bastante difícil encontrar información mas detallada sobre su funcionamiento (o yo no estoy buscando bien).

Apenas estoy empezando a trabajar con programación orientada a redes y transmisión de datos y supongo que por eso a lo mejor me esta costando un poco mas entender como funcionan.

La cosa es que concretamente en las redes p2p descentralizadas, se habla de la ventaja de no depender de un servidor centrar que interconecte los nodos como en el caso de emule o de manera parcial bittorent. Pero en tal caso, en ausencia de un servidor central que te informe de que nodos existen y con los que puedes comunicarte, como se conectan entre ellos?

Por mas vueltas que le he dado no he logrado alcanzar a entender como es posible que un programa X que ejecutamos por primera vez sin conocer ningún otro nodo, encuentre otros nodos de la red sin consultar a ningún nodo "central" conocido que siempre este ahí para responder.

Si alguien sabe o tiene información al respecto es bienvenida.
Elkri escribió:Si alguien sabe o tiene información al respecto es bienvenida.


¿ https://es.wikipedia.org/wiki/Tabla_de_hash_distribuida ?
EN EL CASO DE TORRENT, NO TIENES UN SERVIDOR CENTRALIZADO DONDE ESTEN LOS ARCHIVOS que vas a bajar, Pero si cuentas con algunos servidores [llamados trackers] que son los que interconectan a todas las PC o dispositivos con un cliente torrent funcionando y estos servidores dirigen tu cliente a esas PCs donde esten esos archivos que se esta pretendiendo bajar [digamos que el tracker le pregunta a cada PC conetcda a el si tiene esos archivos que quieres bajar y te conecta con ellos]. O tambien, en los ultimos tiempos cuentas con el protocolo DHT el cual permite incluso prescindir de estos trackers

http://www.bittorrent.org/beps/bep_0005.html
http://www.ayudabittorrent.com/nodos-dht


.
Creo que el compañero no preguntaba por el funcionamiento de bittorrent. Simplemente preguntaba por información sobre el funcionamiento de las redes p2p distribuidas sin servidor que indexe los pares.
Deschamps escribió:Creo que el compañero no preguntaba por el funcionamiento de bittorrent. Simplemente preguntaba por información sobre el funcionamiento de las redes p2p distribuidas sin servidor que indexe los pares.


Exacto!

He estado ojeando la documentación que me habéis pasado (alguna ya la había visto) y a priori sigo con la misma duda.

Una red p2p descentralizada según se vende (o al menos eso he entendido yo), cada nodo actua como cliente-servidor y por tanto da igual cuantos nodos elimines, técnicamente nunca podrás acabar con la red ya que no existe una cabeza visible responsable de todo.

Ahora aplicando eso a un ejemplo real, por un lado tenemos la red bittorrent tradicional (se que hay variaciones) que es hibrida ya que depende de un servidor "tracker" al que conectas para que te indique que nodos están compartiendo un archivo.

Por otro lado esta la red kademlia que usa/usaba emule que se supone es completamente descentralizada de forma que tu nada mas instalar el programa podías realizar una búsqueda y encontrar datos sin tener que conectar a ningún nodo central.

Entonces es ahí donde tengo la duda, como puede mi nodo encontrar otros nodos de la red? Las tablas DHT son las que utiliza para almacenar la información de los nodos, pero como puñetas encuentras al primer nodo?

Después me leeré mas detenidamente la información que me habéis facilitado, especialmente las tablas DHT a ver si es que estoy pasando algo por alto.

Saludos y mil gracias por vuestras aportaciones!

EDIT:

En una de las paginas que facilita @TRASTARO, se comenta lo siguiente sobre el método de conexión con el primer cliente:

Para contactar con el primer cliente hay 4 formas posibles:
- Lo más habitual es a través de un tracker de BitTorrent. Por norma general viene indicado en el propio torrent.

- A través de un nodo indicado en el propio torrent. Puede usarse si en vez de querer instalar un tracker, se instala un servidor de nodos que consume muchos menos recursos. El nodo puede ser el seed original y puede ser usado para intercambiar archivos entre unos pocos amigos. Si el nodo indicado tiene ip dinámica es muy recomendable usar DNS para evitar no poder contactar con él.

- A través del nodo por defecto que incorporan algunos clientes de BitTorrent y a través del cual conecta a todos los usuarios de ese cliente:
El BitComet en router.bitcomet.com:554 (UDP)
El BitTorrent Oficial en router.bittorrent.com:6881 (UDP)
El uTorrent en router.utorrent.com:6881 (UDP)

- Algunos clientes de BitTorrent permiten introducir a mano la IP de otro cliente.


Pero a mi modo de ver eso no esta totalmente descentralizado, por que si creas un software que en su configuración inicial estableces X nodos donde acceder por primera vez para obtener un listado de nodos de la red, si por H o por B esos X nodos iniciales mueren la app deja de funcionar y mi idea es precisamente crear una app que si yo mañana me tiro por un puente esta siga funcionando de manera autónoma y sin necesidad de mi supervision.
Elkri escribió:Pero a mi modo de ver eso no esta totalmente descentralizado, por que si creas un software que en su configuración inicial estableces X nodos donde acceder por primera vez para obtener un listado de nodos de la red, si por H o por B esos X nodos iniciales mueren la app deja de funcionar y mi idea es precisamente crear una app que si yo mañana me tiro por un puente esta siga funcionando de manera autónoma y sin necesidad de mi supervision.


Pues ya puedes ir creando una aplicación que compruebe las 2³² IPv4 y/o 2¹²⁸ IPv6 (menos las reservadas en ambos casos (RFCs)) hasta encontrar una que pertenezca a alguien usando tu software P2P.

Siempre podrías acotar a los rangos asignados a los operadores locales. Si acaso sirviera de algo...

Te pongo el ejemplo de KAD, donde siempre existe un nodo "central" para que los desconocidos se conozcan. ¿Cómo si no se pretende encontrar clientes la primera vez que te conectes? Una vez que se tienen "conocidos", ya no se necesita el "central" (equivalente al DHT de BT). Un vez superado el primer paso, se convierte en lo prometido: descentralizado. Y el día que deje de existir ese nodo "central", ajo y agua; o lo que te ha dicho trastaro, es decir, añadir IPs de conocidos manualmente, y que estos conozcan a otros, y esos otros a otros y....

https://en.wikipedia.org/wiki/Kademlia# ... he_network
Pues aunque no lo creas @JohnH viendo que no alcanzaba a encontrar de manera clara como funciona me plantee la posibilidad de que de alguna manera intentara buscar nodos cercanos empezando en la misma red, pero me pareció una salvaja XD

Le echare un ojo a ese enlace de kademlia en ingles (normalmente busco directamente en ingles pero para algo tan "complejo" necesitaba hacerme primero una idea en español) que veo si explica como realiza esa primera conexión y se supone que kademlia es una red descentralizada.

Y eso es lo que me esta jodiendo vivo. No paro de leer por todos lados redes superchupiguays a pruebas de censura por que son descentralizadas bla bla y que como no hay servidor central no pueden tirarla, pero coñe, si el programa viene configurado para inicialmente conectar a los nodos A, B y C y se cepillan estos, ya puede haber millones de nodos que no va entrar ni uno mas.

Un ejemplo es la red zeronet.io que esta dando que hablar últimamente y supuestamente prometen eso, una red descentralizada y cito textualmente "imposible de apagar", pero seguro que si van a la casa de estos señores y les cierran el chiringito se acabo la fiesta.
Elkri escribió:Un ejemplo es la red zeronet.io que esta dando que hablar últimamente y supuestamente prometen eso, una red descentralizada y cito textualmente "imposible de apagar", pero seguro que si van a la casa de estos señores y les cierran el chiringito se acabo la fiesta.


Es que te están diciendo abiertamente que usan un tracker de bitorrent (diapositiva 7 de la presentación que hospedan en Google):
http://zeronet.readthedocs.io/en/latest ... es-it-work

Es decir, el programa, por lo que cuentan y lo poco que he leído, es un browserTor+bittorrent.

Lo de descentralizado hay que entenderlo en oposición a, por ejemplo, EOL. EOL tiene todo (salvo bootstrap y alguna cosa más) hospedado todo en el mismo servidor, es decir, centralizado. En el caso de las webs en zeronet, no hay un servidor central sino que se distruyen los archivos entre los usuarios. Vamos, muy similar a lo de las actualizaciones automáticas P2P de Windows 10.

Mientras uno tenga copias, y no caigan los trackers, todo va bien.

Vamos, humo.

Ya que veo que hablan de dominios propios (.bit), todo esto lo podríamos asemejar a DNS. Sí, es un sistema descentralizado, pero como caigan los 13 servidores principales (aunque tienen redundancia), adiós muy buenas.
Pero no hay que olvidar que existen sistemas distribuidos (ajustándose estríctamente a esa topología) que sí son permanentes. El inconveniente está básicamente en que no son sistemas abiertos, pero tampoco plantea eso un problema en sus aplicaciones tradicionales.
Yo tengo una pregunta que no me aclaro ¿que similitud hay entre cuando usas el ftp para bajarte un fichero en cualquier pc cliente modo anonimo poniendo la ip en navegador maquina cliente a usar un torrent en un pc cliente para bajar el fichero? ¿trabajan de la misma forma o no?
Replantea la pregunta, deathlord, porque creo que no soy el único que se ha quedado :-? Pon comas, también ;)

Por ejemplo, ¿qué entiendes por "cualquier pc cliente modo anónimo"?

Creo entenderte, pero mejor que lo replantees para estar seguro.
JohnH escribió:Replantea la pregunta, deathlord, porque creo que no soy el único que se ha quedado :-? Pon comas, también ;)

Por ejemplo, ¿qué entiendes por "cualquier pc cliente modo anónimo"?

Creo entenderte, pero mejor que lo replantees para estar seguro.


Supongamos que yo comparto un fichero, en un pc, dicho fichero esta en un directorio compartido, este directorio se puede acceder anonimamente desde un ftp en modo local y externo, al que tu puedes acceder remotamente desde un cliente ftp de forma anónima, no gastamos servidor.


Los torrent veo que cumplen o casi la misma función, los guardas en un archivo el cual los compartes remotamente para que la gente los pueda descargar siendo externa la conexión utilizando por ejemplo utorrent.

La pregunta que yo quería preguntar es ¿es el mismo sistema de conexión?¿es parecido o hay diferencias entre los dos?

Eso es lo que quería decir preguntar yo.
Suponiendo que sólo haya dos pares (un cliente y un servidor) y dejando de lado que uno es UDP y el otro TCP, la conexión en sí es lo mismo. Una petición, una respuesta.

Diferentes porque el protocolo es diferente. Para FTP sólo hay una conexión y para bittorrent o edonkey/emule se pueden bajar diferentes partes de un archivo simultáneamente. Con FTP el archivo es transferido de principio a fin y en clientes P2P "aleatoriamente" sin seguir un orden, que, si mal no me equivoco, se cumple incluso aunque sólo haya dos pares, en función de las opciones como la de bajar primero la primera y la última parte.

Pero, vamos, se sigue negociando qué y cómo se transfiere.

Sólo una cosa más. FTP no es anónimo. Yo creo que te refieres al login cuando no hay restricciones de permisos, que se usa un login anónimo meramente simbólico.
Ok gracias por la aclaracion ya esta todo claro.
14 respuestas