FAQ eD2k-Kademlia-es

From AMule Project FAQ
Revision as of 14:10, 3 January 2010 by Punker (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

English | Deutsch | Español | Français | Italiano | Nederlands | Polish | Russian

¿Qué es ED2K?

ED2K es un protocolo usado originalmente por el cliente P2P (Peer-to-Peer) eDonkey2000, que es de donde proviene. Es un cliente basado en la arquitectura cliente-servidor, con la posibilidad de intercambio de fuentes entre clientes.

La red ED2K está basado en servidores no como las redes P2P como Kazaa, lo cual quiere decir que lo primero que tienes que hacer cuando ejecutas aMule es conectarte a un servidor (manual o automáticamente).

Una vez conectado correctamente a un servidor, el cliente puede buscar cualquier fichero, tanto localmente (en el servidor al que está conectado) o globalmente (todos los servidores), y los servidores responderán con una lista de todos los ficheros que concuerden con los parámetros de la búsqueda.

Si el usuario comienza una descarga, el cliente empezará a pedir a los servidores fuentes, que los servidores responderán en forma de direcciones IP de clientes que han dicho al servidor que tienen ese fichero.

Lo que se hace en este momento es pedir un sitio en las colas de todas estas fuentes. Cuando llegas a la primera posición de una de estas colas, el cliente remoto te empieza a dar un chunk lee ¿Qué es todo esto de créditos tasa y puntuación?, y cuando has descargado ese chunk te vuelves a poner en la cola. De esta manera, diferentes chunks están distribuidos por la red ED2K, así que aunque en un momento dado nadie tenga el fichero completo, se podría completar obteniendo diferentes chunks de gente diferente (es bien sabido que la gente tiende a dejar de compartir un fichero una vez que se lo ha descargado).

Fijate que un cliente solo da un chunk a la vez a otro cliente. Aunque un cliente esté en dos colas de subida de diferentes archivos y lleguen al principio de la cola, ese cliente solo dará uno de los archivos a la vez al otro cliente (el otro envio, dependiendo de la aplicación ED2K que use el cliente, probablemente quedará con la máxima prioridad de envio, pero no comenzará hasta que el otro chunk haya sido completamente enviado).

Si ambos usuarios tienen ID alta (ver ¿Qué es ID baja e ID alta?) la transferencia se realizará directamente de cliente a cliente (Peer-to-Peer), pero si uno de los clientes tiene ID baja, la conexión se establecerá a través del servidor, el servidor informará de la posible conexión siendo solo válida la conexión desde un cliente con ID baja al de ID alta, haciendo un simil con el teléfono ID alta viene a representar la capacidad de que te realicen llamadas, ya que un cliente con ID baja no puede aceptar conexiones entrantes. Como resultado, dos clientes con ID baja no pueden conectarse el uno al otro.

¿Que es Kademlia?

Kademlia es la evolución natural de la red ED2K. Kademlia es el futuro. Mira ¿Hay limitaciones en la red ED2K? para mas información de por que'Kademlia es necesario.

Como Kademlia es un protocolo descentralizado, desaparece el cuello de botella que se creaba con la necesidad de servidores (a pesar de que Lugdunum ha hecho un gran trabajo reduciendo este cuello de botella). Ahora, en vez de conectarte a un servidor, te conectas a un cliente (con una dirección IP y puerto conocidos), que soporte la red Kademlia. Esto se llama Boot Strapping.

Una vez conectado, dependiendo de la posibilidad de aceptar conexiones entrantes, se te dará el estado de "abierto" o "firewalled", que es parecido a IDAlta e IDBaja en la red ED2K. En este momento se te da una ID.

Cuando se busca, cada cliente actúa como un pequeño servidor y se le da la responsabilidad de ciertas palabras clave o fuentes. Esto añade compejidad a encontrar fuentes, ya que no tienes un servidor centrar al que preguntar, pero a cambio tendrás tu consulta propagada a través de la red.

Kademlia está soportado desde la versión 2.1.0.

¿Es Kad lo mismo que Overnet?

Corto, claro y conciso: No. Overnet es la evolución natural sin servidores del programa eDonkey, mientras que Kad es la evolucion natural sin servidores de los clientes *Mule. Ambos están basados en el algoritmo original Kademlia pero han sido implementados de diferentes maneras y, en consecuencia, son incompatibles. Aún así, es la misma filosofía, pero diferentes reglas. Para saber como funciona Overnet, ve a http://www.edonkey2000.com/documentation/how_on.html pero ten en cuenta que el desarrollo de Overnet es cerrado hasta que llegue a la versión 1.0, mientras que el de Kad es completamente abierto desde el principio.

¿Qué es un chunk?

En el protocolo ED2K, para prevenir la descarga de archivos corruptos, cada archivo se divide en varias partes, que son conocidas como chunks y se obtiene el hash de cada chunk (lee más abajo para saber que es un ¿Qué es un hash?). Cada chunk tiene 9.28MB, así que, por ejemplo, un archivo de 15MB se divide en dos chunks (9.28MB + 5.72MB), un archivo de 315KB será un solo chunk y un archivo de 100MB se dividirá en 11 chunks (10x9.28MB + 7.2MB).

¿Qué es un hash?

Dividiendo cada archivo en chunks (ver ¿Qué es un chunk?) nos evitamos el bajar un archivo entero incorrecto ya que únicamente tendremos que bajar de nuevo el chunk corrupto, pero se necesita un método para identificar chunks corruptos. Esto se hace usando el algoritmo de hash MD4.

Un MD4 hash es un valor único para cada chunk que es el resultado de una función matematica en cada bit del chunk. Esto significa que modificando un único bit en un chunk el hash resultante será completamente distinto. De este modo se asegura la integridad de cada parte de los archivos a la vez que se descargan.

No solo se obtiene el hash de los chunks, sino que también se obtiene del archivo completo (todos los chunks juntos), así que cada fichero en la red ED2K tiene un identificador único. El hash del archivo no se crea haciendo hash del archivo, sino que se obtiene haciendo el hash de todos los chunks del archivo.

En realidad se necesita tanto el hash del archivo como su tamaño. Esta información está empotrada en las direcciones URL del protocolo ED2k que se ven en multitud de sitios.

Por ejemplo: ed2k://|file|eMule0.42f-Sources.zip|2407949|CC8C3B104AD58678F69858F1F9B736E9|/

Las partes interesantes son la quinta parte, "2407949", que es el tamaño del fichero en bytes y la última parte, "CC8C3B104AD58678F69858F1F9B736E9", que es el propio hash, expresado en notación hexadecimal, de 32 caracteres de longitud.

El nombre de archivo es irrelevante en el procoso de identificar el archivo.

¿Por qué después de buscar, algún archivo aparece como diferente fichero en los resultados, a pesar de que tienen el mismo nombre?

Si has entendido ¿Qué es un hash? entenderás esto rápidamente. Cuando se inicia una búsqueda, el servidor le dice al cliente ED2K el nombre del archivo encontrado y el hash del archivo completo, para cada archivo que concuerde con la búsqueda. Si dos archivos, a pesar de ser el mismo, tienen alguna diferencia en su contenido, no importa si es mayor o menor, el hash es diferente, así que se considera como un archivo diferente. Esta es la razón por la que dos archivos con nombre diferente aparecen como el mismo archivo: en la red ED2K, el nombre no importa, el hash si.

¿Qué es ID baja e ID alta?

A cada cliente se le asigna un número de identificación, un ID, que sea único y que lo distinguirá de cualquier otro cliente en el servidor. Si este ID está por debajo de 16777216 (16 millones) entonces tienes una ID baja. Si está por encima, entonces tienes una ID alta. Que te den una ID baja o una ID alta solo depende de si tienes abierto el puerto 4662 (u otro configurado en las Preferencias). Si has entendido ¿Qué es ED2K? entenderás las oportunidades que tienen los clientes que tienen ID baja, ya que no pueden conectarse a muchos otros clientes (los que tienen ID baja) y a los que si se puede conectar, lo hace a través del servidor, asi que tendrás tasas bajas de descarga. Esto es por lo que el puerto 4662 TCP (o el que hayas configurado en las preferencias) es tan importante. También, algunos servidores defectuosos rechazan clientes con ID baja ya que los clientes con ID baja tienen que transferir a través de ellos, así que los grandes servidores se sobrecargarían.

Para los clientes con ID alta, su ID es el resultado de una operación matemática con su IP que corresponde a A + 256*B + 256*256*C + 256*256*256*D, donde la IP es A.B.C.D. También hay que pensar que este ID es para identificarse, nada más, aparte de tener un ID por encima o por debajo del número 16777216, no importa si el número es mayor o menor. Esto significa que un cliente con una id como 50000000 no es mejor que un cliente con una ID como 49999999. Hay una excepción. Algunos servidores mal configurados o muy ocupados dan ID baja a algunos clientes a pesar de que su puerto 4662 TCP está abierto. Esto es una rara excepción, pero puede pasar a veces.

Para conocer si se tiene abiertos o no los puertos, se puede visitar la página de tests de puertos.

¿Que puertos tengo que configurar en un firewall o router para ejecutar aMule?

No hay que tener abiertos ninguno en concreto para que funcione aMule, pero si para tener una ID alta. Como se ha mencionado arriba, para tener una ID alta, el puerto 4662 TCP (o el que esté configurado en las Preferencias) debe estar escuchando.

A parte de ese puerto, para tener una experiencia óptima con ED2K, deben estar abiertos dos puertos más. El primero el puerto UDP 4672 (que puede ser configurado por otro número en las Preferencias también) y segundo, el puerto secundario UDP que no puede ser configurado en las Preferencias. Este puerto UDP es tu puerto TCP + 3 (por ejemplo: TCP=4662 entonces UDP=4665).

¿Por qué Kademlia todavía dice que está "bajo cortafuegos"?

Si estás usando el Kad y tu router funciona por NAT (Traducción de Dirección de Red), deberías configurar que tu router no remapeara los paquetes salientes del puerto 4672. Esto podría servir de ayuda si tienes ID alta pero el estado del Kad se muestra "bajo cortafuegos". Por otra parte, ten en cuenta que varios ISPs han instalado filtros en el puerto 4662, que dan lugar al ya mencionado estado del "KAD: bajo cortafuegos". Para solucionar esto, sigue estos pasos:

  • Elige un número n tal que: 80 < n < 65530
  • Fija en Preferencias ---> Conexión ---> Puerto TCP estándar del cliente a n
  • "Abre" los tres puertos siguientes(tal y como se explica en las faqs): puerto tcp n (en lugar de 4662), puerto udp n+3 (en lugar de 4665), puerto udp 4672.
  • por último, actualiza la lista de nodos (en Redes ---> Kad), y ten paciencia (5 minutos o así)
  • si todavía no tienes flechas verdes, quizás deberías probar otro n
  • A continuación se muestran una lista de puertos n que funcionaron, por favor añadid: 4811, 9870

¿Qué hace cada puerto?

Bien, como la mayoria pueden ser configurado por otro número, ponemos los que son por defecto:

4662 TCP
Transferencias cliente a cliente.
4672 UDP
Protocolo extendido de eMule, puestos en cola, Ping para Repetición de Archivo
4661 TCP
Abierto en servidores. Permite conectarse al servidor.
4665 UDP
Abierto en servidores. Permite pedir fuentes. Es siempre el mismo que el puerto de conectarse + 3.
4711 TCP
El puerto donde escucha el Servidor Web.
4712 TCP
Puerto para Conexiones Externas. Se usa para comunicar aMule con otras aplicaciones como el Servidor Web o aMuleCMD.

Aunque oficialmente el puerto UDP secundario es el puerto del servidor TCP + 4, algunas (la mayoría?) de las implementaciones lo usan como el puerto TCP del cliente + 3. En cualquier caso, este puerto no se usa mucho (aMule no lo usa y eMule no lo tiene).

¿Hay alguna limitación en la red ED2K?

No muchas, pero si, las hay: dos límites naturales y una limitación "forzada". Los dos límites naturales se han mencionado antes. El primero el problema de los usuarios con ID baja (sus transferencias envian datos a través del servidor y dos clientes con ID baja no pueden compartir entre ellos). La segunda, aunque ED2K es un protocolo p2p, necesita de servidores para establecer las conexiones p2p. Este último esta solucionado en el protocolo Kademlia.

En cuanto a la limitación "forzada", es solo un límite para asegurarse que los clientes compartan y que la red ED2K no desaparezca: los clientes que tienen un limite de subida de X KBps, donde X está entre 0 y 3.99 (ambos incluido) pueden descargar a un máximo de X*3 KBps. Los clientes que tienen un límite de subida de Y KBps, donde Y está entre 4 y 9.99 (ambos incluidos) pueden descargar a un máximo de Y*4 KBps. Los clientes con un límite de subida de 10Kbps o más no tienen límite de descarga. Esta restricción se establece en la aplicación cliente y puede ser eliminada hackeando el código, pero probablemente resulte en que seas baneado en los servidores que te conectes.

También, cualquier cliente está forzado para permitir al menos tres slots de subida, así que no es posible permitir mas que limite_subida/3 KBps por slot.

Hay un límite más: El tamaño máximo del fichero es de 256GB.

Y por parte de los clientes, habitualmente se limita el numero de carácteres de los nombres de archivo a 161.

¿Hay alguna limitación en la red Kademlia?

  • Sólo una. Al tener que mantener compatibilidad con la red ed2k en lo que a identificación única de los archivos se refiere, la limitación de que el tamaño máximo de los archivos sea 256GB también existe en la red Kademlia.
  • Por lo mismo, existe la limitación de 161 carácteres en los nombres de archivo.

En la ventana de Búsqueda, ¿Que filtros hay para cada tipo de archivo?

Ten en cuenta que los filtros de la ventana de Búsqueda no dependen del tipo de archivo, si no de las extensiones de los nombres de archivo, de la siguiente manera:

  • Archivos: .7z .ace .alz .arj .rar .cab .cbz .cbr .bz2 .tar .gz .tgz .zip .z .hqx .lha .lzh .msi .sea .sit .uc2
  • Audio: .669 .aac .aif .aiff .amf .ams .ape .au .dbm .dmf .dsm .far .flac .it .m4a .mdl .med .mid .midi .mka .mod .mol .mp1 .mp2 .mp3 .mpa .mpc .mpp .mtm .nst .ogg .okt .psm .ptm .ra .rmi .s3m .stm .ult .umx .wav .wma .wow .xm
  • Imágenes de CD: .bin .bwa .bwi .bws .bwt .ccd .cue .dmg .dmz .img .iso .mdf .mds .nrg .sub .toast
  • Imágenes: .bmp .dcx .emf .gif .ico .jpeg .jpg .pct .pcx .pic .pict .png .psd .psp .tga .tif .tiff .wmf .xif
  • Programas: .bat .cmd .com .exe, y desde la versión 0.47a, todos aquellos que corresponden al tipo Archivo e Imagen de CD.
  • Vídeos: .3g2 .3gp .3gp2 .3gpp .asf .avi .divx .m1v .m2v .mkv .mov .mp1v .mp2v .mp4 .mpe .mpeg .mpg .mps .mpv .mpv1 .mpv2 .ogm .qt .ram .rm .rmvb .rv .rv9 .swf .ts .vivo .vob .wmv .xvid

Por ello, una película cuyo nombre sea "Cumpleaños.zip" aparecerá en el filtro Archivos, pero no en el filtro Vídeos.

¿Qué es una fuente?

Una fuente es un cliente que está compartiendo algún chunk de algún archivo que tienes en tu cola de descargas y que aún no has completado. Obviamente, cuantas mas fuentes puedas conseguir de un determinado archivo, más posibilidades tendrás de descargar el archivo y más rápidamente lo descargaras. Ten en cuenta que hay diferencias entre "fuentes" y "fuentes disponibles" si tienes ID baja, ya que fuentes serán clientes que comparten un chunk o archivo que aún no has completado mientras que "fuentes disponibles" serán los clientes que comparten un chunk o archivo que aún no has completado y desde los que tu puedes descargar (esto es, una fuente para quien tiene ID alta)

¿Qué es todo esto de créditos, tasa y puntuación?

Estos tres conceptos tienen que ver con cómo la red ED2k establece las preferencias en las colas de subida.

La puntuación es el valor más importante: el cliente con la puntuación más alta será el siguiente al que se le asignará un slot. El valor de la puntuación es: puntuación = tasa x tiempo_esperando_en_segundos / 100 pero para entenderlo tenemos que saber que es la tasa.

La tasa se puede entender como una preferencia objetiva, esto es, la preferencia que se da sin tener en cuenta cuánto tiempo ha estado esperando. Cuando un cliente se añade a la cola de subida, se le da una tasa de 100, este valor se va modificando de acuerdo con lo siguiente:

La cantidad de créditos, la tasa se multiplica de 1x a 10x. Dependiendo de la prioridad del fichero puede multiplicarse de 0.2x a 1.8x (Lanzamiento 1.8x, Alta 0,9x Normal 0.7x, Baja 0,6x, Muy baja 0.2x).

Los usuario de clientes viejos que crean mucho tráfico en la red serán penalizados multiplicando su tasa por 0.5x.

Los usuarios baneados no tendrán tasa (esto es, su tasa se multiplicara por 0). Estos valores multiplicadores son conocidos como "modificadores". Los clientes con una valor modificador mayor que 1 serán cargados con amarillo en el icono.

Así que solo nos falta de saber qué son los créditos. Los créditos son un premio por subir archivos a un cliente. Los créditos se intercambian entre dos clientes y no son globales, así que tu no puedes ver tus propios créditos pero puedes saber cuantos créditos tienen los otros usuarios contigo (esto es, los créditos que debes a esos clientes). Como los créditos son manejados por el cliente que sube, puedes estar subiendo a un cliente que no soporte los créditos, asi que no ganarás créditos con él, pero ese cliente ganará créditos contigo si obtienes algo de él, ya que tú si tienes soporte de créditos. Estos créditos se guardan en el fichero clients.met.

El modificador usado para la tasa es el menor de entre:

(upload_total x 2)/download_total o sqrt(upload_total+2) donde upload_total y download_total están medidos en MiBs.

Si el resultado es menor que 1, entonces se pone a 1 y si es mayor de 10, se pone a 10. Además, si el upload_total es menor que 1MB, el modificador se pone a 1 y si el download_total es 1, el modificador se pone a 10.

¿Qué es un slot?

Cuando estás subiendo archivos, tu ancho de banda (que puede variar dependiendo de los limites de subida o de el límite natural de tu tipo de conexión) se dividirá en slots. Así, cada slot tendrá una cantidad de KBps que será asignada a cada cliente que intente descargar algo de tí. link titlelink title