FAQ eD2k-Kademlia-es
Contents
- 1 ¿Qué es ED2K?
- 2 ¿Que es Kademlia?
- 3 ¿Es Kademlia lo mismo que Overnet?
- 4 ¿Qué es un chunk?
- 5 ¿Qué es un hash?
- 6 ¿Por qué después de buscar, algún archivo aparece como diferente fichero en los resultados, a pesar de que tienen el mismo nombre?
- 7 ¿Qué es ID baja e ID alta?
- 8 ¿Que puertos tengo que configurar en un firewall o router para ejecuar aMule?
- 9 ¿Qué hace cada puerto?
- 10 ¿Hay alguna limitación en la red ED2K?
- 11 In search window, what filter stands for which filetype?
- 12 What is a source?
- 13 What is all that credits, rate and score stuff about?
- 14 What is a slot?
¿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 fuents 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 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.
Si ambos usuarios tienen ID alta (ver ¿Qué_es_ID_baja_e_ID_alta?|¿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, 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?|¿Hay limitaciones en la red ED2K? para mas información de por que'Kademlia es necesario.
Como Kademlia es una red descentralizada, desaparece el cuello de botella que se creaba con la necesidad de servidore (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 conecdtado, 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.
Por el momento, lo usuarios "firewalled" no están soportados por la red Kademlia, y por eso no se les dará un ID y no podrán conectarse. El soporte para los usuarios "firewalled" se añadirá más tarde.
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 através de la red.
Actualmente, aMule no soporta Kademlia, pero lo soportará pronto.
¿Es Kademlia lo mismo que Overnet?
Corto, claro y conciso: No. Overnet es la evolución natural sin servidores del programa eDonkey, mientras que Kademlia es la evolucion naturar sin servidores de los clientes *Mule. 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 Kademlia es completamente abierto desde el principio.
¿Qué es un chunk?
En el protocolo ED2K, para prevenir la descarga de archivos corruptos, cada filo es dividido en varias partes, que son conocidas como chunks y cada chunk es hasheado(lee mas abajo para saber que es un ¿Qué_es_un_hash?|¿Qué es un hash?). Cada chunks tiene 9.28MB, asi que un fichero de 15MB se divide en dos chunks (9.28MB + 5.72MB), un fichero de 315KB será un solo chunk y un fichero 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?|¿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 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 los chunks son haseados, si no que también lo es el fichero completo (todos los chunks juntos), asi que cada fichero en la red ED2K tiene un identificador único.
En realidad, Necesitas tanto el hash de un fichero como su tamaño. Esta información está incluida en las direciones ED2K que puedes encontrar en muchos 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?|¿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?|¿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 traes de ellos, así que los grandes servidores se sobrecargaríasn. 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 exepción. Algunos servidores mal configurados o muy ocupados dan ID baja a algunos clientes a pesar de que su puererto 4662 TCP está abierto. Esto es una rara excepción, pero puede pasar a veces.
¿Que puertos tengo que configurar en un firewall o router para ejecuar 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).
¿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 Sercidor 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 4Gb.
In search window, what filter stands for which filetype?
Have in mind that the filters in the search window don't depend on the file type, but on the extensions of the filenames, in the following way:
Archive: .ace .arj .rar .tar.bz2 .tar.gz .zip .Z
Audio: .aac .ape .au .mp2 .mp3 .mp4 .mpc .ogg .wav .wma
CDImage: .bin .ccd .cue .img .iso .nrg .sub
Picture: .bmp .gif .jpeg .jpg .png .tif
Program: .com .exe
Video: .avi .divx .mov .mpeg .mpg .ogg .ram .rm .vivo .vob
So, a movie which's filename is "Birthday.zip" will appear in the Archive filter, but not in the Video filter.
What is a source?
A source is a client which is sharing some chunk in some file you have in your downloading queue which you still have not completed. Obviously, the more sources you can get for a given file, the more possibilities you have to download the file and the quicker you'll download it. Have in mind that there's a difference between "sources" and "available sources" if you're on LowID, since "sources"s stands for clients sharing a chunk or file you still haven't completed, while "available sources" stands for clients sharing a chunk or file you still haven't completed and from who you can download (that is, a sources who is on LowID).
What is all that credits, rate and score stuff about?
All three concepts have to do with the way in which the ED2K network establishes the uploading queues preferences.
The score is the most important value: the client with the higher score will be the next client which you'll provide a slot to. The way in the score value is set is this: score = rate x time_waiting_in_seconds / 100
So, to understand this, we must known what rate is.
Rate is can be understood as an objective preference. This is, the preference which a client is given without caring how much time it's been waiting. When a client is added to the uploading queue, it gets a rate of 100. This value is modified following according to this:
According to the amount of credits, the rate will be multiplied by 1x to 10x.
Depending on the file priority, it will be multiplied by 0.2x to 1.8x (Release 1.8x, High 0.9x, Normal 0.7x, Low 0.6x, Very Low: 0.2x).
Users on specific old clients which load too much the network traffic will get penalized by multiplying their rate by 0.5x.
Banned clients will instantly get no rate (that is, their rate will by multiplied by 0).
This multiplying values are known as "modifiers". Clients with a modifier value strictly bigger than 1 will be marked as yellow in the icon.
So we only have credits left to known. Credits are a prize you get for uploading files to a specific used. Credits are exchanged between two specific clients, they are not global, so your own credits can't be viewed, although you can know the credits any other user has on you (that is, the credits you owe that client). Since credits are managed by the uploading client, you might be uploading to some client with no credits support, so you will gain no credits on him, although that client will actually get credits on you if it uploads to you, since you do have credits support. This credits are stored in clients.met file.
The credits modifier used by rate is the lower between this to:
(upload_total x 2)/download_total or sqrt(upload_total+2) where both upload_total and download_total are measured in MBs.
If the result is lower than 1, then it is set to 1 and if it is bigger than 10, it is set to 10. In addition, if the uploaded total is less than 1MB, the modifier is set to 1 and if the downloaded total is equal to 0, then the modifier is set to 10.
What is a slot?
When uploading files, your upload bandwidth (which may vary depending on the upload limit or the natural connection-type upload limit) will be divided into slots. So, each slot is an amount of KBps which will be assigned to each client who tries to download from you.