• No se han encontrado resultados

REDES Y COMUNICACIONES CAPÍTULO 2: CAPA DE APLICACIÓN

N/A
N/A
Protected

Academic year: 2021

Share "REDES Y COMUNICACIONES CAPÍTULO 2: CAPA DE APLICACIÓN"

Copied!
21
0
0

Texto completo

(1)

 

 

REDES Y COMUNICACIONES 

 

 

 

 

CAPÍTULO 2: CAPA DE APLICACIÓN 

 

 

 

 

 

 

 

 

DAVID RODRÍGUEZ HERNÁNDEZ  FECHA DE REVISIÓN:    1 – Diciembre ‐ 2007  ZAMORA (CURSO 2007/2008)  [email protected]

(2)

Nota importante:   

Este documento no pretende reemplazar al material propuesto por la UNED para la asignatura Redes y  Comunicaciones. 

Su finalidad es presentar de una forma esquematizada los contenidos de la asignatura, para facilitar el  estudio de la misma. Es conveniente disponer de la bibliografía propuesta por la Universidad para su  estudio completo. 

Cualquier sugerencia, comentario o corrección sobre este documento, envíelo a [email protected]  para poder realizar los cambios necesarios. 

 

David Rguez. Hdez.  Alumno de 2º ciclo Ingeniería Informática (UNED) 

(3)

PRINCIPIOS DE LOS PROTOCOLOS DE LA CAPA DE APLICACIÓN 

El sistema central sigue siendo el software, a pesar de la importancia de los componentes de la red. Lo  que se comunica entre sí a través de la red son procesos, que puede considerarse como programas en  ejecución. Aunque los procesos pueden estar en el mismo host (comunicación interproceso) lo que nos  interesa en este documento es la comunicación entre procesos de hosts diferentes. Esta comunicación  se realiza a base de mensajes, que son enviados por el emisor y recogidos (y, probablemente,  respondidos) por el receptor. 

El formato y orden de estas comunicaciones vienen definidos por los protocolos de red.   

Protocolos de la capa de aplicación 

No es lo mismo la aplicación de red que el protocolo de la capa de aplicación. Lo segundo forma parte  de lo primero. Por ejemplo, la Web es una aplicación de red, que tiene varios componentes, como  estándares de documentos, navegadores web, servidores web…. mientras que HTTP es un protocolo de  la capa de aplicación de Web. HTTP define el formato y secuencia de mensajes que se intercambian  entre el cliente y el servidor. Otro ejemplo es el correo web (aplicación de red) y el SMTP (protocolo de  la capa de aplicación de correo (entre otros)).  Pero entonces ¿qué es lo que define un protocolo?  • El tipo de mensajes intercambiados (petición, respuesta…).  • La sintaxis de los tipos de mensajes (campos, límites de los campos…).  • El significado de la información (semántica) de los campos.  • Las reglas que indican cuándo y cómo se envían los mensajes y sus respuestas.  Algunos protocolos son públicos (ej: HTTP) y se especifican en una RFC, otros son propietarios. 

Partes cliente y servidor de una aplicación 

En la figura 2.2 del libro se puede ver la comunicación cliente‐servidor de las aplicaciones de red. A  veces, un mismo host implementa el servidor y el cliente, como sucede en el Telnet o el FTP. Sin  embargo, se suele etiquetar como cliente a aquel host que haya iniciado la sesión. 

Procesos que se comunican a través de una red 

El envío y recepción de mensajes se realiza a través de sockets. Los sockets son puertas a través de la  cual se empujan (y llegan) los mensajes. Aquí se está asumiendo que al otro lado del socket hay una  infraestructura de transporte. La  figura 2.3 muestra este  proceso, utilizando como protocolo de  transporte TCP

El socket también se denomina API (interfaz de programación de aplicaciones) entre la aplicación y la  red, ya que es la interfaz entre éstas. El programador tiene un amplio control sobre la capa de  aplicación, pero no tanto sobre la de transporte (sobre ésta únicamente la elección del protocolo de  transporte y quizá algunos parámetros (ej: tamaño del buffer)). 

   

(4)

Direccionamiento de procesos 

En el envío de mensajes, el emisor tiene que poder identificar al receptor. Para ello se requiere el  nombre o dirección del host y un identificador para referirse al proceso del host destino. 

En las aplicaciones en Internet, la dirección del host se especifica mediante la dirección IP, que es un  conjunto de 32 bits que identifica inequívocamente al host. Esta dirección debe ser única en términos  globales, con lo que su asignación ha de ser cuidadosa. 

Por otra parte, se requiere identificar el proceso. En Internet, esto se realiza con los números de puerto.  Las aplicaciones más comunes tienen puertos fijos (HTTP – 80, SMTP – 20….), mientras que para  aplicaciones nuevas desarrolladas, el programador debe asignarle un número de puerto. 

Agentes de usuario 

El agente de usuario es una interfaz entre el usuario y la aplicación de red. Un ejemplo es un navegador  web para la Web con el protocolo HTTP, o un cliente de correo para el Correo Web con los protocolos  SMTP (para la salida de mensajes) y el POP3 y IMAP (para la entrada de mensajes). 

 

¿Qué servicios necesita una aplicación? 

La elección del tipo de transporte a utilizar por una aplicación implica analizar los servicios que ofrece  cada uno y ver cuáles son los más apropiados. Los requisitos de servicios pueden clasificarse en pérdida  de datos, banda ancha y temporización. 

Transferencia fiable de datos 

Algunas aplicaciones deben funcionar sin que se produzcan pérdidas de datos; por ejemplo, las  aplicaciones bancarias. Otras aplicaciones, como puede ser la transmisión de vídeo a tiempo real tienen  una cierta tolerancia a pérdidas de datos, que aunque suponga una peor calidad, no es algo crítico. 

Ancho de banda 

Algunas aplicaciones necesitan transmitir a una cierta tasa de transferencia (por ejemplo, una aplicación  de VoIP). Si no se dispone del ancho de banda necesario, la aplicación tendría que cambiar su  transferencia o abandonar. Se denominan aplicaciones sensibles al ancho de banda a aquellas que  requieren un ancho de banda determinado y aplicaciones flexibles a aquellas que hacen uso del ancho  de banda que tengan disponible. 

Temporización 

Muchas  aplicaciones  (juegos,  telefonía…)  requieren  tener  retardos  muy  bajos  (del  orden  de  milisegundos o menos). Retardos más altos disminuyen la  eficacia, como retardos en la transmisión de  voz o la pérdida de realismo en juegos online. 

La figura 2.4 muestra una tabla que identifica algunos de los ejes más importantes a lo largo de los  cuales se pueden clasificar los requisitos de aplicaciones en red. 

     

(5)

Servicios proporcionados por los protocolos de transporte de Internet 

Internet proporciona dos protocolos de transporte: UDP TCP. La decisión sobre uno u otro es de las  primeras que debe tomar un desarrollador. 

Servicios TCP (Transmission Control Protocol) 

Incluye un servicio orientado a la conexión y un servicio fiable de transferencia de datos

El primero indica que, antes de transmitir los datos, el origen y destino intercambian unos paquetes de  control (handshacking). Se establece  una  conexión  TCP  que es  full‐duplex (se puede transmitir  simultáneamente en ambas direcciones). Cuando termina la transmisión, hay que romper la conexión.  El segundo indica que los datos se envían en orden y sin errores. 

Además, incluye un mecanismo de control de congestión, que regula el proceso emisor cuando la red  está congestionada (limita su tasa de envío). En las aplicaciones a tiempo real, esta regulación es  perjudicial, por lo que los desarrolladores suelen utilizar para ellas UDP en vez de TCP. 

TCP no garantiza una tasa de transmisión mínima y tampoco proporciona garantías de retardo (garantiza  que se entregará, pero no en cuánto tiempo). 

Servicios UDP (User Datagram Protocol) 

Funciona sin conexión (al contrario que TCP) y su transferencia de datos es no fiable. Es decir, los  mensajes pueden llegar desordenados e, incluso, pueden no llegar. Tampoco incluye ningún mecanismo  de control de la congestión, por lo que suele usarse para los sistemas a tiempo real (una limitación en la  transferencia supone una pérdida importante). 

Al igual que TCP, UDP no garantiza el retardo del envío. 

En la figura 2.5 se muestran los protocolos usados por algunas aplicaciones concretas. 

Aunque ni UDP ni TCP garantizan el retardo, las aplicaciones sensibles a los tiempos están diseñadas  para (hasta cierto punto) hacer frente a esa falta de garantía. 

 

LA WEB Y HTTP 

Antes, Internet era usada por investigadores, académicos y estudiantes; y era desconocida fuera de esos  ámbitos. Cuando, a principios de los 90’s, apareció la World Wide Web, la situación comenzó a cambiar.  Ahora, la Web funciona bajo demanda; es decir, cada usuario solicita lo que quiera cuando quiera (no  ocurre lo mismo en otras redes, como la radio o la TV, donde lo que se transmite no depende de lo que  quiera el usuario). 

 

Introducción a HTTP 

Es el protocolo de transferencia de hipertexto y es el protocolo de aplicación de la Web. El cliente y el  servidor intercambian mensajes HTTP

(6)

Una página web es un conjunto de objetos (HTML base + imágenes, sonidos, applets de Java…). El HTML  hace referencia  al resto de  objetos mediante  la  URL. La URL consta del  nombre del  host  (ej:  www.uned.es) y del nombre de ruta (/portal/). El navegador es un agente de usuario que muestra la  página web y que implementan el lado cliente de HTTP. 

Un servidor web es un host que aloja archivos web y que implementan el lado servidor de HTTP. HTTP  define cómo los clientes piden páginas y cómo se les transmiten. Es decir, el cliente solicita una página  con un mensaje HTTP y el servidor responde con otro mensaje HTTP que contiene la página. 

Tenemos las versiones HTTP/1.0 y HTTP/1.1. Un servidor con la 1.1 puede comunicarse con un cliente  con la 1.0 y un cliente con la 1.1 puede hablar con un servidor con la 1.0. Ambas versiones usan TCP. Así  pues, HTTP no tiene que preocuparse por la pérdida de datos (recuérdese que TCP garantiza la ausencia  de dicha pérdida). Una vez que el mensaje ha sido lanzado a través del socket, queda en manos del TCP.  HTTP es un protocolo sin estado; es decir, no guarda información sobre los clientes (si un cliente pide  dos veces la misma página, el servidor no advierte que ya la pidió antes). 

 

Conexiones no persistentes y persistentes 

La versión 1.0 utiliza conexiones no persistentes (con las que sólo se puede enviar un objeto web) y 1.1  puede utilizar ambas (aunque por defecto usará las persistentes).  

Conexiones no persistentes 

En las conexiones no persistentes, cada vez que se envíe un objeto web, se cierra la conexión TCP (si una  página consta de 4 JPEG’s, se creará y cerrará la conexión 4 veces. Téngase en cuenta que los  navegadores pueden abrir conexiones paralelas. 

El RTT (Round‐Trip Time) es el tiempo de ida y vuelta. Incluye los retardos de propagación de paquetes,  los de las colas en los routers y switches y los de procesamiento de paquete. 

Cuando un usuario pulsa un hiperenlace, el cliente envía una petición de conexión al servidor y éste  responde aceptándola (podría rechazarla, pero supongamos una conexión exitosa): Ha pasado un RTT.  Seguidamente, el cliente solicita la página en cuestión y el servidor se la envía. El segundo RTT termina  cuando se comienza a recibir la página. 

Así pues, la duración ha sido de 2 RTT más la duración de la transferencia de la página. Esto se puede ver  en la figura 2.7. 

Conexiones persistentes 

El anterior planteamiento tenía problemas, como es la necesidad de establecer una conexión por cada  objeto (lo que supone dos RTT por cada uno (uno de conexión y otro de petición de la página). Además,  por cada vez se deben reservar buffers y variables TCP. 

En las conexiones persistentes, la conexión TCP queda abierta (no se cierra al recibir el objeto). Esto  permite transmitir todos los objetos por una única conexión (con su consiguiente ahorro). HTTP cierra  una conexión si no se ha usado en un determinado tiempo. 

(7)

Sin entubamiento:     El cliente sólo lanza una petición nueva cuando la respuesta anterior se  haya recibido., con lo que hay 1 RTT por cada objeto pedido y recibido. Cuando se ha enviado  un objeto, el servidor se queda esperando a por otra conexión, con lo que se desaprovechan  recursos. 

Con entubamiento:   Es el modo por defecto de la versión 1.1. El cliente realiza una petición en  cuanto encuentre una referencia, lo que supone que puede hacer peticiones seguidas sin  esperar a la respuesta anterior. Asimismo, el servidor puede enviar objetos seguidos (si las  peticiones le llegan seguidas). Un entubamiento con varios objetos puede suponer un solo RTT.  La inactividad es menor que sin entubamiento. 

 

Formato del mensaje HTTP 

Hay 2 tipos de mensajes: mensajes de petición mensajes de respuesta

Mensaje HTTP de petición 

A continuación un mensaje HTTP de petición típico: 

GET  /dir/pagina.html HTTP/1.1 

Host:  www.escuela.edu 

Connection: close 

User‐agent: Mozilla/4.0 

Accept‐language: fr   

Un mensaje de petición puede contener muchas más líneas, o simplemente tener 1. La primera línea es  la línea de petición, que consta de 3 campos: el método, la URL y la versión de HTTP. El método puede  ser GET, POST o HEAD, aunque en los mensajes de petición suele ser GET; que es cuando el navegador  pide un objeto designado por el campo de URL. El campo de versión es autoexplicativo. 

La línea host especifica el host en que reside el objeto. La línea Connection con el valor close indica que  el navegador no quiere usar conexiones persistentes. La línea user‐agent indica el agente de usuario  (navegador) que se usa. Por último, la línea accept‐language indica la preferencia de lenguaje del objeto  que se pide (si es que existe en dicho lenguaje. 

En la figura 2.8 del libro se puede ver la estructura de un mensaje HTTP de petición. Tras las líneas de  cabecera (y el retorno de carro y salto de línea final) hay un cuerpo de entidad, que se utiliza con el  método POST. 

Un formulario no tiene por qué usar el método POST, puede ir directamente en la URL y usar el método  GET. En caso de usar POST, el cuerpo de entidad contiene los datos del formulario. 

El método HEAD suele usarse para depuraciones. Es similar al GET, pero no incluye el objeto solicitado  en la respuesta. 

La especificación HTTP/1.1 incluye además otros dos posibles métodos: PUT, que permite cargar un  objeto en una URL y DELETE, que permite borrar un objeto alojado en una URL. 

(8)

Mensaje HTTP de respuesta 

Al ejemplo dado anteriormente, le correspondería esta respuesta: 

HTTP/1.1  200  OK 

Connection: close 

Date: Thu, 06 Aug 1998  12:00:45  GMT 

Server: Apache/1.3.0  (Unix) 

Last‐Modified:   Mon, 22 Aug 1998   09:23:24   GMT 

Content‐Length: 6821 

Content‐Type:  text/html 

(DATOS) 

Comienza con una línea inicial de estatus, que contiene 3 campos: la versión del protocolo, el código de  estatus y el propio estatus. Después hay 6 líneas de cabecera, que indican (por este orden) que no  habrá conexión persistente (es decir, el cliente cerrará la conexión TCP cuando reciba la respuesta), la  fecha de la creación y envío de la respuesta, el servidor que la emitió, la fecha y hora de la última  modificación del objeto pedido, el tamaño (en bytes) del objeto y el tipo de objeto que hay en el cuerpo  de entidad. A continuación, está dicho cuerpo, que contiene el objeto solicitado. 

Si el cliente envía una petición HTTP/1.0 y el servidor es HTTP/1.1; el servidor cerrará la conexión TCP  tras enviar la respuesta, ya que el cliente cuenta con ello.  Los códigos y estados más comunes son los siguientes:  • 200 OK:   La información se devuelve en la respuesta exitosamente.  • 301 Moved Permanently:   El objeto se mueve de una URL a otra que se indica en la respuesta.  • 400 Bad Request:   El servidor no entiende la petición.  • 404 Not Found:   A la que más acostumbramos estamos. El objeto no existe.  • 505 HTTP Version not supported:   El servidor no soporta la versión de HTTP de la petición.  En la figura 2.9 se puede ver la estructura de un ejemplo de mensaje HTTP de respuesta. Un mensaje  puede tener más líneas de cabecera (sobre todo en la versión 1.1). En los siguientes apartados se verán  más líneas posibles. 

 

Interacción usuario‐servidor: autorización y cookies 

Antes dijimos que HTTP no tiene estado. Pero, en ocasiones, será necesario identificar a los usuarios  (seguridad, seguimiento…). Para ello, tenemos los mecanismos de autorización y cookies

Autorización 

Si un cliente envía una petición HTTP a un servidor que requiere autentificación, el servidor responde  con un mensaje vacío y un estatus: 401  AuthorizationRequired. Además, incluye una cabecera WWW‐ Authenticate que indica las instrucciones para identificarse. Entonces el navegador pide al usuario los  datos requeridos (normalmente un nombre de usuario y una contraseña). Cuando los introduce, el 

(9)

cliente  reenvía  la  petición,  pero  incluyendo  la  línea  de  cabecera  Authorization,  con  los  datos  introducidos. En las sucesivas peticiones, el cliente reenvía esos datos de identificación. Pero esto sólo  dura hasta que se cierre el navegador, pues se descarga la cache. 

Cookies 

Las cookies son archivos de texto con información de sesión que se almacenan en el cliente. Si un  cliente que no tenga la cookie adecuada envía una petición al servidor que las requiera, éste devuelve  una respuesta con la línea Set‐cookie y un número de identificación único que previamente ha  generado. El cliente registra esa identificación en sus archivos de cookies, junto con el host que lo  asignó. Así pues, cada vez que envíe una petición, incorporará la línea Cookie junto con el número de  identificación. 

Esto permite al servidor hacer un seguimiento completo de un usuario sin necesidad de requerir  información adicional, como el nombre. Las cookies pueden usarse para identificar usuarios.  Pero el uso de cookies es polémico, porque puede considerarse una intromisión en la privacidad, reunir  datos y vendérselos a terceros…    El GET condicional  El almacenamiento de objetos ya recuperados en la cache del cliente, puede reducir los retardos en caso  de que se requiera de nuevo dicho objeto. Pero he aquí el problema: el objeto almacenado puede estar  obsoleto. Para paliar este obstáculo, se utiliza el llamado GET condicional, que es un mensaje del  método GET que contiene la línea de cabecera If‐Modified‐Since

Si un objeto no está en la cache, la petición se realiza de forma normal, tal y como vimos anteriormente.  Cuando recibe la respuesta, se almacena en la cache junto con la fecha de su última modificación.  Si, más adelante, vuelve a pedir el mismo objeto, incluirá la siguiente línea (por ejemplo) en la cabecera: 

If‐modified‐since:   Mon, 22 Jun 1998  09:28:47 

Si el objeto ha sido modificado posteriormente, el servidor ¡envía el objeto de forma normal. Pero si no  ha sido modificado, envía un mensaje vacío con el estatus 304  Not Modified

 

Contenido HTTP 

Hasta ahora hemos supuesto que el contenido de los mensajes era una página web. Pero puede haber  más contenidos. Puede contener archivos XML, que contienen datos estructurados (por ejemplo, datos  bancarios). También se puede transferir WML (el lenguaje de marcado WAP), VoiceXML y otros tipos de  documentos XML. 

 

TRANSFERENCIA DE ARCHIVOS: FTP 

El usuario utiliza un agente de usuario FTP (no el navegador HTTP) para realizar la transferencia de  archivos. Primero, el cliente establece una conexión TCP con el host al que se quiere transferir (o recibir) 

(10)

y, acto seguido, el usuario introduce los datos de identificación. Éstos se envían como parte del  comando FTP, el servidor lo identifica y luego se realiza la transmisión de datos. 

Aunque FTP y HTTP utilizan conexiones TCP, FTP utiliza dos de ellas paralelamente: una para la conexión  de control y otra para la conexión de datos. La primera envía datos de control, como la identificación  del usuario, comandos de cambio de directorio… La segunda se usa para enviar propiamente los  archivos. Como la conexión de control es separada, se dice que envía su información de control fuera de  banda (HTTP se dice que la envía en banda, porque utiliza la misma conexión TCP que para los datos).  La conexión de control establecida entre el cliente y el servidor se realiza por el puerto 21. Por la  conexión de control, el servidor recibe los datos de autentificación y los distintos comandos y órdenes  (cambiar un directorio, transferir un fichero…). Cuando el servidor recibe la orden de transferir un  fichero, lo envía por la conexión de datos y, seguidamente, cierra dicha conexión. Si se vuelve  requerir  otra transferencia, la vuelve a abrir; es decir, las conexiones de datos son no persistentes.  Para realizar el seguimiento del usuario, el servidor asocia la conexión de control a la cuenta de usuario.  El seguimiento limita el número máximo de sesiones que el servidor puede mantener simultáneamente.    Comandos y respuestas FTP  Los comandos y las respuestas sobre la conexión de control tienen un formato ASCII de 7 bits.  Cada comando se compone de 4 caracteres ASCII en mayúsculas. Podemos citar algunos ejemplos, como  USER (para indicar el nombre de usuario), PASS (para indicar la contraseña), LIST (para listar los archivos  del directorio), RETR (para recuperar un archivo) o STOR (para almacenar un archivo). 

Hay una correspondencia uno‐a‐uno entre los comandos y las respuestas (que se componen de un  número de 3 dígitos y un mensaje opcional). 

 

CORREO ELECTRÓNICO EN INTERNET 

El correo electrónico es un medio de comunicación asíncrono, es decir, se envía cuando la persona en  cuestión quiere. En la figura 2.12 se puede ver un esquema a alto nivel del funcionamiento del correo  electrónico. Pueden verse 3 elementos diferenciados: los agentes de usuario, el servidor de correo y el  protocolo simple de transferencia de correo (SMTP). Los primeros (comúnmente conocidos como  lectores de correo) permiten leer, recibir, enviar y almacenar correos electrónicos. El segundo es el  punto de contacto con el exterior, al cual el agente envía los mensajes a enviar y del cual se leen los  mensajes recibidos (dispone de una cola de mensajes para su gestión). El tercero es el protocolo  principal para el correo electrónico en Internet y utiliza el servicio TCP. Como la mayoría de protocolos,  el SMTP tiene un lado cliente y un lado servidor, que se implementan en todos los servidores de correo  (cliente para enviar y servidor para recibir). 

  SMTP 

Transfiere mensajes entre servidores de correo y es mucho más antiguo que el HTTP. Aunque tiene  numerosas cualidades, también posee algunas restricciones que actualmente no tienen razón de ser,  como la limitación de ASCII de 7 bits para el cuerpo del mensaje (actualmente, en la era multimedia, los  datos binarios deben ser codificados a ASCII y posteriormente decodificados por el destinatario). 

(11)

Los pasos realizados para enviar un correo de A a B serían los siguientes: 

1. El mensaje se envía desde el agente de usuario de A a la cola de mensajes del servidor de  correo de A. 

2. El servidor ve el mensaje y establece una conexión TCP con un servidor SMTP que está  ejecutándose en el servidor de correo de B. 

3. Tras una sincronización SMTP inicial, el mensaje se envía al servidor de correo B sobre dicha  conexión TCP. El mensaje se deposita en el buzón de correo de B. 

4. El servidor de B envía el mensaje al agente de usuario de B cuando éste se lo solicite. 

Esto mismo se puede ver gráficamente en la figura 2.13. No se suelen utilizar servidores intermedios,  aunque la distancia entre ambos sea grande. El puerto utilizado para el SMTP es el puerto 25. Después  de la mencionada figura 2.13 puede encontrarse en el libro un ejemplo de transcripción de mensajes  intercambiados entre un cliente SMTP y un servidor SMTP. En los mensajes se pueden encontrar  comandos (autoexplicativos) como HELO,  FROM, RCPT, TO, DATA o QUIT. El servidor emite respuestas  para cada comando, con su respectivo código y una frase opcional. 

SMTP utiliza conexiones persistentes; es decir, pueden enviarse varios mensajes consecutivos sobre la  misma conexión TCP. 

Se podría enviar un correo electrónico a un servidor SMTP directamente (sin agente de usuario) a través  de Telnet. 

 

Comparación con HTTP 

Ambos protocolos se usan para enviar archivos: HTTP transfiere objetos web y SMTP mensajes de  correo electrónico. Sin embargo, HTTP es un protocolo de demanda; es decir, el archivo se envía cuando  el receptor lo solicite; mientras que SMTP es un protocolo de oferta; es decir, el archivo se envía cuando  quiere el emisor. Además, SMTP requiere que los mensajes se codifiquen en ASCII de 7 bits, mientras  que HTTP no tiene dicha restricción. 

Por último, HTTP encapsula cada objeto (texto, imágenes…) en su propio mensaje HTTP; mientras que  SMTP reúne todos los objetos en un solo mensaje. 

 

Formatos de mensajes de correo y MIME 

Los correos electrónicos incluyen una cabecera con información adicional. Cada línea de cabecera  contiene texto legible (que es una clave seguida de dos puntos (:) y un valor). Algunas claves son  obligatorias  y  otras  opcionales.  Debe  incluir  las  líneas  From:  y  To:,  además  puede  incluir  (opcionalmente) Subject:

Tras la cabecera, hay una línea en blanco, y seguidamente el cuerpo del mensaje en ASCII.   

   

(12)

La extensión MIME para datos no ASCII 

Cuando  se  intentan  enviar  mensajes  con  caracteres  especiales  o  con  contenido  (por  ejemplo)  multimedia, las cabeceras anteriores (indicadas por la RFC 882) no son suficientes. Hay que utilizar  líneas  adicionales de  cabecera,  descritas  en  RFC  2045  y  RFC 2046.  Son  las  extensiones  MIME  (Multipurpose Internet Mail Extensions). 

Para el soporte multimedia, las dos cabeceras clave son Content‐Type:, que permite que el receptor  tome las acciones oportunas respecto al mensaje; y Content‐Transfer‐Encoding:, que indica al receptor  que el mensaje ha sido codificado a ASCII e indica el tipo de codificación que se ha usado. Este último es  usado por el receptor para saber cómo debe devolverlo a su formato original.  

El campo Content‐Type indica un tipo (general) y un subtipo (más específico) (ej:  image/jpeg). Además,  puede haber parámetros que son modificadores del subtipo, pero sin afectar a su naturaleza. 

Actualmente, hay 7 tipos de alto nivel definidos, cada uno de los cuales tiene un conjunto de subtipos,  de los cuales describiremos tres: 

Text:     Información textual. Un ejemplo muy común es text/plain, que indica que contiene  texto plano (no requiere  software  específico,  se  lee  tal  cual).  Puede  tener  parámetros  indicando el juego de caracteres usado. Otro tipo común es text/html, que indica que el texto  debe ser interpretado como código html. 

Image:   Imagen. Dos habituales son image/jpeg y image/gif

Application:   Datos que no se ajustan en ninguna otra categoría. Requieren ser procesados por  una aplicación completa antes de poder visualizarse. Un ejemplo es application/msword, que  requiere el Microsoft Word

Existe un tipo importante llamado multipart. Un ejemplo es multipart/mixed, que indica que el mensaje  contiene varios objetos (por ejemplo, una imagen seguida de un texto ASCII). En el libro puede  encontrarse un ejemplo de este tipo de mensajes. 

El mensaje recibido 

El servidor SMTP destino añade algunas líneas de cabecera más al mensaje. Añade una línea Received:  que contiene el remitente, el nombre del servidor receptor y la fecha/hora de la recepción (ej:   Received: From crepes.fr by hamburguer.edu;  12  Oct  98   15:32:51  GMT). 

En ocasiones pueden aparecer múltiples líneas Received. Esto ocurre cuando un mensaje se produce por  un “reenvío”. 

 

Protocolos de acceso al correo 

Hasta comienzos de los 90’s, lo más normal era acceder directamente al host para leer los mensajes  contenidos en el buzón de entrada. Pero, hoy en día, se utilizan agentes de usuario para acceder a  dichos mensajes. Lo habitual (por comodidad y facilidad) es que el servidor esté en un servidor  compartido que siempre está encendido (no en el ordenador del destinatario final) y mantenido  generalmente por el ISP, por lo que el agente de usuario se conecta a dicho servidor. Pero ¿cómo se  comunican? 

(13)

Como SMTP es un protocolo de oferta, no puede utilizarse para recibir esos mensajes (puesto que sería  bajo demanda). Para ello tenemos algunos protocolos especiales, como POP3 (Post Office Protocol –  versión 3), IMAP (Internet Mail Access Protocol) o HTTP

POP3 

Es un protocolo de acceso al correo bastante simple. Utiliza una conexión TCP por el puerto 110. El  protocolo realiza 3 fases: autorización, en que el agente de usuario envía el nombre de usuario y la  contraseña; transacción, en que se recuperan los mensajes; y actualización, que se ejecuta cuando el  cliente envía el comando quit y el servidor de correo borra los mensajes marcados para ello. 

El cliente emite comandos y el servidor puede responder con +OK, que indica que el comando era el  adecuado; o –ERR, que indica algo erróneo en el comando. La respuesta +OK puede ir seguida de datos  adicionales (por ejemplo, un mensaje para indicar que la identificación se ha realizado correctamente).  Los mensajes leídos pueden ser borrados o mantenidos. Cuando se borra, el cliente envía los comandos  list (listar la lista de tamaños de los mensajes), retr (recupera el mensaje) y dele (borra el mensaje).  Cuando ha realizado la operación para todos, ejecuta quit. El problema es que los mensajes quedarán  almacenados en un ordenador concreto y sólo se podrá acceder desde ahí. 

En el caso  de mantenerse el mensaje en el servidor; puede ser “releído” desde  cualquier  otro  ordenador. 

POP3 mantiene información sobre los mensajes marcados para borrarse, pero no guarda información  sobre sesiones de POP3. 

IMAP 

Es un protocolo más complejo y con más funcionalidades de POP. Un servidor IMAP asigna cada  mensaje  a  un  buzón.  Inicialmente  se  almacena  en  el  buzón  INBOX,  pero  puede  ser  movido  seguidamente  a un  buzón creado por el  usuario, leer el  mensaje, borrarlo… IMAP  proporciona  comandos para realizar estas operaciones y también para buscar en los buzones remotos mensajes que  cumplan con ciertos criterios. 

IMAP mantiene información de estado de los usuarios entre sesiones IMAP (ej: nombres de buzones y  qué mensajes se asocian). 

Además, pueden recuperarse componentes de mensajes únicamente (por ejemplo, las cabeceras o una  parte de un MIME multiparte), que puede ser útil, por ejemplo, con conexiones lentas entre el agente  de usuario y el servidor de correo. 

Correo electrónico basado en web 

Se trata de acceder al correo a través de la Web, concepto que fue introducido a mediados de los 90’s  con Hotmail. Cuando se solicitan los mensajes, éstos se envían mediante HTTP. Esto abre muchas  posibilidades, ya que el correo puede ser consultado desde cualquier ordenador que disponga de un  navegador web común. Estos correos suelen implementar un servidor IMAP, a fin de poder organizar los  buzones remotos. 

     

(14)

DNS: EL SERVICIO DE DIRECTORIO DE INTERNET 

Los host de Internet tienen un sistema para identificarlos inequívocamente. Este sistema puede ser los  nombres de host (ej: www.uned.es); pero da muy poca información (prácticamente ninguna) acerca de  su localización en Internet; aunque resulta cómodo para los usuarios. Además, tienen longitudes  variables, lo que dificulta al router su procesamiento. 

Por ello se utilizan las direcciones IP, que se compone de 4 octetos (bytes) representados por su  equivalente decimal (de 0 a 255) y separados por un punto (.). Las direcciones IP son jerárquicas, ya que  cada byte ofrece una información más específica que el anterior (de izquierda a derecha), al igual que  una dirección postal. 

 

Servicios proporcionados por DNS 

DNS significa Domain Name Service, y su principal tarea es traducir los nombres de host a sus  correspondientes direcciones IP. Es decir, es una BBDD distribuida. Se ejecuta sobre UDP en servidores  UNIX (normalmente) por el puerto 53.  

DNS es usado por protocolos de la capa de aplicación (HTTP, FTP, SMTP…). Cuando un usuario teclea  una URL, el cliente DNS contacta con el servidor DNS y le envía la URL. Éste le responde con la IP  correspondiente, la cual es utilizada para establecer la conexión HTTP por TCP final. 

Además, proporciona otros servicios: 

Alias de hosts:     Un nombre de host puede ser demasiado largo de recordar (se denomina  nombre canónico). Entonces existen alias que simplifican el acceso a dicho host. Si un cliente  proporciona un alias, el servidor puede responder con el nombre canónico y la IP. 

Alias de servidores de correo:     De la misma forma, si nosotros enviamos un email a  [email protected], probablemente “Hotmail.com” no sea el nombre canónico del  servidor. La aplicación de correo puede invocar al DNS para averiguar el nombre canónico para  enviar el email. 

Distribución de carga:   Un sitio web puede estar replicado en varios servidores (cada uno con  su IP). El servidor DNS envía el conjunto de IP’s pero rotándolas a cada petición, lo que provoca  que las peticiones hacia dicha web se repartan entre todos los hosts. 

 

Resumen de cómo trabaja el DNS 

Cuando el servidor DNS recibe una petición de traducción, el servidor busca el nombre solicitado en su  BBDD. Pero el DNS no es un solo servidor. Podría serlo, pero se plantearían los siguientes problemas: 

Único punto de fallo:   Si el servidor falla, falla todo Internet. 

Volumen de tráfico:   El ratio de peticiones es demasiado alto para un solo servidor. 

BBDD centralizada distante:     Habría muchos clientes lejos del servidor, lo que provocaría  retardos. 

(15)

Mantenimiento:   La BBDD sería gigantesca y debería estar en constante actualización. También  hay un problema de identificación. 

Por  ello,  DNS  tiene  un  gran  número  de  servidores  distribuidos  por  el  mundo,  organizados  jerárquicamente. Así, los nombres de hosts están repartidos entre los servidores. Hay 3 tipos: 

Servidores locales de nombres:   Cada ISP tiene un servidor de nombres, que contiene los hosts  de dicho ISP. Así, si el usuario pide un host de la misma ISP (que suele situarse cerca del  cliente), la traducción es directa y rápida. 

Servidores raíz de nombres:     Existen cerca de una docena de ellos en el mundo, que se  muestran en la figura 2.15. Si el servidor local no dispone del host, hace las veces de cliente  DNS y pregunta a su vez al servidor raíz. Si éste dispone del host, se lo enviará al local, que a su  vez se lo envía al cliente. Si no dispone de él, consultará al servidor autorizado.  • Servidores autorizados de nombres:   Todo host está registrado obligatoriamente al menos en  2 servidores autorizados (para el caso de fallos). Un servidor de nombres está autorizado para  un host si contiene su IP correspondiente. Recibe las consultas de un servidor raíz y le responde  con la IP (a su vez, el raíz responde al local, el cual responde al cliente).  En la figura 2.16 se puede encontrar un ejemplo de este proceso.  Puede ocurrir que el servidor raíz no conozca la IP del servidor autorizado adecuado; pero sí conozca la  IP de un servidor intermedio que sí tiene la IP del servidor autorizado. En tal caso, reenvía la petición al  servidor intermedio, que actúa de puente para establecer la comunicación (véase ejemplo en la figura  2.17). 

Estos procesos vistos hasta ahora son recursivos. Pero también pueden producirse consultas iterativas,  en las que, si el servidor preguntado no dispone de la IP; en lugar de preguntar al siguiente servidor,  informa al anterior de cuál es el siguiente. De esa forma, el servidor que preguntó al principio vuelve a  preguntar, pero esta vez al servidor que se le ha indicado. Véase el ejemplo en la figura 2.18. 

Pero hay otro elemento importante: la cache DNS. Cuando un servidor pregunta por una IP y le dan la  respuesta, la almacena en una cache (memoria RAM), con el fin de poder servir dicha IP en futuras  peticiones (aunque no esté autorizado para ese host). El periodo en que se mantiene suele ser corto  (generalmente, dos días). 

 

Registros DNS 

Los servidores de nombres implementan registros de recursos (RR), que guarda las correspondencias  entre nombres de host y sus direcciones IP. Un RR es una 4‐tupla con el nombre, el tipo, el valor y el  tiempo de vida del RR. 

Si el tipo es A, entonces el nombre es el nombre del host y el valor, su dirección IP. 

Si el tipo es NS, entonces el nombre es un dominio y el valor, el nombre de host de un servidor  autorizado para los host de ese dominio. Este RR permite redirigir las consultas a lo largo de la cadena.  Si el tipo es CNAME, entonces el nombre es un alias y el valor, su nombre canónico. 

Si el tipo es MX, entonces el nombre es un alias de correo y valor, su nombre canónico (es lo mismo que  CNAME, pero para servidores de correo). 

(16)

Si un servidor está autorizado para un host, tendrá un RR de tipo A para ese host. Si no, tendrá uno de  tipo NS que le permita consultar a otro servidor. 

 

Mensajes DNS 

Hay dos tipos: de consulta y de respuesta. En la figura 2.19 se puede ver la estructura. 

• La cabecera (12 bytes) contiene la identificación de la consulta (16 bits), un conjunto de señales  (tipo de  mensaje, servidor autorizado, consulta  recursiva, recursión  disponible)  y cuatro  campos número de, que indica el número de ocurrencias de cada tipo de datos que hay a  continuación. 

• Cuestiones: Información sobre la pregunta que se está haciendo (nombre consultado, tipo de  consulta (A o MX)). 

• Respuestas: En una respuesta, contiene los RR para el nombre que se consultó. Puede haber  varios RR en una consulta (por ejemplo, para sitios web replicados). 

• Autorización: Contiene registros de otros servidores autorizados. 

• Información adicional: Tiene otros registros de ayuda. Por ejemplo, en la respuesta a una  consulta MX, la sección de respuesta contiene el RR que da el nombre de host canónico de un  servidor de correo y la sección adicional contiene un RR de tipo A con la dirección IP para dicho  nombre de host canónico del servidor de correo. 

Antiguamente, los contenidos del servidor eran configurados estáticamente (ej: con un fichero de  configuración indicado por el administrador); pero recientemente se ha añadido un comando UPDATE al  protocolo DNS para añadir o borrar dinámicamente de la BBDD. 

 

PROGRAMACIÓN DE SOCKETS CON TCP 

*** NOTA***  EN ESTE APARTADO Y LOS DOS SIGUIENTES SE HARÁ REFERENCIA A CÓDIGO FUENTE QUE  SE INCLUYE EN EL LIBRO. POR MOTIVOS DE SIMPLICIDAD NO SE COPIARÁN EN ESTE DOCUMENTO.  CONVIENE TENER EL LIBRO DISPONIBLE PARA CONSULTAR EL CÓDIGO Y SU EXPLICACIÓN. 

 

Al crear una aplicación de red, el programador debe desarrollar dos programas que se comunicarán en  red: un programa servidor y un programa cliente. Hay dos tipos de aplicaciones cliente‐servidor.  Aquellas que implementan un protocolo estándar definido en una RFC (por ejemplo, el FTP), en cuyo  caso deben ser conformes a las reglas definidas en dicha RFC; y las aplicaciones propietarias, en las que  cliente y servidor no tienen por qué seguir ninguna RFC. 

En las primeras, cualquier desarrollador independiente puede crear otro programa que interopere con  el primero, si sigue correctamente la RFC; mientras que con el segundo no podría. En las aplicaciones  propietarias, se debe tener especial cuidado en no usar algún número de puerto asignado a las  aplicaciones conocidas. 

(17)

Programación de redes con TCP 

Cuando un cliente contacta con un servidor, establece una comunicación con él. Para que el servidor  pueda atender dicha comunicación, debe estar ejecutando el proceso y tener un socket (podríamos  compararlo con una puerta). 

El cliente crea un socket, especificando la dirección del proceso del servidor e intenta establecer la  conexión TCP; realizando una sincronización en 3 pasos. El servidor, al recibir la señal, crea un socket  que se dedicará a ese cliente concreto. Cuando el cliente contacta con éste último socket, el servidor  inicia la orden accept() que creará un nuevo socket (es decir, el anterior únicamente servía para  establecer la conexión). Entre este último socket y el del cliente se establece finalmente la conexión  TCP. Esta conexión, que es directa entre ambos sockets, permitirá el envío garantizado de datos en  ambas direcciones. 

Se denomina flujo a la secuencia de datos que se envían desde o hacia un proceso (flujo de salida o  flujo de entrada respectivamente). La conexión TCP resulta ser una tubería entre ambos sockets.  El apartado 2.6.3 muestra un ejemplo en Java desarrollado para establecer dicha conexión TCP.  Conviene leerlo. 

 

PROGRAMACIÓN DE SOCKETS CON UDP 

UDP permite que se comuniquen dos o más procesos en distintos hosts. Sin embargo, UDP es un servicio  sin conexión(al contrario que TCP). Es decir, no hay una conexión dedicada, sino que cada paquete  enviado incluye la dirección IP y el número de puerto del proceso de destino. No se garantiza la entrega  del paquete en destino. 

En el libro aparece (y conviene leer) la versión para UDP del programa mencionado anteriormente.  Nótese que no hay fase de sincronización (por lo que no se requiere ningún socket de acogida), a los  sockets no se les conecta ningún flujo, el host emisor añade la dirección IP y número de puerto al  paquete y el proceso receptor debe desempaquetar lo recibido para poder leer los datos. 

 

CONSTRUCCIÓN DE UN SERVIDOR WEB SENCILLO 

La tarea es bastante más sencilla de lo que en principio pueda parecer. El ejemplo se realizará en Java.   

Funciones del servidor web 

El servidor  que  queremos  recibirá  peticiones  HTTP y  responderá con el  objeto solicitado. Para  simplificar, supondremos que el objeto solicitado siempre existe en el servidor. 

Véase el código java del apartado 2.8.1 (WebServidor.java). En él se puede ver cómo el servidor crea un  socket que escuche en un puerto TCP (similar a los códigos vistos anteriormente). Este socket aceptará  peticiones por el puerto 6789 y, al recibir una, creará un nuevo socket que se dedique a ese cliente. Se  crean dos flujos (uno de entrada y otro de salida) 

Al servidor le llega la petición HTTP por el flujo de entrada (a través del socket de conexión (el último  que hemos creado)) y lee la primera línea, que le indicará el archivo que ha solicitado (recuérdese la 

(18)

línea de cabecera       GET   {archivo}     {versión}). El sistema “troceará” la cadena para poder extraer el  nombre del archivo. 

Entonces, el servidor crea un flujo asociado al archivo y lee dicho archivo, colocando sus bytes en el  flujo. Por último, se prepara en el flujo de salida la cabecera HTTP que se enviará, seguido del archivo  que hemos almacenado en el flujo de entrada. 

Por último, una vez enviado, el servidor cierra la conexión TCP (cierra el socket).   

DISTRIBUCIÓN DE CONTENIDOS 

Los contenidos de Internet están distribuidos por todo el mundo. Sin embargo, HTTP permite a los  usuarios recuperar cualquier objeto; aunque esto puede incidir a veces en los tiempos de respuesta;  debido a posibles bajas tasas de transferencia en el camino, congestiones, sobrecargas del servidor…  Para reducir estos problemas, los objetos se replican por la Web, de forma que el usuario pueda acceder  al servidor que más rápidamente se lo pueda servir. Esto se conoce como distribución de contenidos.  Existen muchos esquemas para este fin, pero se pueden englobar en 3 categorías: cache webredes de  distribución de contenidos y compartición de archivos entre iguales

Cualquier persona u organización que ponga algún archivo a disposición del resto de usuarios es un  proveedor de contenidos. Se considera servidor de origen a aquel servidor que contiene la copia  original del archivo. 

 

Cache Web 

También se llama servidor proxy. Satisface las peticiones HTTP en nombre de un servidor original.  Almacena copias de los archivos que más recientemente han sido pedidos. El navegador del cliente  realiza una conexión TCP con el proxy y le manda una petición HTTP. Si el proxy dispone del objeto, se lo  envía como respuesta. Si no dispone de él, abrirá una nueva conexión TCP contra el servidor original  para solicitarle el objeto. Una vez que lo ha recibido, se lo reenvía al cliente por la primera conexión,  manteniendo una copia por si hay más peticiones similares. Así pues, un proxy (o cache) es a la vez  servidor y cliente. 

Generalmente, cuando introducimos una URL en nuestro navegador, la petición se redirige al proxy o  cache del ISP con quien tengamos contratada la conexión. La cache permite reducir el tiempo de  respuesta (si dispone del objeto), ya que generalmente la conexión entre el cliente y la cache del ISP es  de alta velocidad. Además, permite reducir el tráfico de Internet, lo cual ahorra costes a las instituciones  y se mejora el rendimiento de todas las aplicaciones. Además, la jerarquía de caches permite una  distribución rápida de contenidos. 

Pero veamos un ejemplo: la figura 2.28 muestra una red que está conectada a Internet. Los servidores  de origen están distribuidos por todo el mundo. El enlace que conecta ambas redes tiene una tasa de  1.5 Mbps. La tasa media de peticiones de los clientes a los servidores de origen será de 15 por segundo.  El retardo Internet (desde que envía la petición hasta que recibe la respuesta) será de 2 segundos. El  tamaño medio de los objetos será de 100.000 bits. 

Así pues, la intensidad de tráfico en la LAN (vimos este concepto en el capítulo 1) es el siguiente:  (15 peticiones/seg) ∙ (100 kbits/petición) / (10Mbps) = 0.15 

(19)

Y la intensidad de tráfico en el enlace de acceso (entre los dos routers) es de  (15 peticiones/seg) ∙ (100 kbits/petición) / (1.5Mbps) = 1 

Se puede ver claramente la diferencia de intensidades en ambos lugares. El tiempo de respuesta medio  puede crecer rápidamente. Podría solucionarse aumentando la tasa de acceso en el enlace de acceso,  pero sería demasiado costoso. 

Otra solución es utilizar una cache dentro de la red institucional (figura 2.29). Generalmente, las tasas de  acierto de la cache están entre 0.2 y 0.7. Supongamos en este caso que es 0.4. El 40% de las peticiones  se podrán servir en 10 ms. Así pues, la intensidad de tráfico en Internet se reduciría de 1 a 0.6. 

Por tanto, el retardo medio es:   0.4 ∙ (0.01 segundos) + 0.6 ∙ (2.01 segundos) = 1.2 segundos. 

El coste de comprar e instalar la cache es mucho más barato (puede instalarse sobre PC’s baratos) que  aumentar la tasa del enlace de acceso. 

 

Cache cooperativa 

Las caches pueden cooperar entre sí para mejorar el rendimiento. Si la cache local no dispone del  objeto, puede reenviar la petición a la cache del ISP, que le responderá con el objeto si lo tiene; y si no,  consultará al servidor de origen. Además, la cache local hará una copia del objeto cuando pase por ella.  Una cache de alto nivel suele tener una gran tasa de aciertos, debido a que es usada por muchos  usuarios. 

Un ejemplo es Janet Web Cache Service (JWCS). 

Alternativamente, se puede tener un grupo de caches en una misma LAN, cuando una única no pueda  llevar todo el tráfico. Para que el cliente sepa a qué cache debe solicitar el objeto, se usa un rutado por  dispersión

 

Redes de distribución de contenidos (CDN) 

Se hicieron populares a finales de los 90’s. Las compañías CDN instala cientos de servidores CDN por  Internet, en los cuales se replica los contenidos de sus clientes (empresas que contratan los servicios de  estas compañías), manteniendo las réplicas actualizadas ante las actualizaciones que haga el cliente  (nótese que hablamos de cliente como empresa, no como host). Cuando un usuario solicite un objeto,  se lo servirá el servidor CDN que más rápido pueda hacerlo (más cercanía, menos congestión…). 

Muchas compañías independientes, como Yahoo!, utilizan este servicio. Cuando el cliente actualiza un  contenido, un nodo de distribución envía la actualización a los servidores CND (figura 2.30). 

Cuando el proveedor de contenidos recibe la petición de un objeto que debería servirse desde un CDN,  envía, en la respuesta, la referencia adecuada al servidor al que tiene que consultar. El cliente  (navegador) consulta al servidor DNS acerca de la nueva URL y, acto seguido, solicita el objeto al  servidor CND indicado. 

Las compañías CND almacenan para cada ISP qué servidor es el mejor, basándose en el conocimiento de  las tablas de rutado  en Internet (BGP). 

(20)

Compartición de archivos entre iguales 

Un usuario puede recuperar información de otro PC de la red. Esta es la base de las llamadas redes P2P  (Peer To Peer). 

Cuando un usuario busca un archivo en estas redes, se le muestra una lista de iguales (otros PC’s que en  ese momento están conectados a la red) que disponen de dicho archivo. Cada registro de esta lista  puede ir acompañado de otra información, como por ejemplo el ancho de banda de acceso. Cuando  selecciona un igual, se establece una conexión TCP por la que se transmite el fichero. Si el que hace de  proveedor se desconecta, el software P2P puede buscar otro igual del que seguir descargando el  fichero. 

A la vez que un equipo descarga archivos, puede servir los suyos propios. Es decir, todos los iguales son  simultáneamente consumidores y proveedores (distribuidores) de contenidos. 

Estas redes no utilizan terceros (servidores cache, servidores de origen…), sino que el archivo se  transfiere de forma directa. Estas redes son escalables, ya que aprovechan los recursos de todos los 

iguales conectados (a veces, millones). Sin embargo, podría considerarse como tercero a otro cliente (es  decir, Pedro descarga un mp3 de Juan pero yo, a la vez, lo voy descargando del equipo de Pedro).  Vamos a ver 3 arquitecturas para que un igual pueda conocer las direcciones IP de aquellos iguales que  contienen el objeto deseado (teniendo en cuenta que se conectan y desconectan con frecuencia). 

Directorio centralizado 

Napster fue la primera compañía que ofreció un servicio de distribución de MP3 de igual a igual a gran  escala. Su arquitectura se basa en un servidor central que contenía un directorio de contenidos  actualizado. 

Cuando un igual se conecta, envía al servidor una lista actualizada de los objetos que puede compartir,  que se añade a una BBDD en el servidor que relaciona cada objeto con un conjunto de direcciones. Los  iguales envían información actualizada cada vez que hay cambios (nuevos archivos o se borran).  Además, el servidor puede reconocer cuándo un igual se desconecta, para actualizar el conjunto de IP’s  disponibles. Para ello, puede mandar mensajes periódicos (si no responde, se ha desconectado) o  mantener una conexión TCP para cada igual, que se cerrará cuando se desconecte). 

Pero tiene inconvenientes: si el servidor falla, falla toda la red. Además, supone un cuello de botella  debido a la gran cantidad de información que tiene que pasar por ese punto. Además, está el tema del 

copyright. Un directorio centralizado es más fácil de detener por motivos del copyright que uno  descentralizado. 

Directorio descentralizado 

Cierto número de iguales son nombrados líderes de grupo; es decir, harán las veces de directorio.  Cuando se conecta un igual, envía al líder del grupo el listado de objetos (igual que vimos antes), que la  guarda en una BBDD, manteniendo información sólo de las conexiones de su grupo. 

Estas redes lógicas de cada grupo se denominan redes de superposición. En estas redes existe un arco  entre cada igual y el líder del grupo. Y también hay un arco entre cada par de líderes. Estos enlaces no  son físicos, sino virtuales. 

(21)

En el sistema P2P existe uno o más nodos de arranque, con los cuales contacta un terminal nuevo que  quiere incorporarse. El nodo de arranque le responde con la IP del grupo, para establecer un arco entre  dicho líder y el nuevo terminal. 

De esta forma, no se centraliza la BBDD en un servidor dedicado, sino que está distribuida. Cada líder  hace un seguimiento de la información de su grupo. Además, es más complicado paralizar la red de esta  forma. 

Sin embargo, tiene sus inconvenientes. El protocolo necesario para construir y mantener las redes de  superposición es bastante complejo. Si un líder se desconecta, el resto de los nodos deben ser asignados  a otros líderes. Debido a la carga y responsabilidad que recaen en los líderes, éstos pueden suponer  cuellos de botella. Además, aún no es completamente un sistema sin servidor, ya que los nodos de  arranque deben estar siempre activos. 

Inundación de consultas 

Es característica de la aplicación de compartición de archivos P2P Gnutella. En esta caso, no existen  líderes, aunque sigue habiendo una organización en redes de superposición. Un terminal se accede a la  misma red igual que antes, pero la IP que recibe para conectarse es cualquiera de los iguales de la red  (proporcionada, igualmente, por un nodo de arranque). 

Para solicitar un archivo, un nodo envía por inundación de consultas su consulta a todos sus vecinos de  la red. Cada uno de estos reenvía la consulta también por inundación. Si un nodo posee el archivo, envía  una respuesta al que la solicitó. 

Aquí, todos los iguales tienen la misma carga y, al no haber ninguna BBDD, se simplifica el sistema. Sin  embargo, existe un gran tráfico de consultas, con lo que se suele limitar el número de saltos que puede  dar la consulta, aunque esta medida disminuye las posibilidades de encontrar el nodo adecuado.  Las aplicaciones P2P, junto con la Web y la mensajería instantánea; son las aplicaciones que más  aceptación y difusión han tenido. Otras aplicaciones, como la conferencia multimedia o la retransmisión  de multimedia, están difundidas a una escala mucho menor. 

Referencias

Documento similar

• Servidor de correo: almacena, envía, recibe, enruta y realiza otras operaciones relacionadas con el correo electrónico para los clientes de la red.. • Servidor

Configuramos la cuota de discos para los usuarios empleados en el controlador de dominio y en el adicional, pulsamos botón derecho sobre el disco duro H: y vamos a la opción de

Gastos derivados de la recaudación de los derechos económicos de la entidad local o de sus organis- mos autónomos cuando aquélla se efectúe por otras enti- dades locales o

El servidor recibe las tramas generadas en ficheros de texto enviados periódicamente por el cliente y descargados de un servidor FTP, estos archivos son los que la

A continuación se mencionará un panorama general de la capa de servicio de control, que es la capa de comunicación y manipulación del servidor con el móvil, en el

 Posee una herramienta que hace que el trabajo de compilar el núcleo del sistema sea mínima, Genkernel, la cual hace poco fue portada para otras distribuciones

por unidad de tiempo (throughput) en estado estacionario de las transiciones.. de una red de Petri

 The Things Network implementar la capa/arquitectura LoRaWAN, mediante el servidor de red unión y parte del de aplicación, incluso permite integración con MQTT.. Está