EMule
# EMule

eMule (pronunciado: /ˈiːmjuːɫ/) es un programa para intercambio de archivos con sistema P2P utilizando las redes eDonkey y Kad, publicado como software libre para sistemas Microsoft Windows. Está escrito en C++.

Creado en un principio como alternativa al programa eDonkey2000, en poco tiempo lo superó en funciones, y sumando el hecho de que era libre y gratuito, entre otros motivos, lograron que en poco tiempo lo superase en popularidad para convertirse en uno de los programas más usados por los usuarios de P2P. Existen también múltiples programas derivados con el objetivo de portarlo a otros sistemas operativos, como lMule, xMule o aMule.

## Historia

El proyecto eMule fue iniciado el 13 de mayo de 2002 por Hendrik Breitkreuz (también conocido como Merkur) que no estaba satisfecho con el cliente original de eDonkey2000. Su nombre es un apócope de electronic mule, en inglés literalmente mula electrónica, haciendo referencia al eDonkey de donde se origina (burro electrónico).

Con el tiempo, siete desarrolladores más se unieron al proyecto. El código fuente se publicó por primera vez como la versión 0.02 en SourceForge el 6 de julio del mismo año. eMule fue lanzado por primera vez como binario el 4 de agosto en la versión 0.05a. El 'sistema de créditos' fue implementado por primera vez el 14 de septiembre en la versión 0.19a. El sitio web del proyecto fue lanzado el 8 de diciembre. Desde ese momento, eMule ha sido descargado alrededor de 300 millones de veces (cifras de mayo de 2007). En 2010 se lanzó la versión 0.50a que fue la última versión estable y que es la que mantienen la mayoría de los usuarios actuales. Sin embargo, el 20 de marzo de 2015 se publicó una beta de la versión 0.50b con cambios menores. Posteriormente se ha publicado en la web oficial una versión 0.51d que está basada en la última versión oficial y contiene funciones adicionales y correcciones de errores hechas por la comunidad.

A mediados de 2006, el proyecto estaba formado por dieciséis personas: dos desarrolladores, dos coordinadores de proyecto (incluyendo al fundador, Breitkreuz), tres testeadores y nueve depuradores. El sitio oficial es mantenido por siete desarrolladores y cuatro moderadores o administradores.

El 29 de julio del 2017 el usuario "fox88" publicó en el foro la versión 0.50b. Cabe destacar que esta version no es un "release" oficial. Y el 26 de agosto del 2023 publicó la ultima versión, 0.70a.

## Información general

La red de eMule se compone por cientos de servidores eMule y millones de clientes eMule. En esta red los clientes tienen que conectarse a uno de los servidores para obtener los servicios de red, esta conexión con el servidor permanecerá abierta mientras el cliente esté en el sistema. Estos servidores realizan un servicio de indexación centralizado y no se comunican con otros servidores.

Los clientes eMule tienen las siguientes características:

* Se pre configuran con una lista de servidores y una lista de archivos compartidos en su sistema local de archivos.
* Usan una conexión TCP a un servidor Emule para registrarse en la red y obtener información sobre los archivos deseados y los clientes disponibles.
* Utiliza cientos de conexiones TCP a otros clientes para subir o descargar archivos.
* Cada uno tiene una cola de subida para cada uno de los archivos compartidos. Para descargar un archivo los clientes se unen a esa cola en su parte inferior y avanzan poco a poco hasta llegar a la parte superior de la cola para descargar el archivo.
* Puede descargar el mismo archivo desde varios clientes de eMule, consiguiendo distintos fragmentos(chunks) de cada uno.
* Puede subir un fragmento de un archivo nada más descargarlo aunque no disponga de todos los demás fragmentos para completar el archivo.

El servidor tiene las siguientes características:

* Utiliza una base de datos interna en la que se almacena información sobre los clientes y los archivos.
* No almacena ningún archivo, actúa como un índice centralizado para almacenar información sobre la ubicación de los archivos.

eMule amplia las capacidades de eDonkey permitiendo a los clientes intercambiar información sobre servidores, otros clientes y archivos. Cliente y el servidor se comunican mediante TCP. eMule emplea UDP para mejorar las capacidades del cliente al servidor y a otros clientes.

### Conexión cliente-servidor

Al iniciar la conexión el cliente se conecta con el servidor eMule, a través de TCP, el cual proporciona al cliente un ID que solo será válido durante el tiempo de conexión entre ambos. La conexión TCP cliente-servidor se mantiene abierta durante toda la sesión del cliente. Una vez que se ha establecido esta conexión:

* El cliente envía al servidor:
   * Su lista de archivos compartidos y el servidor la almacena en su base de datos interna, que tendrá guardadas las de todos sus clientes activos
   * Su lista de archivos a descargar
* El servidor envía al cliente una lista con clientes que tienen los archivos que el cliente que se conecta quiere descargar (son los llamados fuentes).
* El cliente eMule empieza a establecer conexiones con otros clientes.

Después del establecimiento inicial, las conexiones se activan según la actividad del usuario, cada cierto tiempo el cliente envía solicitudes de búsqueda de archivos y recibe los resultados de las mismas. Una transacción de búsqueda suele estar seguida de una consulta de fuentes del archivo que a su vez es respondida con una lista de fuentes de las que se puede descargar (IP y Puerto). Para la comunicación con otros servidores (distintos al que está conectado) el cliente se usa UDP. Con los mensajes UDP se intenta mejorar la búsqueda de archivos y asegurarse que todos los servidores de la lista del cliente son válidos.

### Conexión cliente-cliente

Un cliente eMule se conecta a otro cliente eMule para descargar un archivo. Este archivo se divide en partes que son fragmentadas. Un cliente puede descargar el mismo archivo de varios clientes distintos obteniendo diferentes fragmentos de cada uno de ellos.

Cuando dos clientes se conectan intercambian información de capacidad y posteriormente negocian el inicio de la descarga (o subida, dependiendo desde qué punto se mire). Cada cliente tiene una cola de descarga con una lista de los clientes que están esperando para descargar archivos. Cuando la cola de descargas del cliente está vacía hay más probabilidades de iniciar la descarga. Si no lo está, cuando llega una nueva solicitud de descarga esta se añade al final de la cola. Cuando este llega a la cabeza de la cola de descargas, el cliente que tiene el archivo (fuente) inicia una conexión para enviarle las partes del archivo que necesita. Un cliente puede estar esperando en la cola de varios clientes fuente a la vez, para descargar las mismas partes del archivo. Cuando el cliente finaliza la descarga en uno de ellos no lo notifica a los demás, simplemente rechaza su intento de conexión cuando llega al principio de la cola.

eMule implementa un sistema de créditos para beneficiar a los clientes que suben más archivos, para evitar la suplantación eMule implementa un sistema de clave pública basado en RSA.

La conexión del cliente puede usar un conjunto de mensajes que no están definidos en el protocolo eDonkey, conocidos como protocolo extendido. Se usa para la implementación del sistema de créditos, el intercambio de información general (actualización de las listas de servidores, fuentes) y para mejorar el rendimiento mediante el envío y la recepción de fragmentos de archivos comprimidos. La conexión del cliente eMule usa UDP de forma limitada para comprobar de forma periódica el estado del cliente en la cola de subida de sus peers clientes mientras se está esperando para iniciar la descarga de un archivo.

## Características

* Intercambio directo de archivos entre sus clientes.
* Recuperación rápida de partes corruptas.
* El uso complementario de una red sin servidores, denominada Kademlia, de prometedoras expectativas; además en algunos mods (versiones modificadas) se ha implementado el uso de la opción Webcaché como método extra y de ayuda para descargar archivos (ver eMule MorphXT).
* El hecho de que, al estar licenciado bajo GPL, cualquier usuario puede colaborar y modificarlo libremente, es la razón por la que han proliferado toda una serie de modificaciones (mods) del programa, como eMule MorphXT, Xtreme, Phoenix, Plus o NeoMule. Existen incluso proyectos independientes basados en su código como los clientes eMule para otros sistemas operativos, como aMule, que corre bajo el sistema GNU/Linux y Mac OS X Todo ello contribuye a una continua mejora tanto del programa original, como de sus derivados.
* Usa un sistema de créditos por el cual quien más sube a la red más descarga, si bien puede funcionar también con este sistema desactivado.

Los créditos permiten avanzar más rápido en la cola de espera de un cliente, de forma que se pueda conseguir antes una posición adecuada para descargar. Ya que los créditos se registran de forma descentralizada en cada uno de los usuarios de la red para evitar que sean falsificados, únicamente tendremos créditos en los usuarios a los que le hayamos subido algún archivo (aunque como solo afectan en el avance en la cola de espera, podemos descargar de un usuario al que nunca le hayamos subido un fichero). De cada usuario se descargan partes de un fichero (que puede estar siendo descargado en ese momento de otros usuarios) que se van ensamblando para formar el fichero completo. Esta red P2P resulta especialmente útil cuando los ficheros que se pretenden descargar son de gran tamaño. Otra de las ventajas de esta red es la posibilidad de encontrar archivos muy poco comunes.

* Su amplia implantación, así como su carácter descentralizado lo han hecho el preferido por la mayor parte de los usuarios, dispuestos a “compartir contenidos”. Esas mismas causas son las que han levantado la polémica sobre la necesidad o no de una legislación internacional que vele por la defensa de los derechos de propiedad intelectual y sancione actos que los puedan vulnerar.
* Cuenta con la posibilidad de enviar mensajes a usuarios de la red eDonkey 2000 conectados a las descargas en curso y de un chat IRC en la red MindForge para buscar información sobre lo que interese a los usuarios y recibir soporte en los canales oficiales de ayuda.

### Funciones clave

* Ofuscación del protocolo. Esta función (implementada por primera vez en la versión 0.47b) sirve para evitar que las conexiones del eMule sean detectadas y bloqueadas por los ISP. La Ofuscación de Protocolo es una característica que hace que eMule esconda su protocolo al comunicarse con el servidor u otros clientes. Sin ofuscación, cada comunicación de eMule tiene una estructura predeterminada que puede ser fácilmente reconocida e identificada por un observador. Si se activa esta característica, toda la comunicación de eMule aparenta a primera vista estar compuesta de datos aleatorios y ya no es posible realizar fácilmente una identificación automatizada. Esto ayuda en situaciones en las que mediante identificación de paquetes el protocolo eMule es injustamente discriminado o incluso completamente bloqueado. No hay que confundirla con un modo de proporcionar anonimato o "invisibilidad", ni tampoco tiene que proteger completamente contra observadores con los medios y tiempo suficientes. Además, si el administrador de red tiene una buena razón legal para bloquear eMule (por ejemplo, una red empresarial restringida), saltarse la restricción puede causar otras consecuencias indeseadas.
* Compartir chunks. Los archivos se pueden compartir aunque no estén completamente bajados. Una vez que un usuario tiene una parte de 9500 KB que ha podido ser verificada, eMule la pone a disposición del resto de la red.
* Detección de errores. eMule utiliza algoritmos de detección de errores. De esta manera es casi imposible que se corrompan los archivos que se descargan. El sistema AICH (Advanced Intelligent Corruption Handling) utiliza el método de hashtree para fragmentar en trozos de archivo de 180 KB, disminuyendo muy notablemente la cantidad de datos que hay que volver a bajar para corregir un error de transmisión.
* Transferencias comprimidas. Cada vez que eMule transmite datos, los comprime con la biblioteca zlib para ahorrar ancho de banda, de forma completamente transparente al usuario.
* Independencia de los nombres de archivo. En otros programas, cuando se renombra un archivo, este ya no se considera el mismo. eMule en cambio, permite cambiar los nombres, pues utiliza un sistema que reconoce los archivos por sus contenidos y no por la denominación, por ello puede ser que descargues algo que no corresponda con el nombre. Es posible consultar todos los nombres que se le asignan al mismo archivo.
* Sistema de créditos y colas. Se recompensa a los usuarios que han subido más datos dándoles más prioridad a la hora de progresar dentro de la cola de espera. Los modificadores se calculan con base en la cantidad de datos transferidos entre dos clientes, el cual directamente afecta a la valoración de las peticiones de clientes y su posición en la cola.
* Comentarios para los archivos. eMule permite calificar la calidad de un archivo y escribir comentarios sobre cada archivo haciendo que otros usuarios los puedan leer. Gracias al uso de la red Kad, se pueden buscar comentarios de archivos incluso antes de empezar a descargarlo, pudiendo así saber de antemano si el archivo tiene buena/mala calidad o si está corrupto.
* Significado
* No comentado
* Excelente
* Bueno
* Regular
* Pobre
* No Válido / Corrupto / Fake
* Ficheros de Colección. eMule permite crear ficheros en un formato especial nombrado colección de eMule. Este fichero contiene un conjunto de enlaces de eMule. Es posible bajarlo como un conjunto y guardar toda la colección de ficheros como un conjunto, aunque cada descarga se gestiona independientemente.
* Filtro de direcciones. eMule tiene la posibilidad de prohibir cualquier tipo de acceso por parte de determinadas direcciones IP. La lista de estas direcciones puede ser mantenida automáticamente por eMule. El propósito del filtro de direcciones es impedir la descarga de ficheros falsos (fakes) o filtrar direcciones consideradas non-gratas. El uso del filtro de direcciones no mejora el anonimato en el uso del eMule, ya que es imprescindible que el programa conozca la dirección del cliente con el que realiza una transferencia.
* Previsualizar archivos multimedia. eMule permite la visualización de diversos tipos de archivos, como por ejemplo de audio y vídeo, aunque el archivo no se haya descargado completamente. Desde la web oficial se recomienda el VLC media player, aunque se puede configurar para usar cualquier otro programa.
* Cliente IRC. eMule incluye un cliente para chat en la red IRC oficial MindForge.
* Servidor Web. eMule incluye un servidor web. Una vez activado por el usuario se pueden controlar las funciones básicas de eMule desde cualquier navegador web, desde cualquier lugar del mundo.
* Multilingüe. eMule puede funcionar en muchos idiomas diferentes incluido el castellano. Gracias a la implementación del Unicode, eMule puede funcionar en cualquier idioma, incluidos los idiomas ideográficos, y los de escritura de derecha a izquierda.

eMule ha sido diseñado para funcionar mejor con archivos grandes como imágenes ISO, archivos de vídeo y audio, etc. Se considera que un archivo es grande si ocupa más de 10 MB y pequeño si ocupa menos. Por este motivo es mejor agrupar los ficheros pequeños utilizando programas compresores. Los más usados son WinZip, 7-Zip y WinRar

Hay que tener en cuenta que si se utiliza eMule en una configuración que incluya router se hace necesario abrir los puertos correspondientes para mejorar la conectividad con el resto de nodos.

## Funcionamiento de las redes

Actualmente, eMule dispone de dos redes: la red clásica basada en servidores eD2k y una red descentralizada (Kad) que no hace uso de servidores y está basada en la Kademlia. A continuación se explican los conceptos básicos de funcionamiento, y posteriormente cómo consiguen estos objetivos cada una de las dos redes.

### ID Cliente

El ID del cliente es un identificador de 4 bytes proporcionado por el servidor en el momento en que se establece la conexión. Un ID de cliente es válido durante el tiempo que se mantiene activa la conexión TCP cliente-servidor. Las ID´s de clientes pueden ser altos y bajos.

* Se otorga un ID alto a los clientes que permiten que otros clientes se conecten al puerto TCP de eMule en su máquina (puerto 4662 por omisión). Los ID´s altos son calculados de la siguiente manera: suponiendo que la dirección IP del equipo es X.Y.Z.W el ID será $X+2^8·Y+2^{16}·Z+2^{24}·W.$ Un ID bajo es siempre inferior a 16777216 (0x1000000).Si un cliente tiene un ID alto, todos los servidores le asignarán el mismo ID hasta que el cliente cambie de dirección IP.
* El servidor eMule asigna un ID bajo a los clientes que no pueden aceptar conexiones entrantes. Cuando el servidor no puede abrir una conexión TCP al puerto que emplea eMule en el cliente, recibe una ID baja, esto suele ocurrir cuando el cliente está conectado a un firewall. Un cliente también puede recibir una ID Baja en los siguientes casos:
   * Cuando el cliente se conecta a través de un NAT o servidor proxy.
   * Cuando el servidor está ocupado.

Tener un ID bajo restringe el uso de la red al cliente y el servidor podría llegar a rechazar la conexión con él. Un cliente con un ID bajo no tiene IP pública con la que otros clientes puedan conectarse a él, por lo tanto cualquier comunicación la tienen que hacer a través del servidor de eMule. Un cliente con ID baja no puede conectarse a otro cliente con ID baja si ambos están en servidores distintos, ya que los servidores no se comunican entre sí. Para ayudar a los clientes con ID baja se emplea un mecanismo por el cual el cliente puede pedir a través del servidor conectarse con ID baja y así poder intercambiar archivos.

### ID Usuario

El ID del usuario es de 128 bits (16 bytes) creados por una concatenación de números aleatorios, los bytes 6.º y 15.º no se generan al azar, sus valores siempre son 14 y 111 respectivamente. Mientras el ID del cliente solo es válido durante esa sesión con un servidor específico, el ID de usuario (también conocido con hash de usuario) es único y es empleado para identificar a ese usuario cada vez que se inicia una nueva sesión (el ID de usuario identifica la máquina que se conecta). eMule se apoya en un sistema de crédito para animar a los usuarios a compartir archivos. A mayor cantidad de archivos compartidos a otros clientes, mayor número de créditos se recibe y más rápido se avanza en sus colas de espera.

El ID de usuario juega un papel importante en el sistema de créditos, lo que incita a los hackers a suplantar a otros usuarios para beneficiarse de sus créditos. eMule soporta un esquema de cifrado diseñado para prevenir el fraude y la suplantación de usuarios. La aplicación es un simple intercambio de desafío/respuesta que se basa en el cifrado RSA de clave pública/privada.

### ID de Archivo

eMule no usa el nombre del archivo para identificarlo de forma exclusiva y catalogarlo. Un archivo se identifica mediante un ID único haciendo un hash con el contenido del archivo. Hay dos clases de ID de archivo:

* El primero se utiliza principalmente para generar el ID de archivo único
* El segundo es útil para detectar y recuperar los archivos corruptos.

**Hash de ficheros**

Los archivos se identifican de forma única por un ID de 128 bits calculado por el cliente en base al contenido del archivo. El ID se calcula aplicando el algoritmo MD4 al archivo de datos. Este valor de llama hash de fichero y se encuentra en todos los enlaces eD2k. Este Hash se calcula dividiendo el fichero en partes de 9.28 MB. Para cada una de estas partes se calcula un Hash de Parte usando el mismo algoritmo MD4. Estos Hash de Partes, se denominan conjunto de Hashes (hashset), se utilizan para calcular el Hash de Fichero.

**ICH (Gestión Inteligente de la Corrupción)**

Cuando un cliente que está descargando finaliza la descarga de una parte del archivo, comprueba si los datos que se han descargado coinciden con el Hash de Parte. Si coinciden, esa parte pasa a estar disponible para otros clientes y así ayudar a su distribución. Si no coinciden, se produjo un problema de corrupción y la parte del fichero tiene que volver a ser descargada de nuevo. Para evitar tener que descargar los 9.28 MB, ICH descarga los 180 KB del comienzo de la parte y vuelve a comprobar esa parte para ver si el Hash de Parte es ahora correcto. Si no es así, se descargan los siguientes 180 KB y se vuelve a comprobar esa parte, ese proceso se repite hasta que el Hash de Parte sea correcto. Como media ICH permite evitar descargar de nuevo el 50% de los datos cuando se produce una corrupción en la parte.

**AICH (Sistema Avanzado de Gestión Inteligente de la Corrupción)**

ICH es efectivo, pero tiene algunas limitaciones debido a que solo puede comprobar partes de 9.28 MB. Si un cliente malicioso envía datos corruptos continuamente o incluso falsificar un Hash de Parte, ICH deja de ser efectivo. Debido a esto surge AICH que ayuda a obtener una integridad de los datos completa, además de la reducción de carga ya que los hashes que se calculan ahora son más pequeños. En este caso el punto de partida son las partes de 9.28 MB. Cada una de estas partes se divide en bloques de 180 KB, de tal forma obtenemos 53 bloques por cada parte y para cada bloque se calcula un hash empleando el algoritmo SHA1. Estos hashes se denominan Hash de Bloque. Estos hashes se van a combinar para obtener unos hash parciales, y se siguen combinando hasta llegar a un solo hash que es combinación de todos los demás, que es el que denominamos Hash Raíz. El conjunto de todos los hashes que se han calculado es el Conjunto de Hashes AICH. Cuando eMule detecta una corrupción solicita un paquete de recuperación de un cliente al azar que tenga un conjunto de hashes AICH completo. Este paquete contiene los 53 Hashes de Bloque de la parte corrupta y unos hashes de verificación. Tras recibir los paquetes de recuperación eMule comprueba los Hashes de verificación con su Hash Raíz de confianza. Si coinciden, eMule comprueba los 53 bloques de la parte corrupta con los Hashes de bloque del Paquete de recuperación, el AICH restaura todos los bloques que coincidan con su Hash de Bloque y deja únicamente aquellos bloques corruptos para volver a descargarlos.

* Descarga de datos. Una vez un cliente ha encontrado una fuente para la descarga de un cierto archivo, se pone en contacto para pedir un sitio en su cola de descargas. La fuente reserva un sitio en su cola, que hay que mantener contactando periódicamente con la fuente (se requiere una vez cada media hora). Cuando la posición en la cola llega al primer lugar, la fuente abre una conexión con el cliente para proceder a subir el archivo.

### Sistema de créditos

El sistema de créditos se usa para premiar a los usuarios que contribuyen con la red, por ejemplo, transfiriendo a otros clientes. El estricto sistema de colas de eMule está basado en el tiempo que un usuario ha estado esperando. eMule llama “modificador” al multiplicador que modifica el número que obtiene un cliente en una cola de peticiones. El sistema de créditos aplica el modificador a este tiempo de espera tomando en consideración los datos de lo subido y lo bajado entre los dos clientes. Cuanto más suba un cliente, más rápido avanza en la cola. El modificador se calcula teniendo en cuenta la cantidad de datos transferidos entre los dos clientes. Los valores usados se pueden ver en el diálogo de detalles del cliente. Hay dos modificadores diferentes calculados:

Salvo que Total descargado sea 0, en cuyo caso Ratio1=10

Se comparan los dos ratios calculados y se usa el más bajo como modificador con ciertas condiciones:

* Total subido < 1.000.000 B => Modificador = 1.
* El modificador no puede ser menor que 1 ni mayor que 10.

### Red de servidores

Para conectarse a esta red hay que conocer la dirección IP del servidor. Una vez conectados a un servidor, este puede informarnos de la existencia de otros servidores. Con el fin de mantener actualizada esta lista, los servidores están conectados entre sí. Cuando un nodo se conecta a un servidor le comunica los archivos que quiere compartir. Para buscar un archivo se envía la consulta a uno o más servidores. Cada servidor responde con la lista de archivos de los que dispone. Para conocer las fuentes de un determinado archivo, se le pide esta información a uno o más servidores. Cada servidor responde con una lista de nodos que comparten el archivo solicitado.

La lista de servidores que presenta eMule puede ser actualizada, permitiendo búsquedas más precisas y extensas y encontrar servidores más rápidos, entre otras cosas.

Existen servidores falsos que se dedican a recoger información sobre quién comparte cada archivo. Por este motivo se recomienda obtener las listas de servidores de fuentes fiables. La descarga de una lista de servidores puede hacerse automáticamente.

### Red Kad

La red Kad es una red totalmente descentralizada donde todos los nodos son iguales. Esto facilita que eMule pueda sobrevivir a una posible caída de la red de servidores. Para conectarse a esta red hay que conocer la dirección IP de otro nodo, pero es posible conectarse a partir de los nodos obtenidos de la red de servidores. Cada nodo conoce una pequeña parte de la red, de manera que el tamaño de la red puede crecer tanto como haga falta sin afectar al rendimiento. Cuando un nodo se conecta, almacena los identificadores de los archivos que quiere compartir dentro de otros nodos, escogidos en función del identificador del archivo. Cuando se quiere bajar un archivo, se localizan los nodos que lo indexan y estos nodos devuelven la lista de fuentes para este archivo concreto. La búsqueda por nombre funciona de una manera parecida, guardando el nombre del archivo dentro de otros nodos escogidos en función de cada palabra del nombre. Una búsqueda en Kad se ejecuta siempre en toda la red.

### Comunicación cliente-servidor

**Establecimiento de la conexión**

El cliente puede intentar conectarse de forma paralela a varios servidores, pero cuando establece conexión con uno abandona las demás. Hay varios casos de establecimiento de conexión:

* Conexión de ID alta, el servidor asigna un ID alto al cliente que se conecta.
* Conexión de ID baja, el servidor asigna un ID bajo al cliente que se conecta.
* Rechazo de sesión, el servidor rechaza al cliente.
* También está el caso en el que el servidor esta caído o es inaccesible.

En la siguiente figura se describe la secuencia de mensajes que se produce en una conexión de ID alta. El cliente establece una conexión TCP con el servidor y a continuación envía el mensaje de login al servidor.

El servidor se conecta al cliente a través de otra conexión TCP y realiza un establecimiento de conexión de cliente-cliente para asegurarse de que ese cliente tiene la capacidad de aceptar a otros clientes de eMule. Tras finalizar el establecimiento del cliente, el servidor cierra la segunda conexión y completa el establecimiento de conexión cliente-servidor, enviando el mensaje de cambio de ID.La siguiente figura describe la secuencia de mensaje que produce una conexión de ID baja.

En caso de que la conexión tenga una ID Baja el servidor no puede conectarse al cliente y le asigna una ID baja. El servidor le suele responder con un mensaje de advertencia, para indicarle que se le asigna una ID baja y que revise la configuración de red.

Ambos establecimientos, con ID´s altas o bajas, se completan con el mensaje de cambio de ID que le asigna al cliente una ID de cliente para su sesión con el servidor. La figura que se muestra a continuación sería la de una sesión rechazada.

Los servidores pueden rechazar sesiones si el cliente tiene ID bajo o si se llega a su límite de capacidad. El mensaje del servidor contendrá una pequeña descripción con el motivo del rechazo.

**Intercambio de mensajes de inicio de conexión**

Después de establecer una conexión con éxito, cliente y servidor intercambian varios mensajes de configuración. Con estos mensajes se informa a ambas partes sobre el estado de sus peers. El cliente empieza ofreciendo al servidor su lista de archivos compartidos, y luego pide para actualizar su lista de servidores. El servidor envía su estado y su versión y luego envía su lista de servidores eMule conocidos.

Por último, el cliente solicita fuentes (otros clientes a los que pueda acceder para descargar los archivos que hay en su lista de descargas) y el servidor responde con una serie de mensajes, uno por cada archivo que hay en la lista de descargas del cliente, hasta que toda la lista de fuentes se ha descargado en el cliente. En la figura siguiente se muestra este proceso.

**Búsqueda de archivos**

El usuario inicia la búsqueda de archivos. Se envía al servidor una solicitud de búsqueda a la que se responde con un resultado de búsqueda. Cuando hay muchos resultados, los resultados son comprimidos.

A continuación, el usuario elige descargar uno o varios archivos, el cliente solicita fuentes para los archivos elegidos y el servidor contesta con una lista de fuentes por cada uno de los archivos solicitados.

Opcionalmente se puede enviar un mensaje con el estado del servidor, indicando el número de usuarios y los archivos soportados por el servidor.

Hay una secuencia complementaria de mensaje UDP que mejora la capacidad del cliente para localizar las fuentes de su lista de fuentes. El orden en que se contacta con las fuentes es el mismo en el que son recibidas por el cliente.

El cliente eMule se conecta a las fuentes por el orden en que se han añadido a su lista, no hay ningún mecanismo de prioridades. La figura muestra la secuencia.

Hay unos mecanismos complejos que resuelven la situación cuando la misma fuente tiene varios archivos de los que hay en la lista. El algoritmo de selección se basa en la especificación de prioridad del usuario y en caso de omisión por orden alfabético.Una búsqueda realizada con precisión es mejor, ya que las búsquedas generales suponen una considerable carga para los servidores. Por este motivo, eMule solo busca un máximo de doscientos uno resultados de cualquier búsqueda, o trescientos si el servidor y nuestra versión soportan compresión gzip.

eMule nos permite utilizar diferentes opciones de búsqueda, tales como el tamaño máximo o mínimo, los tipos de archivo, etc. Una de las opciones que podemos seleccionar es el método de búsqueda, es decir, la manera que eMule utilizará para hacer las búsquedas. Hay cinco métodos:

* Automático. Determina automáticamente el tipo de búsqueda (Servidor o red Kad) de acuerdo a la conexión del servidor al que se esté conectado.
* Servidor. Solo se buscará en el servidor dónde el cliente está actualmente conectado.
* Global (Servidor). Se pregunta a todos los servidores de la lista, pero a cada uno individualmente.
* Kad. Se busca en toda la red Kad. Con este método no se buscará en la red eDonkey. Los resultados pueden tardar un rato. Si una expresión de búsqueda popular no devuelve resultados, entonces es posible que el puerto UDP esté bloqueado por un cortafuegos o un enrutador.
* Filedonkey. Motor de búsqueda basado en web (ya no existe).

Existen páginas web con enlaces en el formato ed2k:// (comúnmente llamados elinks). Al apretar el botón del ratón sobre uno de estos enlaces, se añade automáticamente la descarga a eMule.

**Mecanismo de devolución de llamada**

Este mecanismo está diseñado para superar la incapacidad de los clientes con ID baja, aceptar conexiones entrantes y compartir sus archivos con otros clientes.

En caso de que los clientes A y B estén conectados al mismo servidor eMule y A necesite un archivo que esté situado en B. Si B tiene un ID bajo, A podrá enviar al servidor una solicitud de devolución de llamada, solicitándole que le pida a B que le devuelva la llamada. El servidor, que ya cuenta con una conexión TCP abierta con B, envía un mensaje de solicitud de devolución de llamada, que le proporcione IP y puerto de A. B puede conectar con A y enviarle el archivo sin más sobrecarga en el servidor.

Solamente un cliente con una ID alta podrá solicitar a clientes con ID baja la petición de devolver llamada. La siguiente figura muestra el intercambio de mensajes.

También hay una opción que permite a dos clientes con ID baja priorizar el intercambio de archivos a través de su conexión con el servidor, utilizando el servidor como un relé. La mayoría de los servidores no admiten esta opción debido a la sobrecarga que incurre en él.

**Información de estado y si se mantiene vivo el servidor**

El cliente verifica periódicamente el estado de los servidores que tiene en su lista. Dicha verificación se hace usando mensajes de solicitud UDP de estado de servidor y de descripción del servidor.

Cuando se comprueba el estado de un servidor, el cliente envía primero un mensaje de solicitud de estado del servidor y solo una vez de cada 2, envía un mensaje de solicitud de descripción, como se muestra en la figura.

Cuando el cliente no recibe una respuesta correcta incrementa un contador, al llegar a un límite (configurable), el servidor se considera como muerto y el cliente lo borra de su lista de servidores.

Las respuestas con el estado del servidor incluyen el número actual de usuarios y archivos en el servidor y también los límites suaves y duros.

La respuesta de descripción de servidor incluye el nombre del servidor y una descripción, como podemos apreciar en la figura.

**Búsqueda de archivos fuente mejorada**

Cuando el número de fuentes que el cliente tiene, para un archivo, en su lista de descargas, es menor que un límite configurable (100), el cliente envía paquete UDP a los servidores de su lista para encontrar más fuentes para el archivo.

### Comunicación cliente-cliente

**Establecimiento inicial**

El establecimiento inicial es simétrico, es decir, ambas partes envían la misma información a la otra. Los clientes intercambian información sobre el otro, incluyendo la identificación, la versión y la información de capacidades. Intervienen dos tipos de mensajes:

* Mensaje Hello
* Mensaje the eMule info.

**Identificación de usuario seguro**

La identificación de usuario seguro es parte de la extensión de eMule. El propósito de la identificación segura es evitar la suplantación de usuarios. Para aplicar una identificación segura hay que realizar los siguientes pasos:

* En el establecimiento inicial, B indica que soporta y quiere usar identificación segura.
* A reacciona enviando el mensaje de identificación segura, que indica si necesita la clave pública de B o no, también contiene un desafío de 4 bytes para ser firmado por B.
* En el caso de que A indicara que necesita la clave pública de B, entonces B envía su clave pública para A.
* B envía un mensaje firmado que se crea utilizando el desafío enviado y otro con la dirección IP de A (si el cliente tiene ID baja), o junto a la ID de B en el caso de tener una ID alta.

**Solicitando archivos**

Se crea una conexión independiente para cada par [cliente-archivo]. Inmediatamente después del establecimiento de la conexión, el cliente envía varios mensajes de consulta en relación con el archivo que quiere descargar. Un escenario típico es el mostrado a continuación.

**Solicitando archivos**

**Intercambio básico de mensajes**

El intercambio básico de mensajes está compuesto de cuatro mensajes:

* A envía un mensaje de solicitud de archivo.
* Inmediatamente después envía un mensaje de petición de ID de archivo.
* B responde a la solicitud de archivo con una solicitud de respuesta de archivo.
* Y al mensaje ID de archivo solicitado, con un mensaje de estado de archivo.

**Solicitando archivos**

**Escenario de archivo no encontrado**

Cuando A solicita un archivo de B, pero B no tiene este archivo en la lista de archivos compartidos. B salta el mensaje de respuesta de solicitud de archivo y envía un mensaje file not found, inmediatamente después del mensaje de solicitud de ID de archivo.

**Solicitando archivos**

**Dar de alta en la cola de subida**

En el caso en que B tenga el archivo solicitado pero su cola de subida no está vacía, lo que significa que hay clientes descargando archivos y también probablemente clientes en la cola de subida, A y B realizan el establecimiento completo descrito en la figura 4.3 pero cuando A solicita a B que comience a subir el archivo, B añade a A en su cola de subida y le responde con un mensaje de queue ranking, que contiene la posición de A en la cola de subida de B.

**Solicitando archivos**

**Gestión de colas de subida**

Para cada archivo subido el cliente mantiene una cola de prioridad de subida. La prioridad de cada cliente en la cola se calcula sobre la base de tiempo del cliente en la cola y un modificador de prioridad. En la cabeza de la cola se sitúan los clientes que tienen una puntuación más alta. La puntuación se calcula con la siguiente expresión: puntuación = (tiempo en la posición de la cola)/100 o 1 en el caso de que el cliente que quiere descargar sea definido como amigo. El valor inicial es 100 excepto para los usuarios que están baneados los cuales reciben un 0. La puntuación puede ser modificada también por el crédito de descarga que dispone el cliente (1-10) o por la prioridad de subida del archivo (0.2-1.8) que es fijada por el cliente que sube el archivo. Cuando la puntuación de un cliente es mayor que la del resto de los clientes que están en la cola, el cliente comienza la descarga del archivo. Un cliente continuará descargando un archivo hasta que se produzca una de las siguientes condiciones:

* El usuario dejó de subir.
* La descarga del cliente tiene todos los pedazos que necesita para el archivo,
* El cliente que está descargando es adelantado por otro cliente que tiene una prioridad mayor que la de él.

Con el fin de permitir a un cliente que acaba de comenzar la descarga pueda obtener unos cuantos megabytes de datos antes de ser adelantado por otro cliente como mayor prioridad, eMule aumenta la puntuación inicial a 200 durante los primeros 15 minutos de descarga.

**Solicitando archivos**

**Llegar a la parte superior de la cola de subida**

Cuando A alcanza la parte superior de la cola de subida de B, B se conecta a A, lleva a cabo el establecimiento y luego envía un mensaje de accept upload request. A puede ahora cualquiera y descargar el archivo mediante el envío de un mensaje de request parts o de cancel (en el caso de conseguir esa parte de otra fuente) enviando un mensaje de cancel transfer. En la figura muestra esta opción.

**Transferencia de datos**

**Paquete de datos**

El envío y recepción de partes de archivos es la parte más importante de la actividad de la red de eMule. El tamaño de una parte del archivo puede variar entre 5000 y 15000 bytes (dependiendo de la compresión). Con el fin de evitar fragmentación, una parte de mensaje se envía en piezas, cada pieza en un paquete separado TCP. El primer paquete contiene el envío de la parte del archivo y el encabezado del mensaje. El resto de los paquetes contienen solo datos.

**Transferencia de datos**

**Secuencia de transferencia de datos**

La secuencia de transferencia de una parte puede comenzar inmediatamente después de una respuesta a file request. El cliente A envía un mensaje de start upload request que es contestado con un mensaje accept upload request. Inmediatamente después A comienza a pedir partes del archivo y B responde enviando las partes solicitadas. Ambos clientes soportan el protocolo extendido mediante el cual las partes pueden ser enviadas comprimidas.

**Transferencia de datos**

**Seleccionar una parte para descargar**

eMule escoge selectivamente el orden de descarga de las partes con el fin de maximizar el rendimiento y la compartición en la red. Cada archivo es dividido en partes de 9.28 megabytes y cada una de estas partes es dividida en bloques de 180 KB. El orden en el que cada parte se descarga es determinada por el cliente que descarga el cual envía el mensaje request file parts. El cliente que está descargando puede descargar una única parte de cada fuente en un momento dado, y todos los bloques que se solicitan de la misma fuente pertenecen a la misma parte del archivo. Se aplican los siguientes principios en el orden indicado para el proceso de descarga de una parte:

* Frecuencia de las parte (disponibilidad), las partes muy raras se deben de descargar lo más rápido posible para así poder convertirse este cliente en una nueva fuente disponible.
* Las partes utilizadas para la vista previa (primera + última parte), o también para comprobar un archivo (una película, mp3).
* Solicitud de estado (descarga en proceso), intenta preguntar a cada fuente por otra parte.
* Finalización, partes parcialmente recuperadas deben ser completadas antes de empezar a descargar otra.

La frecuencia de una parte se puede clasificar en 3 rangos: muy raro, raro y común. Dentro de cada rango hay un peso específico, el cual se usa para calcular la clasificación parcial. Las partes con menor rango son descargadas primero. Este algoritmo generalmente selecciona primero las partes más raras. Sin embargo, las partes parcialmente completas que están cerca de completarse también pueden ser seleccionadas. Para las partes comunes, las descargas se distribuyen entre las diferentes fuentes.

**Visualización de archivos y carpetas compartidas**

Hay dos tipos de flujos de mensajes. El primero es el mensaje view shared files, el cual es enviado inmediatamente después del establecimiento inicial. Este mensaje es siempre respondido con un view shared files answer. Cuando el cliente que responde quiere ocultar sus archivos compartidos, el mensaje shared file list answer no tendrá ningún archivo. El segundo flujo de mensajes se inicia con una solicitud para ver la lista de carpetas compartidas, las cuales fueron enviadas en shared folder list, por cada carpeta de la lista se envía un view shared folder content. Cada uno de estos mensajes es respondido con un content list. En el caso de que el cliente receptor esté configurado para bloquear las solicitudes de compartir archivos/carpetas, este responde con un mensaje de view shared denied.

**Intercambio Hashset**

Con el fin de obtener hashes de partes se envía una solicitud Hashset, esta solicitud es respondida con un hashset reply la cual contiene un conjunto de hashes para cada parte en el archivo.

**Obtener vista previa de una archivo**

Los clientes pueden pedir a sus peer obtener una vista previa del archivo descargado. La vista previa depende de la aplicación y es distinta dependiendo del tipo de archivos, y contiene únicamente dos mensajes: preview request y preview answer.

## Emule comparada con otras redes p2p

Una de las principales ventajas de emule es su gran base de usuarios actualmente de cinco a diez millones, que le hace excelente para encontrar toda clase de contenido. Se dice que es la más completa aplicación del protocolo eD2k y sus extensiones. Emule emplea AICH, por lo que su manejo de la corrupción de archivos es equiparable a BitTorrent. eMule también emplea intercambios de fuentes, lo que le permite reducir sustancialmente la carga en los servidores y en Kad.

## Fakes (falsificaciones o archivos falsos)

Son archivos descargados mediante este u otros programas cuyos títulos no corresponden con sus contenidos. Algunos usuarios cambian el nombre de los archivos que comparten para descargar contenido para adultos en ordenadores compartidos de una manera no explícita, confundir a los que los descargan con motivo de burla o porque quieren sabotear la descarga de ciertos contenidos. Otras falsificaciones más graves son las que algunos usuarios usan para infectar otros ordenadores, cambiándole el nombre a algunos virus por el de otros programas. Las falsificaciones (fakes en inglés) consistentes en cambiar el nombre a archivos de audio y documentos de texto o eBooks son menos comunes.

Emule proporciona varios métodos para prevenir y combatir las falsificaciones. Existe la posibilidad de descargar primero la primera y la última parte de los archivos de vídeo, lo que permite su previsualización y por tanto detectar un fraude antes de descargar completamente el archivo. También se puede examinar todos los nombres de todas las fuentes de un mismo archivo antes de descargarlo, si fueran muy diferentes (por ejemplo, una fuente "National Geographic" y las demás "Hot Lads") posiblemente se trate de una falsificación. Revisar los comentarios de un archivo también permite ver si otro usuario de emule lo ha denunciado como una suplantación previamente. Finalmente, comparar entre los diferentes ficheros encontrados en la lista de búsqueda nos puede alertar si alguno de ellos tiene un tamaño o duración claramente diferente a los demás.

Además de los fakes existen ficheros nocivos especialmente diseñados para atraer incautos a páginas web o instalar software malicioso en los ordenadores. Dichos programas suelen ser fáciles de distinguir por tres características:

* Son ficheros tipo ZIP, RAR o EXE.
* Suelen ocupar menos de 10 MiB (en realidad suelen ser enlaces a páginas web o pequeños programas),
* Tienen más de 300 fuentes (y un porcentaje de clientes con él completado del 100%) y se descargan asombrosamente rápido.

Una fórmula fácil para detectar estos programas es escribir en la caja de búsquedas WRrwrkmcnmcdls00 o cualquier otra palabra trivial sin sentido. Todos los resultados de la búsqueda serán este tipo de ficheros maliciosos, solo hay que seleccionarlos todos y marcarlos como spam (ficheros no deseados).

## Malas prácticas compartiendo ficheros

eMule no es el programa más rápido en descargar un fichero dado, pero sí muy eficiente gestionando múltiples descargas aunque sean grandes. Para evitar tiempos de espera demasiado grandes es mucho más cómodo compartir, por ejemplo, un álbum comprimido (típicamente extensiones ZIP o RAR) que no una docena de archivos de audio individualmente. El tiempo de la descarga de datos será el mismo pero el tiempo de espera será doce veces menor ya que es el mismo para un archivo grande que pequeño.

Para ahorrar tiempos de espera grandes es bueno disponer de un fichero con muchas fuentes (muchas copias idénticas en la red eD2K por ejemplo). Por eso es importante compartir copias exactas de los ficheros descargados, y no copias ligeramente modificadas. Un ejemplo son los ficheros que contienen metadatos (como los ficheros mp3 en los que uno puede editar el nombre del autor, álbum o año de edición. Alterar estos datos es alterar el fichero).

El máximo número de descargas que un usuario puede tener activas simultáneamente depende de la capacidad en general de su computadora, pero uno de los factores limitantes más habituales es el espacio libre en la unidad de disco en la que se almacenan tanto los ficheros temporales como los ficheros descargados. No es una mala idea tener la carpeta de salida en una unidad externa (Disco duro externo, memoria USB) o incluso tener una partición de disco dedicada a almacenar los ficheros temporales.

Las opciones para comentar los ficheros descargados deberían usarse para calificar la calidad del archivo en cuanto a su nivel de compresión, calidad de imagen y sonido, calidad de un escaneado, integración de subtítulos o características destacables. Nuestra opinión de si una película o canción es buena o mala no es relevante, porque si alguien desea descargar el fichero se supone que será de su agrado.

## Mods del eMule

El hecho de que eMule sea un programa de código abierto ha favorecido la creación de programas derivados de la modificación del código del eMule original (mods). Estas versiones modificadas, sin perder la compatibilidad con el eMule original, añaden funcionalidades ausentes en este, le dan un nuevo aspecto o lo adaptan a usos concretos o a las necesidades de ciertos usuarios. El desarrollo de algunas de estas variantes corre parejo al del eMule original, de manera que el equipo que mantiene cada mod suele mantener actualizado su programa basándose en las últimas versiones publicadas del eMule. Otros mods, sin embargo, se han ido desarrollando de manera totalmente independiente del eMule original. Algunas de las mejoras y funciones desarrolladas originalmente en estos mods se han incorporado posteriormente en la versión original del programa.

Algunos de los mods de eMule más populares son:

* eMule Plus
* eMule MorphXT
* eMule ScarAngel
* Stullemule
* Dreamule

El concepto de mod no debe confundirse con el de cliente. Un programa cliente del eMule, o mejor dicho de la red eDonkey 2000, es cualquier programa capaz de compartir archivos cumpliendo con los protocolos de dicha red, esté basado en el código del eMule o no.

## Falsos mods, malware y usurpación del nombre

Dado que el eMule es fácilmente modificable debido a su código abierto de libre acceso, en numerosos casos se ha explotado esta particularidad para crear programas que incluyen limitaciones o perjuicios para el usuario, como publicidad (adware), búsquedas restringidas y con frecuencia diversos tipos de malware y spyware. Algunos sitios web solicitan un pago por la descarga del programa, siendo el eMule original totalmente libre y gratuito.

Diversas páginas en internet que ofertan estos falsos programas se muestran como legítimas e incluso imitan la apariencia del sitio de eMule original e incluyen su nombre en su dirección, siendo tal vez la más notoria de estas páginas falsas emule.com, pero también emule.es y otras con nombre similar.

