La idea detrás de este tipo de aplicaciones es tener una aplicación ejecutándose a la vez en dos terminales que se comunican a través de la red. Ejm.: Navegadores, Juegos online, etc.
🔌
Arquitectura de la aplicación
Se distinguen dos tipos principales de arquitecturas, dependiendo de cómo es la infraestructura que hay detrás una una conexión por la red:
Cliente-Servidor
Un host (cliente) se conecta a otro host (servidor). El servidor tiene una dirección conocida dado que está dando un servicio, por lo que recibirá conexiones de múltiples clientes.
Peer-To-Peer (P2P)
En esta red, todos los hosts son a la vez cliente y servidor. Esta es una red descentralizada.
Actualmente se dice que la arquitectura de este tipo de redes es híbrida ya que para poder obtener la dirección de algún punto de entrada de esta red, hace falta conectarse a algún tipo de servidor web.
Arquitectura Cliente-Servidor
📖
Un host (cliente) se conecta a otro host (servidor). El servidor tiene una dirección conocida dado que está dando un servicio, por lo que recibirá conexiones de múltiples clientes.
Características
Siempre existe un host activo denominado servidor.
El servidor da servicio a muchos otros hosts a la vez denominados clientes.
Los clientes puede estar activos o no.
Los clientes no se comunican entre sí.
Los servidores tienen una IP conocida.
📈
Si un servicio se vuelve muy popular, un único servidor no será capaz de getionar todas las conexiones. En estos casos se suelen usar varios ordenadores que procesan en conjunto la información como si fueran uno solo. A este conjunto de PCs se le denomina cluster.
Los edificios dedicados al procesamiento masivo de datos se les llama centros de datos.
📈
Velocidad en un esquema Cliente-Servidor (C-S)
Arquitectura Peer To Peer (P2P)
📖
En esta red, todos los hosts son a la vez cliente y servidor. Esta es una red descentralizada.
Actualmente, se dice que la arquitectura de este tipo de redes es híbrida ya que para poder obtener la dirección de algún punto de entra de esta red, hace falta conectarse a algún tipo de servidor web
En este tipo de redes, los clientes son denominados pares.
Características
No depende de servidores que deban estar activos.
La comunicación es directa entre pares.
Los pares deciden cuándo están activos, y que información comparten.
Los pares no son propiedad del proveedor del servicio.
📈
La arquitectura P2P es autoescalable, cuando un par genera trabajo (solicita recursos), también añade capacidad al sistema (proporciona sus recursos).
📈
Velocidad P2P
📊
Velocidad comparada con C-S
Podemos observar que a medida el servicio se hace más popular, y existen más conexiones al servicio, la arquitectura P2P llega a un punto en el que no mejora su velocidad.
Sin embargo, en las arquitecturas C-S, la velocidad incrementa de forma constante.
Tipos de Arquitecturas P2P
🏛️
Según la pureza del protocolo
Centralizadas
Estas redes dependen de un equipo servidor central que las administra. Ejm.: Napster, BitTorrent, etc.
Descentralizadas
No dependen de ningún equipo central, cada nodo continene información que se comparte al resto. Ejm.: TOR, eDonkey, Gnutella, etc.
👬
Según la paridad de los nodos
Estructuradas
No todos los nodos son iguales en la red, hay nodos más importantes que otros.
Desestructuradas
Las conexiones y la estructura general es arbitraria. Todos los nodos son igual de importantes.
🔴
Desventajas
El ancho de banda es asimétrico.
La seguridad de los archivos no está garantizada.
Necesitas incentivar a los usuarios a que cedan parte de su almacenamiento, capacidad de computo y ancho de banda.
🏷️
Índice para localizar recursos
Una de las dificultades en una red P2P es averiguar donde está un recurso. Para resolver este problema se suelen utilizar bases de datos compuestas por registros clave-valor.
La clave es un identificador del recurso.
El valor es la dirección del par que proporciona ese recurso.
Esta tabla debería estar distribuida por toda la red, pero no es viable. Por ello se plantea:
Repartir las entradas clave-valor aleatoriamente
Como cada usuario conoce la IP del resto, cuando este necesita un recurso, hace una petición a todos ellos y estos le responden si tienen el recurso en su tabla o no.
🔴 Deventajas de esta solución
Mantener y actualizar constantemente la lista de pares (usuarios) es muy costoso así como hacer peticiones a todos constantemente.
🗄️
Distributed Hash Table (DHT)
Este método consiste en convertir cada recurso en un número a través de una serie de cálculos, a continuación a cada miembro de la red se le asigna un número.
Con este método, cuando busquemos un recurso, solo tendremos que calcular su hash y ya sabremos a que usuario pedir el recurso.
Si un recurso nos da un ID de un par que no está conectado, almacenaremos el recurso en el par inmediatemente superior (sucesor).
🗺️
Existen diferentes topologías para una red DHT:
DHT Circular
Cada par solo controla su inmediato predecesor y sucesor.
DHT Circular con atajos
Cada par solo controla su inmediato predecesor, sucesor y otros pares aleatorios.
📤
Abandono de nodos
Cada par periodicamente envía un ping a los nodos cercanos para determinar si siguen conectados.
Comunicación entre procesos
ℹ️
Podemos entender un proceso, como un programa en ejecución.
La comunicación entre procesos del mismo host se hace a través del protocolo IPC del SO.
La comunicación entre procesos de diferente host se hace a través de sockets de red.
Programación con sockets
📖
Un socket es la interfaz entre la capa de aplicación y la capa de transporte.
ℹ️
El protocolo define…
Tipo de mensaje intercambiado.
Sintaxis del mensaje.
Semántica del mensaje.
Reglas de cuándo y cómo un proceso envía mensajes y responde a los mismos.
🆓
Protocolos de dominio público
Definidos en RFCs.
Permiten interoperabilidad.
Ejm.: HTTP (RFC2616), SMTP (RFC5321), etc.
🔒
Protocolos propietarios
Ejm.: Skype, Spotify, ppstream, etc.
‼️
Requsitos de las aplicaciones red
Transferencia fiable.
Temporización (Timing).
Tasa de transferencia.
Seguridad.
TCP
📖
El protocolo Transmission Control Protocol (TCP) es uno de los principales protocolos de internet.
Este protocolo se basa principalmente en un transporte fiable de los recursos.
UDP
📖
El protocolo User Datagram Protocol (UDP) es otro de los principales protocolos de internet.
Este protocolo está orientado a conexiones donde la velocidad es lo importante.
Programación con sockets
🔌
Un socket es una Interfaz por la que se pueden enviar o recibir mensajes de un proceso a otro proceso.
🏷️
Un socket se identifica con la IP y un puerto.
💡
Para establecer una conexión basada en sockets, primero se debe crear el socket del servidor, y luego, el cliente crea su socket con el que se conectará al socket del servidor.
Podemos crear sockets TCP o UDP dependiendo de las necesidades de nuestra conexión
Protocolo de la capa de aplicación que sigue un modelo cliente/servidor sin memoria de estado.
HTTP no especifica cómo se muestra lo enviado al cliente.
Los diferentes navegadores pueden presentarlo de maneras diversas.
Utiliza TCP para conectar clientes y servidores
El cliente crea el socket TCP con el servidor.
El servidor acepta la conexión TCP solicitada por el cliente.
Mensajes HTTP: Intercambio de mensajes entre el cliente y el servidor.
Se cierra la conexión TCP.
💡
HTTP no tiene memoria, no mantienen información de las peticiones antiguas del cliente.
Tipos de conexiones HTTP :
No persistentes
Cada conexión TCP transporta un mensaje de solicitud y uno de respuesta.
Se envía un objeto por cada conexión TCP.
💡
Round-Trip Time (RTT)
Tiempo que tarda un paquete en ir desde el cliente hasta el servidor, y volver con una respuesta. Si la respuesta toma varios paquetes, se cuenta solo desde que sale la petición hasta que llega la primera respuesta
💡
Cálculo del tiempo de respuesta
Este se suele medir en terminos de un factor de k×RTT+dtrasn(f) siendo este el tiempo que tarda en llegar la respuesta completa
Persistentes
Se pueden enviar varios objetos en una sola conexión (pipeline). El servidor solo cerrará la conexión tras un cierto tiempo de inactividad
📨
Métodos HTTP
HTTP 1.0 (1996)
GET → El cliente solicita un recurso al servidor, pero el cliente no proporciona ningún recurso al servidor
POST → El cliente envía un recurso propio al servidor
HEAD → Similar a GET pero el servidor no enviará el recurso, solo los headers del mensaje HTTP. Se suele usar para depurar
HTTP 1.1 (1997)
PUT → Permite al usuario cargar un recurso en una ruta específica
DELETE → Permite al usuario borrar algún recurso
HTTP 2.0 (2015)
La principal característica es que implementa un sistema de cifrado (HTTPS)
Emplea solo una conexión TCP
Mensajes en binario y de longitud fija
Permite multiplexar y priorizar mensajes
Sobre TLS (Transport Layer Security)
Separa los mensajes de control y datos
Compresión de cabeceras
HTTP 3.0 (2019)
Esta versión se caracteriza por usar conexiones UDP mediante QUIC.
📤
Formato de los mensajes HTTP de solicitud
La primera línea es la línea de solicitud la cual contiene el método, la URL del recurso y la versión de HTTP que vamos a usar
A continuación las líneas de cabecera, estas son n líneas conteniendo pares clave-valor (separados por :) con las cabeceras de la solicitud.
Finalmente dejamos una línea vacía
Dependiendo del método, podremos añadir contenido adicional (body)
GET
Ejemplo
GET
📥
Formato de los mensajes de respuesta
La primera línea es la línea de estado la cual contiene la versión de HTTP y el código de estado de la solicitud
A continuación las líneas de cabecera, estas son n líneas conteniendo pares clave-valor (separados por :) con las cabeceras de la solicitud.
Finalmente dejamos una línea vacía
El contenido (body) de la solicitud, siendo este normalmente el recurso solicitado si la solicitud ha sido exitosa, o un mensaje explicando el error que ha ocurrido
<VERISON>
Ejemplo
HTTP/1.1
🛑
Códigos de estado
200 OK → Solicitud existosa
301 Moved Permanently → El recurso ahora se encuentra en otra ruta
400 Bad Request → La solicitud no ha sido comprendida por el servidor
404 Not Found → El recurso solicitado no existe
505 HTTP Version Not Supported → La versión de HTTP no está soportada por el servidor
HTTPS
📖
Este protocolo se basa en usar el protocolo HTTP sobre una conexión encriptada (TLS)
Anteriormente, esta conexión se realizaba a través de SSL (Secure Socket Layer)
Cookies
🍪
Las cookies son datos clave-valor que se almacenan en el cliente. Estas son enviadas al servidor en cada solicitud. Normalmente es el servidor el que le dice al cliente que datos guardarse como cookies.
Las cookies esta compuestas por…
Una par clave-valor conteniendo la el identificador de la cookie y el valor que almacena
Una fecha de expiración a partir de la cual el cliente deberá borrar dicha cookie ya que habrá caducado para el servidor, y no podrá seguir siendo utilizada
El dominio del servidor y path. Esto se usa para enviar con cada solicitud solo las cookies que pertenecen al contexto actual (una web determinada en una página determinada)
💡
Los servidores suelen responder con la clave Set-cookie:<CLAVE>=<VALOR> en sus cabeceras cuando desean que el cliente se una nueva cookie. Adicionalmente pueden incluir otros datos para determinar la fecha de expiración y el contexto
Tipos de cookies (según su finalidad)
Técnicas → Son aquellas que permiten al usuario mantener una sesión activa a través de varias solicitudes
Personalización → Son aquellas que almacenan la configuración del usuario en el sitio, como el idioma, modo oscuro, última página, …
Análisis → Son aquellas que permiten realizar un seguimiento de los movimientos del usuario para su posterior análisis
Publicitarias → Son aquellas usadas con fines publicitarios
Tipos de cookies (según quien las gestiona)
Propias → Se envían al cliente desde un servidor gestionado por la entidad propietaria de la web
De terceros → Son cookies que se mandan desde servidores externos a la web que estamos visitando
Tipos de cookies (según su persistencia)
De sesión → Almacenan datos de un usuario mientras que este navega por la web con el fin de que la web mantenga el estado a lo largo de varias páginas durante un corto periodod de tiempo
Persistentes → Se mantienen en el cliente durante un tiempo definido por el servidor
Servidores Proxy
🚧
Un servidor proxy es un servidor conocido por el cliente que actua como caché e intermediador de modo que todas las peticiones del cliente pasan a través del proxy y este podrá analizar la petición y finalmente mandarla al servidor. Normalmente estos servidores almacenarán una copia de los datos solicitados.
Cuando el cliente pide un recurso al servidor proxy, este hace una petición al servidor preguntando si la versión que tiene en caché es la más reciente, o no.
El proxy hará una petición Get Conditional y el servidor responderá con NOT MODIFIED si no hay una versión más reciente del recurso
⌚
El Get Conditional funciona en 2 pasos
El cliente envía una solicitud GET normal pero con la cabecera
if-modified-since:<FECHA>
Si la copia del servidor tiene una fecha posterior a la indicada, entonce este no enviará el contenido y responderá con un código 304 Not Modified
Este proceso ocurre sin conocimiento del servidor de que está hablando con un proxy, en lugar de con un cliente
File Transfer Protocol (FTP)
📖
Este protocolo sirve para transferir ficheros desde un host a otro.
Se basa en el modelo cliente/servidor.
Los servidores FTP sí mantienen el estado de cada cliente en el servidor (directorio, credenciales, …)
Se deben proporcionar credenciales válidas, pero se puede configurar para admitir anonymouspara permitir usuarios invitados
Este protocolo se basa es dos conexiones
📟
Conexión de control (Puerto 21)
Esta conexión se usa para establecer la comunicación con el servidor, el cliente deberá enviar unas credenciales válidas al servidor.
Una vez autenticado, el cliente puede enviar comandos para preguntar por los archivos disponibles, solicitar archivos, etc
💽
Conexión de datos (Puerto(s) 20/XXXX)
Esta conexión se usar para enviar los datos solicitados. Los datos pueden ser enviados en formato ASCII o Binario dependiendo del modo de la conexión
💡
Las XXXX quieren decir que este puerto varía en función de si la conexión es activa (20) o pasiva (XXXX)
Tipos de conexiónes FTP: Activo y Pasivo
⚔️
FTP Activo
Una vez solicitado un recurso desde el puerto de control, es el servidor el que inicia una conexión con el cliente desde el puerto 20 hasta el puerto especificado por el cliente.
💡
Esto rompe el modelo cliente/servidor ya que en este modelo, el servidor nunca puede iniciar una conexión con el cliente
🛑
Si el cliente tiene un firewall o esta conectado a través de la NAT del router, entonces el servidor nunca podrá alcanzar el puerto abierto por el cliente
🛡️
FTP Pasivo
Una vez solicitado un recurso desde el puerto de control, el cliente establece una segunda conexión con el servidor para transferir los datos utilizando un puerto XXXX especificado por el servidor en la conexión del puerto de control.
💡
En este modelo, el firewall o la NAT no son un problema ya que estos permiten que los puertos se abran temporalmente si un cliente dentro de la red privada lo solicita
💡
En este modo, el puerto 20 se deja sin usar
🚧
Los puertos adicionales que abren tanto el cliente como el servidor, se suelen abrir con un número mayor que 1023 para dejar reservados dichos puertos para los protocolos que los usan comunmente
Comandos FTP (Cliente → Servidor)
USER <usuario> → Elegir usuario
PASS <password> → Introducir contraseña
LIST → Obtiene una lista de los ficheros en el directorio actual
RETR <filename> → Solicitar un archivo
STOR <filename> → Enviar archivo al servidor FTP desde el cliente
Respuestas FTP (Servidor → Cliente)
331 → El usuario es correcto, pero necesita contraseña
125 → Conexión de datos establecida
425 → Conexión de datos errónea
452 → Error escribiendo el archivo
⚠️
Actualmente no se recomienda usar FTP, en su lugar se recomienda usar SFTP ó FTPS que proporcionan una conexión cifrada
Correo electrónico (SMTP, POP3, IMAP)
Elementos fundamentales
💼
Cliente de correo (o agente de usuario)
Software que permite componer, editar, leer y enviar mensajes de correo electrónico. Ejms.: Gmail, Outlook, …
🖥️
Servidores de correo
Software que contiene los mensajes entrantes de un usuario (buzón o mailbox)y la cola de mensajes salientes.
💡
Los servidores de correo electrónico forman una red P2P. Por ello, se dice que estos servidores actúan como clientes, y otras como servidores
Protocolos de correo electrónico
📨
SMTP (Simple Mail Transfer Protocol)
Protocolo usado para enviar correos electrónicos, tanto entre usuarios y servidores, como entre los propios servidores de correo electrónico
Este protocolo tiene parte de cliente (el que envía) y parte de servidor (el que lo recibe)
📍
Se abre una conexión TCP a con el servidor de correo en el puerto 25
📟
El protocolo SMTP se basa en un flujo de comandos y respuestas. Las respuestas constan de un código y una frase explicativaComandos
HELO <nombre> → Inicia el dialogo
MAIL FROM <email> → Email del emisor
RCPT TO <email> → Email del receptor
DATA → Tras este comando se debe introducir el mensaje de correo. Para finalizar se debe introducir una línea que contenga únicamente un punto
✏️
Tras escribir este comando, podemos escribir en las primeras líneas
From: <email>
To: <email>
Subject: <asunto>
Tras el asunto (subject)se debe dejar una línea vacía, y a continuación el mensaje
QUIT → Termina la conexión con el servidor SMTP
🔢
Proceso de envío de un mensaje
El cliente especifica el email del emisor y receptor del mensaje
Se comprueba si existe la dirección especificada y en caso afirmativo, el cliente envía finalmente el mensaje
Si el cliente tiene más mensajes que enviar, repite desde el paso 1, en caso contrario, cierra la conexión
🏷️
MIME (Multi-purpose Internet Mail Extensions)
Debido a que el protocolo SMTP se creó hace 40 años, el protocolo utiliza el ASCII puro (caracteres de 7-bits) por lo que había para representar algunos caracteres que no estaban en el ASCII con secuencias de caracteres que sí estaban en la tabla de 7 bits
🛡️
Hoy en día para realizar una conexión con un servidor SMTP debemos usar openssl para establecer una conexión segura. A continuación debemos autenticarnos
💡
El protocolo SMTP es de tipo push mientras que HTTP es pull
📬
POP3 (Post Office Protocol 3)
Protocolo usado para acceder al correo electrónico
🔢
Fases del protocolo POP3
Autorización
Descarga/transacción
Actualización
🧠
POP3 no tiene memoria entre sesiones, esto quiere decir que cuando un cliente se descarga, este se descargará todos los correos independientemente de que solo uno de ellos sea nuevo
📟
Comandos y respuestasFase de autorización
user <username> → Username
pass <password> → Password
Fase de transacción y actualización
list → Devuelve una lista de los emails (muestra el tamaño de estos)
retr <num> → Descargar el email <num>
dele <num> → Eliminar el email <num>
quit → Cerrar sesión
Respuestas
+OK → Command success
-ERR → Command error
📬
IMAP (Internet Message Access Protocol)
Protocolo usado para acceder al correo electrónico
IMAP deja los mensajes en el servidor
Muestra solo las cabeceras y los emisores de los mensajes al consultar el buzón
🧠
Dado que IMAP permite organizar los emails en carpetas, se dice que este tiene memoria entre sesiones
🔆
Hoy en día, el correo electrónico se maneja desde aplicaciones web
Domain Name System (DNS)
💱
El DNS es un sistema de nomenclatura jerárquica para computadoras, servicios y otro tipo de recursos conectado a internet o red privada. La función de los servidores DNS es traducir identificadores textuales en identificadores numéricos. Los servidores DNS también cumplen la función de bases de datos distribuidas
🌍
La información del protocolo DNS está distribuida entre muchos servidores para facilitar la escalabilidad, distribuir el tráfico y evitar tener un único punto de fallo
📟
Los servidores DNS están ejecutándose en el puerto 53 usando el programa BIND
Servicios proporcionados por los servidores DNS
Traducción del nombre canónico del host a dirección IP
Ejemplo
www.urjc.es → 212.128.240.50
Almacenar alias de los hosts
Un host, al margen de su nombre canónico, puede tener varios alias
Alias del servidor de correo electrónico
🙂
Distribución de carga
El servidor DNS puede almacenar varias direcciones para el mismo host y de esta manera distribuir el tráfico
Jerarquía de los servidores DNS
1️⃣
Servidores Raíz
Estos conocen las direcciones de los servidores TLD a través de un fichero publicado por la ICANN, controlada por el departamento de comercio de EEUU
Estos servidores rondan los 1000 y están repartidos por todo el munto y están etiquetados en 13 autoridades de nombres (etiqueta: a-m)
2️⃣
Servidores TLD
Estos conocen a los servidores autoritativos que usan la terminación de dominio del servidor
Estos servidores se dividen según la terminación del dominio. Estas pueden ser de tres tipos
TLDs genéricos → .com , .org , .net , …
Country Code TLD → .es , .de , .it , …
Featured TLD → .edu , .gov , .jobs , …
💡
Los TLD están designados por la ICANN
3️⃣
Servidores Autoritativos
Estos son servidores que almacenan las los datos de las traducciones de algunas IPs que son de su propiedad o son clientes suyos
💡
Cuando se quiere consultar una dirección DNS…
Se pregunta al servidor raíz en busca del servidor TLD que se corresponde con la terminación del dominio que buscamos
Se pregunta al servidor TLD por el dominio, este nos responderá con el servidor autoritativo que almacena la información del dominio que buscamos
Se pregunta al servidor autoritativo por la dirección del dominio
💡
Cualquiera de estos pasos se puede atajar ya que los servidores DNS de cualquiera de los tipos anteriores o nuestra propia máquina puede contener en su caché la dirección que se busca
Registros DNS
💡
Los servidores DNS almacenan más que solo la dirección del servidor, por ello podemos realizar diferentes tipos de peticiones para obtener la información de cada uno de los registros (Resource Records, RR) que almacena
A → Dirección IPv4
AAAA → Dirección IPv6
CNAME → Canonic Name, alias
NS → Name server, devuelve el servidor autoritativo
MX → Mail Exchange, almacena los servidores de correo asociados a ese dominio
PTR → Pointer, registro inverso, permite traducir una IP a un nombre de host
SOA → Start Of Authority, servidor autoritativo del dominio, usado en DNS secundarios
SRV → Service record, almacena información de los servicios que se ejecutan en el host (puertos)
TXT → Text record, campo libre, el dueño del dominio puede añadir lo que quiera
🌐
DNS Dinámico
Si queremos hostear un servicio en una red donde se usa un router de una ISP, es probable que nuestra IP cambie recurrentemente. Por ello deberemos tener un proceso ejecutándose constantemente comprobando cual es nuestra IP, para que cuando cambie, actualizar los registros DNS con la nueva dirección
✉️
Mensajes DNS
Los mensajes DNS pueden ser de tipo consulta y respuesta
Dado que solo hay un formato de mensaje, los mensajes de consulta tienen espacios en blanco que se rellenan en los mensajes de respuesta
💡
Por esta razón se dice que los mensajes DNS son como un formulario que se rellena.
Las consultas contienen preguntas y espacios en blanco
Las respuestas contienen preguntas y sus respuestas
💡
Las respuestas pueden contener una sección de información adicional no solicitada
📟
Usa el comando nslookup para hacer una consulta DNS
nslookup www.google.com
Aplicaciones P2P
🤝🏻
BitTorrent
Diseñado por Bram Cohen en 2001
Los usuarios se unen en enjambres (swarm) para subir y bajar archivos de forma simultánea
En toda operación hay: pares, un fichero torrent y un servidor tracker
El tracker conoce las direcciones de los usuarios que poseen los trozos del torrent
Los trozos se pueden descargar en paralelo sin importar el orden, cuando se obtiene el archivo completo, los archivos se juntan en orden para formar uno solo
Proceso para compartir un torrent
Dividir el archivo en trozos de 256KB
Crea un archivo torrent que describe el archivo
En el archivo torrent se guarda un hash de cada trozo
Distribuye el archivo torrent
Proceso para descargar un torrent
Descargar el .torrent
Contiene la información del fichero y del tracker al que se debe conectar para unirse al enjambre
Establecer la comunicación con el tracker mediante HTTP
El tracker devuelve la información de los pares que contienen el archivo
El tracker se actualiza con la dirección del nuevo par del enjambre
Los pares informan periódicamente al tracker de que siguen en el torrent
El par se comunica con otros pares mediante conexiones TCP o UDP para descargar los fragmentos
Los leechers (sanguijuelas) son pares que cuando descargan un archivo, los retiraban de la carpeta compartida
Las seeds (semillas)son pares que tienen el archivo completo, y además lo siguen compartiendo
Nuevos pares
Egoísta → Abandona la red cuando termina de descargar el archivo
Altruista → Permanece conectado aun cuando ha terminado de descargar el archivo
💡
Egoista y sangijuela, así como altruista y semilla es lo mismo
Información de los trozos de un archivos
Tit-for-tat (emparejamiento)
Los pares que suministran datos a velocidades similares tienden a emparejarse.
Esto se debe a que cada para se conectará con los pares con mejor conexión, por lo que preferiran conectarse a los pares disponibles con mejor conexión. Ejm.: Un par con una conexión normal, probablemente no será preferido por lo pares con mayor velocidad y este no preferirá los pares con menor velocidad
📞
Skype
Aplicación que usa un protocolo P2P privado
Los pares que sirven de enlace con muchos otros pares se conocen como super-pares
Los super-pares (relays) son también usados en casos de que el usuario sen encuentre tras una red con NAT