Tema 2 - Capa de Aplicación

Introducción


🌐
Creación de aplicaciones de red
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)
notion image

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
notion image
📊
Velocidad comparada con C-S
notion image
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.

notion image

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
📟
Creación de sockets
Sockets en Java

Web y HTTP


📖
Terminología Básica
Una web está constituida por un fichero base HTML y varios objetos referenciados (imágenes , otros HTML, CSS, código JavaScript…).
Cada objeto es direccionable por una URL (Uniform Resource Locator).
Ejemplo URL
http://www.etsii.urjc.es/dcc/redesFig.gif
Protocolo: http Host: www.etsii.urjc.es Ruta: dcc/redesFig.gif

HTTP

📖
HTTP (HyperText Transfer Protocol)
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)k\times RTT + d_{trasn}(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 nn 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 nn 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 anonymous para 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 10231023 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 explicativa
Comandos
  • 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
  1. El cliente especifica el email del emisor y receptor del mensaje
  1. Se comprueba si existe la dirección especificada y en caso afirmativo, el cliente envía finalmente el mensaje
  1. 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 respuestas
Fase 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.es212.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…
  1. Se pregunta al servidor raíz en busca del servidor TLD que se corresponde con la terminación del dominio que buscamos
  1. Se pregunta al servidor TLD por el dominio, este nos responderá con el servidor autoritativo que almacena la información del dominio que buscamos
  1. 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
  1. Dividir el archivo en trozos de 256KB
  1. Crea un archivo torrent que describe el archivo
  1. En el archivo torrent se guarda un hash de cada trozo
  1. Distribuye el archivo torrent
Proceso para descargar un torrent
  1. Descargar el .torrent
    1. Contiene la información del fichero y del tracker al que se debe conectar para unirse al enjambre
  1. Establecer la comunicación con el tracker mediante HTTP
    1. El tracker devuelve la información de los pares que contienen el archivo
    2. El tracker se actualiza con la dirección del nuevo par del enjambre
    3. Los pares informan periódicamente al tracker de que siguen en el torrent
  1. El par se comunica con otros pares mediante conexiones TCP o UDP para descargar los fragmentos
    1. Los leechers (sanguijuelas) son pares que cuando descargan un archivo, los retiraban de la carpeta compartida
    2. 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
notion image
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