Documentos de Académico
Documentos de Profesional
Documentos de Cultura
1
Presentación
La evolución de las tecnologías de la información y comunicación en el mundo
nos permite implementar diferentes aplicaciones en la red, debido esto la
generalización del termino cloud computing (servicios en el internet), la
popular nube, como paradigma de todo tipo, tanto organizativo como de
diseño de sistemas, conlleva a una interesante reflexión.
Si la nube permite a los clientes y usuarios poder obtener funcionalidades a
través de servicios, de los cuales solo conocen su contrato de servicio pero
ignoran el diseño y la localización. Muchas veces olvidamos que los servicios
han de ser fabricados y que para ese trabajo hay que prepararse, entonces aquí
ingresa el diseño de los sistemas distribuidos.
Un sistema distribuido es un sistema de información en el cual las funciones se
reparten por áreas de trabajo diferentes que trabajan de forma coordinada para
asumir los objetivos que la organización asigna a ese sistema de información.
En este manual se trata de dar un alcance al estudiante de cómo diseñar
sistemas distribuidos, que consiste en crear aplicaciones de software que,
utilizando servicios y ayudándose de la conectividad, participen y se integren
en este entorno de forma transparente a las plataformas de proceso y de
almacenamiento de datos, dotándolas de los recursos necesarios para
gestionarse de forma integrada con el resto del sistema distribuido.
Los sistemas distribuidos que se diseñen y construyan deben estar alineados
con los objetivos de negocio de la empresa, aumentar la eficacia y eficiencia
operacional de la compañía y permitir el mayor rendimiento con el menor
costo en las estructuras informáticas que dan soporte.
El autor
2
Programación general
3
Tabla de contenido Página
Presentación
Programa general
Unidad Académica 01
Sistemas Distribuidos 4
1. Caracteristicas de los sistemas distribuidos 4
2. Recursos compartidos y web. 10
3. Desafios de los sistemas distribuidos 13
Unidad Académica 02
4
UNIDAD ACADÉMICA Nº 01
Sistemas Distribuidos
Un sistemas Distribuido es aquel en el que los componentes hardware o
software, localizados en computadores unidos mediante red, comunican y
coordinan sus acciones sólo mediante paso de mensajes.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir y describir que es un Sistemas Distribuidos.
Describir las caracteristicas de un Sistema Distribuidos.
Describir los desafíos de los Sistemas Distribuidos.
Realizar ejemplos de Sistemas Distribuidos.
5
Los computadores que están conectados
mediante una red pueden estar separados
especialmente por cualquier distancia.
Pueden estar en continentes distintos, en el
mismo edificio o en la misma habitación.
Nuestra definición de Sistema Distribuido
tiene las siguientes consecuencias
significativas: Figura 2. Internet
6
lenta. De forma similar, la parada de un computador o la terminación
inesperada de un programa en alguna parte del sistema no se da a
conocer inmediatamente a los demás componentes con los que se
comunica.
Razones de Su Origen.-
Compartir Recursos:
Procesos
Archivos
Servicios
7
Ejemplo 2:
Intranets:
Una intranet es una porción de internet que es, administrada
separadamente y que tiene un límite que puede ser configurado para hacer
cumplir políticas de seguridad local. Está compuesta de varias redes de área
local (LANs) enlazadas por conexiones backbone. Una intranet está
conectada a Internet por medio de un encaminador (router), lo que permite
a los usuarios hacer uso de servicios de otro sitio como web o el correo
electrónico, en este escenario el papel del cortafuegos es proteger la intranet
impidiendo que entren o salgan mensajes no autorizados. Un cortafuegos se
implementa filtrando los mensajes que entran y salen, por ejemplo de
acuerdo con su origen o destino. Un cortafuegos podría permitir, sólo
aquellos mensajes relacionados con el correo electrónico el acceso web
entrar o salir de la intranet que protege.
Ejemplo 3:
Computación Móvil y Ubicua:
Los avances tecnológicos en la miniaturización de dispositivos y en redes
inalámbricas han llevado cada vez más a la integración de dispositivos de
computación pequeños y portátiles en sistemas distribuidos. Estos
dispositivos incluyen: Computadoras portátiles, Dispositivos de manos
como asistentes digitales personales, teléfonos móviles, buscapersonas y
videocámaras o cámaras digitales. También dispositivos que se puedan
llevar puestos como relojes inteligentes con funcionalidad semejante a los
asistentes digitales personales, y Dispositivos insertados en aparatos como
lavadoras, sistemas de alta fidelidad, coches y frigoríficos.
Se llama computación móvil a la realización de tareas de cómputo mientras
el usuario está en movimiento o visitando otros lugares distintos de su
entorno habitual. En la computación móvil, los usuarios que están fuera de
su hogar intranet disponen de la posibilidad de acceder a los recursos
mediante los dispositivos que llevan con ellos. Pueden continuar
accediendo a internet; pueden acceder a los recursos de su intranet; y se
8
está incrementando la posibilidad de que utilicen recursos como
impresoras, que están suficientemente próximos a donde se encuentren.
Computación ubicua es la utilización concertada de muchos dispositivos de
computación pequeños y baratos que están presentes en los entornos físicos
de los usuarios, incluyendo la casa, la oficina y otros. El término ubicuo está
pensado para sugerir que los pequeños dispositivos llegarán a estar tan
extendidos en los objetos de cada día que apenas nos daremos cuenta de
ellos. O sea, su comportamiento computacional estará ligado con su función
física de forma ínfima y transparente. Por ejemplo, podría ser conveniente
para los usuarios controlar su lavadora y su equipo de alta fidelidad desde
un dispositivo de control remoto universal en su casa. Del mismo modo, la
lavadora podría avisar al usuario a través de una tarjeta inteligente o reloj
cuando el lavado hubiera finalizado.
La computación ubicua y móvil se solapan, puesto que un usuario
moviéndose puede beneficiarse, en principio, de los computadores que
están en cualquier parte. Pero, en general, son distintas. La computación
ubicua podrá beneficiar a los usuarios mientras permanecen en un entorno
sencillo como su casa o un hospital. De forma similar, la computación móvil
tiene ventajas si sólo se consideran computadores convencionales y
dispositivos como computadores portátiles e impresoras.
9
2. RECURSOS COMPARTIDOS Y WEB.
Como estamos viendo hasta ahora que los sistemas distribuidos trabajan a
nivel de redes, y en este escenario normalmente compartimos recursos
hardware como impresoras, recursos de datos como ficheros, y recursos con
una funcionalidad más específica como máquinas de búsqueda.
Considerado desde el punto de vista de la provisión de hardware, se
comparten equipos como impresoras y discos para reducir costes. En la
práctica los patrones de compartir recursos varían mucho en su enlace y
cuán estrechamente trabajan juntos los usuarios. Los recursos en un sistema
distribuido están encapsulados físicamente con los computadores y solo
pueden ser accedidos desde otros computadores y sólo pueden ser
accedidos desde otros computadores a través de comunicación. Para que se
compartan de forma efectiva, cada recurso debe ser gestionado por un
programa que ofrece una interfaz de comunicación permitiendo que se
acceda y actualice el recurso de forma fiable y consistente.
El termino servidor es probablemente familiar para la mayoría de los
lectores. Se refiere a un programa en ejecución (un proceso) en un
computador en red que acepta peticiones de programas que se están
ejecutando en otros computadores para realizar un servicio y responder
adecuadamente. Los procesos solicitantes son llamados clientes. Las
peticiones se envían a través de mensajes desde los clientes al servidor y las
contestaciones se envían mediante mensajes desde el servidor a los clientes.
Cuando un cliente envía una petición para que se realice una operación,
decimos que el cliente invoca una operación del servidor. Se llama
invocación remota a una interacción completa entre un cliente y un
servidor, desde el instante en el que el cliente envía su petición hasta que
recibe la respuesta del servidor.
El mismo proceso puede ser tanto un cliente como un servidor, puesto que
los servidores a veces invocan operaciones en otros servidores. Los
términos cliente y servidor se aplican a los roles desempeñados en una
única solicitud. Ambos son distintos, en muchos aspectos, los clientes son
10
activos y los servidores pasivos, los servidores se están ejecutando
continuamente, mientras que los clientes sólo lo hacen el tiempo que duran
las aplicaciones de las que forman parte.
Hay que señalar que por defecto los términos cliente y servidor se refieren
a procesos no a los computadores en las que se ejecutan, aunque en
lenguaje coloquial dichos términos se refieren también a los propios
computadores.
2.1 El World Wide Web
Es un sistema en evolución para publicar y acceder a recursos y servicios a
través de internet. Utilizando el software de un navegador web, fácilmente
disponible como Netscape o Internet Explorer, los usuarios utilizan el Web
para recuperar y ver documentos de muchas clases, para escuchar
secuencias de audio y ver secuencias de vídeos, y para interaccionar con un
conjunto ilimitado de servicios.
El Web es un sistema abierto, puede ser ampliado e implementado en
nuevas formas sin modificar su funcionalidad existente.
Primero, su operación está basada en estándares de comunicación y en
documentos estándares que están publicados libremente e implementados
en muchos casos sobre diferentes plataformas; y existen muchas
implementaciones de servidores web.
Segundo, el web es abierto respecto a los tipos de recursos que pueden ser
publicados y compartidos en él. En su forma más simple, un recurso es una
11
página web o algún otro tipo de contenido que puede ser almacenada en un
fichero y presentado al usuario, como ficheros de programa, de imágenes,
de sonido y documentos en formato PostScript o PDF.
El Web está basado en tres componentes tecnológicos de carácter estándar
básicos:
El lenguaje de etiquetado de hipertexto (HTML, Hypertext Markup
Languaje) es un lenguaje para especificar el contenido y el diseño de las
páginas que son mostradas para los navegadores.
Localizadores Uniformes de Recursos (URL, Uniform Resource Locator)
que identifican documentos y otros recursos almacenados como parte de
la Web.
El protocolo de transferencia hipertexto – (HTTP, hyperText Transfer
Protocol) mediante la cual los navegadores y otros clientes obtienen
documentos y otros recursos de los servidores web.
12
3. DESAFIOS DE LOS SISTEMAS DISTRIBUIDOS
En la actualidad tenemos muchos sistemas distribuidos a nuestro servicio
en la vida diaria, aquí tratamos de dar algunos criterios para diseñar
sistemas distribuidos teniendo en cuenta sus características
3.1 Heterogeneidad
Se refiere a la variedad y diferencia que podemos encontrar en los
elementos que componen una red de computadores sobre la que se
ejecuta un sistema distribuido. (Redes, hardware, sistemas operativos,
lenguajes de programación, etc.).
13
Lenguajes de programación
Implementaciones de diferentes desarrolladores.
3.1.1. Middleware
El middleware es un software de conectividad que ofrece un conjunto
de servicios que hacen posible el funcionamiento de aplicaciones
distribuidas sobre plataformas heterogéneas. Funciona como una capa
de abstracción de software distribuida, que se sitúa entre las capas de
aplicaciones y las capas inferiores (sistema operativo y red). El
middleware nos abstrae de la complejidad y heterogeneidad de las
redes de comunicaciones subyacentes, así como de los sistemas
operativos y lenguajes de programación, proporcionando una API para
la fácil programación y manejo de aplicaciones distribuidas.
Dependiendo del problema a resolver y de las funciones necesarias,
serán útiles diferentes tipo de servicios de middleware
Es el estrato de software que provee una abstracción de programación,
así como un enmascaramiento de la heterogeneidad subyacente de las
redes, hardware, sistemas operativos y lenguajes de programación.
Ejem: Corba, Java RMI.
14
3.1.2. Heterogeneidad y código móvil
Código Móvil: código que puede enviarse desde un computador a
otro y ejecutarse en este último.
El concepto de máquina virtual ofrece un modo de crear código
ejecutable sobre cualquier hardware.
3.2. Extensibilidad
Es la característica que determina si el sistema puede extenderse de
varias maneras. Un sistema puede ser abierto o cerrado con respecto a
extensiones de hardware o de software.
Para lograr la extensibilidad es imprescindible que las interfaces clave
sean publicadas.
Los Sistemas Distribuidos Abiertos pueden extenderse a nivel de
hardware mediante la inclusión de computadoras a la red y a nivel de
software por la introducción de nuevos servicios y la reimplementación
de los antiguos.
Otro beneficio de los sistemas abiertos es su independencia de
proveedores concretos.
3.3. Seguridad
La seguridad tiene tres componentes:
Confidencialidad: protección contra individuos no autorizados.
Integridad: protección contra la alteración o corrupción.
Disponibilidad: protección contra la interferencia que impide el acceso a
los recursos.
Existen dos desafíos que no han sido resueltos en su totalidad:
servicio.
3.4. Escalabilidad
Se dice que un sistema es escalable si conserva su efectividad cuando
ocurre un incremento significativo en el número de recursos y en el
número de usuarios.
El diseño de SD escalables presenta los siguientes retos:
15
Control de costo de los recursos físicos: para que un sistema con n usuarios
sea escalable, la cantidad de recursos físicos necesarios para soportarlo
debería ser O(n).
Controlar la degradación del rendimiento: Ejm: Los algoritmos que emplean
estructuras jerárquicas se comportan mejor frente al crecimiento de la
escala, que los algoritmos que emplean estructuras lineales.
Evitar cuellos de botella: los algoritmos deberían ser descentralizados.
Prevenir el desbordamiento de los recursos de software.
3. 5. Tratamiento de Fallos.
Detección de fallos:
Ejem. Se pueden utilizar sumas de comprobación (checksums) para
detectar datos corruptos en un mensaje.
Enmarascamiento de fallos:
Ejem. Los mensajes pueden retransmitirse, Replicar los datos.
Tolerancia de fallos:
Los programas clientes de los servicios pueden diseñarse para
tolerar ciertos fallos. Esto implica que los usuarios tendrán también
que tolerarlos.
Recuperación de fallos:
Implica el diseño de software en el que, tras una caída del servidor,
el estado de los datos puede reponerse o retractarse (rollback) a
unasituación anterior.
Redundancia:
Emplear componentes redundantes.
3.6. Concurrencia
Existe la posibilidad de acceso concurrente a un mismo recurso. La
concurrencia en los servidores se puede lograr a través de threads.
Cada objeto que represente un recurso compartido debe
responsabilizarse de garantizar que opera correctamente en un entorno
concurrente.
16
Para que un objeto sea seguro en un entorno concurrente, sus
operaciones deben sincronizarse de forma que sus datos permanezcan
consistentes.
3.7. Transparencia
Transparencia de acceso: permite acceder a los recursos locales y
remotos empleando operaciones idénticas.
Transparencia de ubicación: permite acceder a los recursos sin conocer
su localización.
Transparencia de concurrencia: permite que varios procesos operen
concurrentemente sobre recursos compartidos sin interferencia mutua.
Transparencia de replicación: permite replicar los recursos sin que los
usuarios y los programadores necesiten su conocimiento.
Transparencia frente a fallos: permite ocultar fallos.
Transparencia de movilidad: permite la reubicación de recursos y
clientes en un sistema sin afectar la operación de los usuarios y los
programas.
Transparencia de rendimiento: permite reconfigurar el sistema para
mejorar el desempeño según varíe su carga.
Transparencia al escalado: permite al sistema y a las aplicaciones
expandirse en tamaño sin cambiar la estructura del sistema o los
algoritmos de aplicación.
ACTIVIDAD
Tome World Wide Web como ejemplo para ilustrarel concepto de
compartición de recursos, cliente y servidor.
Los recursos en el World Wide Web y otros servicios se direccionan
mediante URL.
o Describa el significado de las siglas URL.
o Proporcione ejemplos de tres tipos de recursos web a los que
puede darse el nombre de URL.
17
o Enumere los tres componentes principales de un URL,
indicando como se delimitan e ilustre cada uno a partir de un
ejemplo.
RESUMEN
Los Sistemas Distribuidos están por todas partes, internet permite que
los usuarios de todo el mundo accedan a sus servicios donde quieran que
estén situados. Cada organización administra una intranet, que provee
servcios locales y servicios de internet a los usuarios locales y
habitualmente proporciona servicios a otros usuarios de internet. Es
posible construir pequeños sistemas distribuidos con computadores
portátiles y otros dispositivos computacionales pequeños conectados a
una red inalámbrica.
La compartición de recursos y servicios de red es el principal factor que
motiva la construcción de sistemas distribuidos. Recursos como
impresoras, archivos, páginas web o registros de base de datos se
administran mediante servidores del tipo apropiado. Las infraestructuras
físicas y lógicas de red nos permiten administrar y direccionar los
paquetes en la red y los servidores nos permiten implemntar y
adminsitrar los servicios en la red, como por ejemplo los servidores web
administran páginas web y otros recursos web. Los recursos son
accedidos por clientes, por ejemplo los clientes de los servidores web son
los Browser o navegadores web.
La construcción de los sistemas distribuidos presentan muchos desafíos
como la heterogeneidad, extensibilidad, seguridad, escalabilidad,
tratamiento de fallas, concurrencia, transparencia los cuales deben ser
abordados para su construccion.
BIBLIOGRAFIA RECOMENDADA
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
18
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o Proponga cinco tipos de recursos hardware y cinco tipos de
recursos de software o de datos que puedan compartirse
útilmente. Proponga ejemplos de su entorno, compratido tal y
como ocurre en la practica en los sistemas distribuidos.
o Un usuario llega a una estación de ferrocarril que no conoce,
portando un PDA capaz de conectarse a una red inalámbrica.
Sugiera como podría proporcionársele al usuario información
sobre los servicios locales y las comodidades de la estación, sin
necesidad de insertar el nombre de la estación o sus
caracteristicas. ¿Qué dificultades hay que superar?.
o ¿Cuales son las ventajas y desventajas de HTML, URL, HTTP,
como tecnologías de base para la consulta y visualización de la
información?, ¿Son algunas de estas tecnolgias adecuadas como
plataforma de computo cliente servidor en general?
o ¿Cómo podría sincronizerse los relojes de dos computadores
unidos por una red local, sin hacer uso de referencia temporal
externa?, ¿Cómo podrían sincronizarse los relojes de un mayor
numero de computadores conectados a Internet?.
19
UNIDAD ACADÉMICA Nº 02
MODELOS DE SISTEMAS
DISTRIBUIDOS
Los sistemas pensados para trabajar en entornos reales deben diseñarse para
funcionar correctamente en el rango de circunstancias mas amplio posible y
considerando todas las dificultades de amenazas (modos de utilización muy
variable, amplio rango de entornos, problemas internos, amenazas externas).
Esto conlleva a sugerir que los sistemas distribuidos de tipos diferentes
comparten importantes propiedades subyacentes y dan lugar a problemas de
diseño comunes, en este capitulo se presenta las propiedades y temas de diseño
comunes para los sistemas distribuidos bajo la forma de de modelos
descriptivos. Cada modelo está pensado para proporcionar una descripción
abstracta, simplificada pero consistente, de cada aspecto relevante del diseño de
un sistema distribuido.
En los modelos de Sistemas Distribuidos tenemos 2 tipos:
Los modelos Arquitectónicos
Los modelos Fundamentales.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir los modelos de Sistemas Distribuidos.
Definir y describir los modelos arquitectónicos de Sistema Distribuidos y
sus variantes.
Definir y describir los modelos fundamentales de Sistemas Distribuidos.
Realizar ejemplos de Sistemas Distribuidos arquitectónicos y
fundamentales.
20
2.1 MODELOS ARQUITECTÓNICOS
La arquitectura de un sistema es su estructura en términos de componentes
especificados por separado. El objetivo global es asegurar que la estructura
satisfaga las demandas presentes y previsibles sobre él. Es asi que el diseño
arquitectónico de un edificio tiene aspectos similares y determina no solo su
apariencia, sino también su estructura general y su estilo arquitectónico
(gótico, neoclásico, moderno), proporcionando un marco de referencia
consistente para el diseño.
Un Modelo Arquitectónico de un Sistema Distribuido, trata sobre la
colocación de sus partes y las relaciones entre ellas, también simplifica y
abstrae, inicialmente las funciones de los componentes individuales de
dicho sistema y posteriormente considera 2 criterios:
La ubicación de los componentes en la red de computadores, buscando
definir patrones utilizables para la distribución de datos y carga de
trabajo.
Las interrelaciones entre los componentes, sus papeles funcionales y los
patrones de comunicación entre ellos el modelo cliente-servidor y el
modelo de procesos de ¨igual a igual¨ (peer to peer).
21
La plataforma
Contiene los servicios propios de cada computadora concreta.
Depende del Hardware y del Sistema Operativo
Aplicación de
servicios
Middleware
Sistema
Operativo
Plataforma
Computador y
Hw. de red
Figura 1. Capas de servicio software y hardware
en los sistemas distribuidos
Middleware:
Es una capa de software cuyo propósito es enmascarar la
heterogeneidad y proporcionar un modelo de programación
conveniente para los programadores de aplicaciones.
Aplicación de
servicios
Middleware
Sistema
Operativo
Computador y
Hw. de red
Figura 2. Middleware
22
llamadas a procedimientos remotos, comunicación entre un grupo
de procesos, etc.
Ejem: Sun RPC (llamadas a procedimientos remotos), CORBA
(middleware orientado a objeto), Java RMI (invocación de objetos
remotos en Java), DCOM (Modelo común de objetos distribuidos
de Microsoft).
El middleware también puede proporcionar otros servicios, aparte
de la comunicación, para su uso en programas de aplicación.
Por ejemplo: gestión de nombres, seguridad, almacenamiento
persistente, etc.
El middleware
Permite enmascarar la heterogeneidad.
Puede dar un modelo y una interfaz de programación utilizable
Puede soportar abstracciones como:
– Procedimientos de invocación remota (RPC).
– Comunicación entre grupos de procesos.
– Eventos, replicación, servicios multimedia, etc.
¿Qué forma tiene el Middleware?
– Bibliotecas adicionales
Procedimientos de invocación remota(RPC).
Objetos Remotos (RMI, CORBA)
– Herramientas de Programación.
Lenguajes de definición de Interfaces + compiladores para
ellos.
– Servicios Básicos de ayuda
Servicio de Nombres para buscar objetos
De notificación de eventos
De control de Transacciones, etc.
¿Qué limitaciones impone?
– Se incrementa la complejidad arquitectónica.
Hay mas niveles
23
– Hay que aprender más herramientas.
– Se pierde el control de bajo nivel sobre los modos de fallo.
– Se depende de varias personas.
24
Servicios proporcionados por múltiples servidores.
Los servicios pueden implementarse como distintos procesos de
servidor en computadores separados interaccionando cuando es
necesario, para proporcionar un servicio a los procesos clientes. Lo
servidores pueden dividir el conjunto de objetos en los que está
basado el servicio y distribuírselo entre ellos mismos, o pueden
mantener copias replicas de ellos en varias maquinas
– Muy usada en DNS, Web y NIS.
– Cache almacena los recursos más probablemente usados.
– Un cache puede responder a un esquema de Proxy.
Los servidores Proxy para la Web aumentan la disponibilidad
Servidor
Cliente
Servidor
Cliente
Servidor
25
Los caches pueden estar ubicados en los clientes o en un servidor
Proxy que se puede compartir desde varios clientes.
El propósito de los servidores proxy es incrementar la
disponibilidad y las prestaciones del servicio, reduciendo la carga
en las redes de área Amplia y en los servidores WEB.
Servidores Proxy y Caches
Procesos Peer-to-Peer
En esta arquitectura todos los procesos desempeñan tareas
semejantes, interactuando cooperativamente como iguales para
realizar una actividad distribuida de cómputo sin distinción entre
clientes y servidores.
Los procesos pares mantienen la consistencia de los recursos y
sincroniza las acciones a nivel de aplicación.
26
Útil al descomponer aplicaciones en tareas coordinadas.
Ejemplos: Cooperación y coordinación, Algoritmos
descentralizados, Coordinación de agendas, trabajo colaborativo.
27
Figura 9. Applet del tipo web.
Algunas Posibilidades:
Según la ubicación del código del proceso del cliente:
Código estático
Código con movilidad (recolocación del proceso)
Según la proporción de tareas que recae sobre el cliente y el servidor:
Clientes al estilo habitual
Clientes ligeros de aplicaciones complejas
Computadoras de red
28
Servicio de detección.
29
Calidad de Servicio
Algunas aplicaciones mantienen datos críticos en el tiempo, flujos
de datos que precisan ser procesados o transferidos de un proceso a
otro a una tasa prefijada.
QoS es la capacidad de los sistemas para satisfacer dichos límites.
El satisfacer tales exigencias depende de la disponibilidad de los
recursos en los instantes adecuados.
Cada recurso crítico debe reservarse para las aplicaciones que
requieren QoS. Los administradores de los recursos deben
proporcionar la garantía. Las solicitudes de reserva que no se
puedan cumplir se rechazan.
Aspectos de Fiabilidad (que el sistema funcione correctamente)
Correctitud
Tolerancia de fallos
Seguridad:
Confidencialidad
Integridad
Disponibilidad.
Tolerancia a Fallos: las aplicaciones estables deben continuar
funcionando correctamente en presencia de fallos de hw, sw y
redes.
Se logra con redundancia
Para hacer fiable un protocolo de comunicación se emplean
otras técnicas. Ejem. Retransmitir el mensaje.
Seguridad
Necesidad de ubicar datos y otros recursos sensibles sólo en
aquellos computadores equipados de un modo eficaz contra el
ataque.
30
2.2 MODELOS FUNDAMENTALES
Los modelos fundamentales están implicados en una descripción más
formal de las propiedades que son comunes en los modelos arquitectónicos.
Ayudan a localizar los problemas clave para los diseñadores de Sistemas
Distribuidos. Su propósito es especificar los problemas, dificultades y
amenazas que deben superarse para desarrollar sistemas distribuidos
fiables.
Principales modelos
De Interacción
De Fallo
De seguridad
2.2.1. Modelo de Interacción
Trata sobre el rendimiento y sobre la dificultad de poner límites
temporales en un sistema distribuido.
La forma en que se produce el “paso de mensajes” entre los procesos
restringe el modo de operación
31
Ancho de banda: cantidad total de información que se puede
transmitir en un momento dado
Jitter o fluctuación: variación en el tiempo invertido en
completar el reparto de una serie de mensajes.
b. Problemas presentados en la noción de Tiempo:
Derivas Diferentes (diferencia de horaria)
Tasas de deriva Diferentes (Ritmo de deriva)
2.1.1.1 Variantes del Modelo de Interacción
Sistemas distribuidos síncronos
El tiempo de ejecución de cada etapa de un proceso tiene
límites superior e inferior conocidos.
Cada mensaje se recibe en un tiempo limitado conocido.
Cada proceso tiene un reloj local cuya tasa de deriva sobre
el tiempo real tiene un límite conocido.
Es posible sugerir valores para esos límites pero es difícil
obtener valores realistas y dar garantías sobre los valores
elegidos.
Se pueden tener timeouts. Cuando expiran significa que
ha fallado el proceso.
Hay que garantizar ciclos suficientes de procesador,
capacidad de red y proveer relojes con tasa de deriva
limitadas.
Sistemas distribuidos asíncronos.
Son aquellos donde no existen limitaciones sobre:
La velocidad de procesamiento
Los retardos de transmisión de mensajes
Las tasas de deriva del reloj.
Los sistemas reales son frecuentemente asíncronos. Pero
existen problemas que no pueden resolverse con este modelo.
32
Ordenamiento de Eventos
Aún cuando no hay relojes precisos la ejecución de un sistema
se puede describir en términos de los eventos y su ordenación.
Ejemplo:
1. X envía un mensaje de reunión
2. Y y Z responden
3. X envía
4. Y lee y responde
5. Z lee X, y Y envía otra respuesta.
Ordenamiento de Eventos
33
2.2.2 Modelo de Fallos
Intenta dar una especificación precisa de los fallos que se pueden
producir en procesos y en canales de comunicación.
Fallos por omisión
De procesos
De comunicaciones.
Fallos de procesos
Ruptura accidentada del procesamiento.
Es deseable si el resto de los procesos que interactúan con el proceso
interrumpido, o bien funcionan correctamente o se detienen.
El método de detección de ruptura descansa en timeouts.
Fail- Stop: es cuando el resto de los procesos puede detectar con
certeza que cierto proceso interrumpió su ejecución. Se puede detectar
en un sistema síncrono por los timeouts.
Fallos por omisión de comunicaciones.
Fallos por omisión de envíos.
Pérdida de mensajes entre los buffers.
Fallos por omisión de recepción.
Proceso p Proceso q
Envia m Recibe
omisión
de envio.{
Fallos por
Canal de Comunicación
Enmascaramiento de fallos
Ocultar el fallo.
Convertirlo en un tipo razonable
Fiabilidad y comunicación uno a uno. El término comunicación fiable
se define en términos de validez e integridad.
34
Validez: cualquier mensaje en el buffer de salida llega
eventualmente al buffer de mensajes entrantes.
Integridad: el mensaje recibido es idéntico al enviado y no se
reparten mensajes por duplicado.
Amenazas de Integridad
Protocolos que retransmiten pero no usan números de
secuencia para evitar que el mismo mensaje llegue duplicado.
Usuarios mal intencionados que insertan mensajes inválidos,
repiten mensajes antiguos o modifican mensajes auténticos.
2.2.3. Modelo de seguridad
La seguridad de un SD puede lograrse asegurando los procesos y los
canales empleados para sus interacciones y protegiendo los objetos
que se encapsulan contra el acceso no autorizado.
Protección de Objetos
Los objetos pueden contener datos privados y públicos o
compartidos.
Se otorgan derechos de acceso que especifican a quien se permite
realizar ciertas operaciones sobre un objeto. Los usuarios son los
principales beneficiarios de estos derechos de acceso.
A cada invocación y a cada resultado se le asocia la autoridad con
que se ordena. Tal autoridad se denomina principal.
35
El servidor es responsable de verificar la identidad del principal
tras la invocación y comprobar que dispone de los diferentes
derechos para realizar operaciones sobre el objeto.
El cliente puede comprobar la identidad del principal tras el
servidor para asegurar que el resultado proviene del servidor
requerido.
Derechos
de acceso
Objeto
Invocación
Cliente
Servidor
Resultado
Principal (cliente)
Red Principal
(servidor)
Figura 17. Objetos y principales
Copia de m
El enemigo
m`
Proceso P m ^ Proceso Q
Canal de comunicación
36
Cómo se pueden vencer las amenazas de seguridad?
Criptografía y secretos compartidos
Autenticación
Canales seguros
ACTIVIDAD
Describa e ilustre la arquitectura cliente – servidor de las siguientes
aplicaciones: World Wide Web, email y Netnews.
Indique como cooperan los servidores al proveer el servicio en cada
uno de sus ejemplos anteriores.
RESUMEN
La mayoria de los sistemas distribuidos se componen de una o mas
variedades de modelos de arquitectura. El modleo cliente servidor es el
mas usado, la Web y otros servicios de internet tales como FTP, news,
dns y email se basan en este modelo, asi como el sistema local de
archivos y otros mas. Los servicios como DNS que tienen un numero de
usuarios grande y tratan con gran cantidad de información se basan en
multiples servidores, el uso de particiones sobre los datos y la replicación
para facilitar la disponibilidad y tolerancia frente a fallos. El uso de cache
en los clientes y servidores proxy se encuentran ampliamente extendidos
para mejorar las prestaciones de un servicio. En el modelo de porcesos de
igual a igual. Los procesos de aplicaciones distribuidas se comunican
uno con otro directamente sin emplear servidores intermediarios.
La posibilidad de mover código de un porceso a otro ha desembocado en
algunas variantes del modelo cliente servidor, El ejemplo mas común de
esto es el Apple cuyo código es aportado por unservidor web para
ejecutarse en un cliente, proporcionando funcionalidades no disponibles
en el cliente y al mejora de ciertas prestaciones debido a la proximidad
con el cliente.
37
Hemos presentado modelos de interaccion, fallo y seguridad que
identifican las caracteristicas comunes de los componentes básicos con
que se construyen los sistemas distribuidos. El modelo de interaccion
tiene que ver con las prestaciones de los procesos y los canales de
comunicación y con la ausencia de un reloj global. También define un
sistema asíncrono como uno en el que no hay límites en el tiempo de
ejecución de un proceso, el tiempo de reparto de un mensaje y la deriva
de los relojes, siendo asi como se comporta el internet.
El modelo de fallo clasifica los fallos de los procesos y los canales de
comunicación básicos de un sistema distribuido. El enmascaramiento es
una técnica con la que se construye un servicio más fiable sobre otro
menos fiable, de modo que se enmascaran algunos fallos de este último
en particular, se puede construir un servicio de comunicación fiable
desde un canal de comunicación básico simplemente enmascarando sus
fallos.
El modelo de seguridad identifica las posibles amenazas a los procesos y
los canales de comunicación en sistema distribuido abierto, algunas de
estas amenazas se relacionan con la integridad, los usuarios mal
intencionados pueden modificar o repeitr los mensajes, otra amnaza es la
privacidad y otra es la auteticidad.
BIBLIOGRAFIA RECOMENDADA
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
38
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o Un motor de búsqueda es un servidor web que ofrece a los
clientes lam oportunidad de buscar en ciertos índices almacenados
y (concurrentemente) lanzar varios esacaladores web para
construir y actualizar estos índices. ¿Cuáles son los requisitos de
sincronización entre estas actividades concurrentes?
o Sugiera algunas aplicaciones para un modelo entre pares,
distinguiendo entre casos en los que el estado de todos necesita
ser idéntico y casos que demandan menos consistencia.
o Tabule los tipos de recursos locales que son vulnerables a un
ataque por un programa no fiable que se descarga desde un lugar
remoto y se ejcuta en un computador local.
o Que factores afectan el modo de comportamiento de una
aplicación que accede a los datos compartidos administrados por
un servidor? Describa los remedios disponibles y discuta su
utilidad.
o De algunos ejemplos de fallos en el hardware y el software de un
sitema distribuido que puedan o no ser tolerados mediante el uso
de redundancia. ¿en que punto podemos asegurar que el empleo
de redundancia? ¿cuando sea adecuado, hace que el sistema sea
tolerante frente a fallos?
39
UNIDAD ACADÉMICA Nº 03
COMUNICACION A NIVEL
DE REDES
Los sistemas distribuidos utlizan redes de area local, redes de area extendido e
interredes para comunicarse. Las prestaciones, fiabilidad, escalabilidad,
movilidad y calidad del servicio de las redes subyacentes influyen en el
comportamiento de los sitemas distribuidos. Los cambios en las necesidades de
los usuarios han producido la irrupción de las redes inalámbricas y las redes de
altas prestaciones con calidad de servicio garantizada.
Los fundamentos en los que se basan las redes de computadoras incluyen las
capas de protocolos, el intercambio de paquetes, el encaminamiento y el flujo de
datos. Las técnicas de interconexión de redes hacen posible que se puedan
combinar redes heterogeneas para que funcionen como una sola el Internet es
el mejor ejemplo de esto, sus protocolos son casi universalmente utlizados en
los sistemas distribuidos. Los modos de direccionamiento y encaminamiento
usado en el internet han experimentado el impacto de su crecimiento. Tanto es
asi que ahora se encuentran en porceso de revisio para que puedan soporta el
crecimiento futuro y para poder cumplir con los requerimientos de movilidad,
seguridad y calidad de servicios demandado.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir que es una red LAN, WAN y sus elementos.
Definir y describir las reglas que permiten la comunicación en una red.
Definir y describir el modelo TCP/IP y el modelo OSI.
Definir y describir la capa de transporte y los protocolos que trabajan en
esta capa TCP y UDP
Realizar el proceso de encapsulamiento de datos y direccionamiento de
puertos
40
CONCEPTOS GENERALES DE LA COMUNICACIÓN POR
COMPUTADORAS.
1. ELEMENTOS DELA COMUNICACIÓN
Para que exista comunicación deben existir los siguientes elementos:
Origen del mensaje
Canal de transmisión
Destino del mensaje
La comunicación comienza con un mensaje o información que se debe
enviar desde una persona o dispositivo a otro. Las personas intercambian
ideas mediante diversos métodos de comunicación. Todos estos métodos
tienen tres elementos en común. El primero de estos elementos es el origen
del mensaje o emisor. Los orígenes de los mensajes son las personas o los
dispositivos electrónicos que deben enviar un mensaje a otras personas o
dispositivos. El segundo elemento de la comunicación es el destino o
receptor del mensaje. El destino recibe el mensaje y lo interpreta. Un tercer
elemento, llamado canal, está formado por los medios que proporcionan el
camino por el que el mensaje viaja desde el origen hasta el destino.
ELEMENTOS DE LA COMUNICACION
41
transmitieron de esta manera, significará que ningún otro dispositivo podrá
enviar o recibir mensajes en la misma red mientras esta transferencia de
datos está en progreso. Estos grandes streams de datos originarán retrasos
importantes. Además, si falló un enlace en la infraestructura de red
interconectada durante la transmisión, se perderá todo el mensaje y tendrá
que retransmitirse por completo.
Un mejor enfoque para enviar datos a través de la red es dividir los datos
en partes más pequeñas y más manejables. La división del stream de datos
en partes más pequeñas se denomina segmentación. La segmentación de
mensajes tiene dos beneficios principales.
Primero: al enviar partes individuales más pequeñas del origen al destino,
se pueden entrelazar diversas conversaciones en la red. El proceso que se
utiliza para entrelazar las piezas de conversaciones separadas en la red se
denomina multiplexación.
Segundo: la segmentación puede aumentar la confiabilidad de las
comunicaciones de red. No es necesario que las partes separadas de cada
mensaje sigan el mismo recorrido a través de la red desde el origen hasta el
destino. Si una ruta en particular se satura con el tráfico de datos o falla, las
partes individuales del mensaje aún pueden direccionarse hacia el destino
mediante los recorridos alternativos. Si parte del mensaje no logra llegar al
destino, sólo se deben retransmitir las partes faltantes.
SEGMENTACION DE PAQUETES
42
2. ELEMENTOS DE UNA RED
Los dispositivos y los medios son los elementos físicos o hardware de la
red.
2.1 Dispositivos de una Red
Varios tipos de dispositivos en toda la red participan para asegurar que
las partes del mensaje lleguen a los destinos de manera confiable.
Dispositivos Finales (host)
Dispositivos Intermedios
2.1.1 Dispositivos Finales (host)
En el contexto de una red, los dispositivos finales se denominan
host. Un dispositivo host puede ser el origen o el destino de un
mensaje transmitido a través de la red. Para distinguir un host de
otro, cada host en la red se identifica por una dirección. Cuando
un host inicia una comunicación, utiliza la dirección del host de
destino para especificar dónde debe ser enviado el mensaje.
Ejemplos:
Computadoras (estaciones de trabajo, computadoras portátiles,
servidores de archivos, servidores Web)
Impresoras de red
Teléfonos VoIP
Cámaras de seguridad
Dispositivos móviles de mano (como escáneres de barras
inalámbricos, asistentes digitales personales (PDA))
En las redes modernas, un host puede funcionar como un cliente,
como un servidor o como ambos. El software instalado en el host
determina qué rol representa en la red. Los servidores son hosts
que tienen software instalado que les permite proporcionar
información y servicios, como e-mail o páginas Web, a otros hosts
en la red, Los clientes son hosts que tienen software instalado que
les permite solicitar y mostrar la información obtenida del
servidor.
43
2.1.2 Dispositivos Intermedios
Las redes dependen de dispositivos intermediarios para proporcionar
conectividad y para trabajar detrás de escena y garantizar que los datos
fluyan a través de la red. Estos dispositivos conectan los hosts
individuales a la red y pueden conectar varias redes individuales para
formar una internetwork. Los siguientes son ejemplos de dispositivos de
red intermediarios:
Dispositivos de acceso a la red (hubs, switches y puntos de
acceso inalámbricos),
Dispositivos de internetworking (routers),
Servidores de comunicación y módems.
Dispositivos de seguridad (firewalls), etc.
La administración de datos mientras fluyen a través de la red
también es una función de los dispositivos intermediarios. Estos
dispositivos utilizan la dirección host de destino, conjuntamente
con información sobre las interconexiones de la red, para
determinar la ruta que deben tomar los mensajes a través de la
red. Los procesos que se ejecutan en los dispositivos de red
intermediarios realizan las siguientes funciones:
Regenerar y retransmitr señales de datos
Mantener información sobre qué rutas existen a través de la
red y de la internetwork.
Notificar a otros dispositivos los errores y las fallas de
comunicación,
direccionar datos por rutas alternativas cuando existen fallas
en un enlace.
Clasificar y direccionar mensajes según las prioridades de QoS
(calidad de servicio).
Permitir o denegar el flujo de datos en base a configuraciones
de seguridad.
44
2.2 Medios de una Red
La comunicación a través de una red es transportada por un medio. El
medio proporciona el canal por el cual viaja el mensaje desde el origen
hasta el destino.
Las redes modernas utilizan principalmente tres tipos de medios para
interconectar los dispositivos y proporcionar la ruta por la cual pueden
transmitirse los datos. Estos medios son:
Hilos metálicos dentro de los cables,
Fibras de vidrio o plásticas (cable de fibra óptica), y
Transmisión inalámbrica.
La codificación de señal que se debe realizar para que el mensaje sea
transmitido es diferente para cada tipo de medio. En los hilos metálicos,
los datos se codifican dentro de impulsos eléctricos que coinciden con
patrones específicos. Las transmisiones por fibra óptica dependen de
pulsos de luz, dentro de intervalos de luz visible o infrarroja. En las
transmisiones inalámbricas, los patrones de ondas electromagnéticas
muestran los distintos valores de bits.
Los diferentes tipos de medios de red tienen diferentes características y
beneficios. No todos los medios de red tienen las mismas características
ni son adecuados para el mismo fin.
45
3. REGLAS QUE RIGEN LAS COMUNICACIONES
Luego tenemos que existen reglas para que se realice la comunicación, a
estas reglas en redes de computadoras la llamamos protocolos.
Los protocolos de red describen las funciones que se producen durante las
comunicaciones de red. Por ejemplo en una conversación cara a carade dos
personas, es posible que un protocolo para comunicar establezca que para
indicar que la conversación ha finalizado, el emisor debe permanecer en
silencio durante dos segundos completos. Sin embargo, este protocolo no
especifica cómo el emisor debe permanecer en silencio durante los dos
segundos.
Los protocolos generalmente no describen cómo cumplir una función en
particular. Al describir solamente qué funciones se requieren de una regla
de comunicación en particular pero no cómo realizarlas, es posible que la
implementación de un protocolo en particular sea independiente de la
tecnología.
Por ejemplo en un servidor Web, HTTP no especifica qué lenguaje de
programación se utiliza para crear el explorador, qué software de servidor
Web se debe utilizar para servir las páginas Web, sobre qué sistema
operativo se ejecuta el software o los requisitos necesarios para mostrar el
explorador. Tampoco describe cómo detecta errores el servidor, aunque sí
describe qué hace el servidor si se produce un error.
Esto significa que una computadora y otros dispositivos, como teléfonos
móviles o PDA, pueden acceder a una página Web almacenada en cualquier
tipo de servidor Web que utilice cualquier tipo de sistema operativo desde
cualquier lugar de Internet.
Para visualizar la interacción entre varios protocolos, es común utilizar un
modelo en capas. Un modelo en capas muestra el funcionamiento de los
protocolos que se produce dentro de cada capa, como así también la
interacción de las capas sobre y debajo de él.
Existen dos tipos básicos de modelos de networking: modelos de protocolo
y modelos de referencia, el modelo OSI y modelo TCP/IP.
46
Figura 4. Modelos de Red
47
El modelo TCP/IP describe la funcionalidad de los protocolos que
forman la suite de protocolos TCP/IP. Esos protocolos, que se
implementan tanto en el host emisor como en el receptor, interactúan
para proporcionar la entrega de aplicaciones de extremo a extremo a
través de una red.
Un proceso completo de comunicación incluye estos pasos:
o Creación de datos a nivel de la capa de aplicación del dispositivo
final origen.
o Segmentación y encapsulación de datos cuando pasan por la stack
de protocolos en el dispositivo final de origen.
o Generación de los datos sobre el medio en la capa de acceso a la red
de la stack.
o Transporte de los datos a través de la internetwork, que consiste de
los medios y de cualquier dispositivo intermediario.
o Recepción de los datos en la capa de acceso a la red del dispositivo
final de destino.
o Desencapsulación y rearmado de los datos cuando pasan por la
stack en el dispositivo final.
o Traspaso de estos datos a la aplicación de destino en la capa de
aplicación del dispositivo final de destino
48
Encapsulamiento de Datos
Mientras los datos de la aplicación bajan al stack del protocolo y se
transmiten por los medios de la red, varios protocolos le agregan
información en cada nivel. Esto comúnmente se conoce como proceso
de encapsulación.
PROCESOS DE ENCAPSULAMIENTO DE DATOS
49
Bits: una PDU que se utiliza cuando se transmiten físicamente datos
a través de un medio.
50
origen y de destino, como también la información necesaria para
entregar el paquete a su correspondiente proceso de destino.
Luego el paquete IP se envía al protocolo Ethernet de la capa de acceso
a la red, donde se encapsula en un encabezado de trama y en un tráiler.
Cada encabezado de trama contiene una dirección física de origen y de
destino. La dirección física identifica de forma exclusiva los dispositivos
en la red local. El tráiler contiene información de verificación de errores.
Finalmente, los bits se codifican en el medio Ethernet mediante el
servidor NIC.
51
especificaciones OSI son de uso masivo en la actualidad, el modelo OSI
de siete capas ha realizado aportes importantes para el desarrollo de
otros protocolos y productos para todos los tipos de nuevas redes.
53
paquete en una nueva trama y lo envía por su trayecto hacia el
dispositivo final de destino. Cuando la trama llega a su destino final, la
trama y los encabezados del paquete se eliminan y los datos se suben a
la Capa 4.
54
Piense en una computadora que tiene sólo una interfaz de red. Todos
los streams de datos creados por las aplicaciones que se están
ejecutando en la PC ingresan y salen a través de esa sola interfaz, sin
embargo los mensajes instantáneos no emergen en el medio del
documento del procesador de textos o del e-mail que se ve en un juego.
Esto es así porque los procesos individuales que se ejecutan en los hosts
de origen y de destino se comunican entre sí. Cada aplicación o servicio
es representado por un número de puerto en la Capa 4. Un diálogo
único entre dispositivos se identifica con un par de números de puerto
de origen y de destino de Capa 4 que son representativos de las dos
aplicaciones de comunicación. Cuando los datos se reciben en el host, se
examina el número de puerto para determinar qué aplicación o proceso
es el destino correcto de los datos
55
segmentación de datos y gestión de cada porción,
reensamble de segmentos en flujos de datos de aplicación, e
identificación de las diferentes aplicaciones.
56
destino. Para lograr esto, la capa de Transporte asigna un
identificador a la aplicación. Los protocolos TCP/IP denominan a
este identificador número de puerto. A todos los procesos de
software que requieran acceder a la red se les asigna un número
de puerto exclusivo en ese host. Este número de puerto se utiliza
en el encabezado de la capa de Transporte para indicar con qué
aplicación está asociada esa sección de datos.
La capa de Transporte es el enlace entre la capa de Aplicación y las
capas inferiores, que son responsables de la transmisión en la red. Esta
capa acepta datos de distintas conversaciones y los transfiere a las capas
inferiores como secciones manejables que puedan ser eventualmente
multiplexadas a través del medio. Las aplicaciones no necesitan conocer
los detalles de operación de la red en uso. Las aplicaciones generan
datos que se envían desde una aplicación a otra sin tener en cuenta el
tipo de host destino, el tipo de medios sobre los que los datos deben
viajar, el paso tomado por los datos, la congestión en un enlace o el
tamaño de la red.
Además, las capas inferiores no tienen conocimiento de que existen
varias aplicaciones que envían datos en la red. Su responsabilidad es
entregar los datos al dispositivo adecuado. Luego la capa de Transporte
ordena estas secciones antes de entregarlas a la aplicación adecuada.
Los requerimientos de datos varían, debido a que las distintas
aplicaciones poseen distintos requerimientos, existen varios protocolos
de la capa de Transporte. Para algunas aplicaciones, los segmentos
deben llegar en una secuencia específica de manera que puedan ser
procesados en forma exitosa. En algunos casos, todos los datos deben
recibirse para ser utilizados por cualquiera de las mismas. En otros
casos, una aplicación puede tolerar cierta pérdida de datos durante la
transmisión a través de la red.
En las redes convergentes actuales, las aplicaciones con distintas
necesidades de transporte pueden comunicarse en la misma red. Los
57
distintos protocolos de la capa de Transporte poseen distintas reglas
que permiten que los dispositivos gestionen los diversos
requerimientos de datos.
Algunos protocolos proporcionan sólo las funciones básicas para la
entrega eficiente de las secciones de datos entre las aplicaciones
adecuadas. Estos tipos de protocolos son útiles para aquellas
aplicaciones cuyos datos son sensibles a las demoras.
Otros protocolos de la capa de Transporte describen procesos que
brindan funciones adicionales, como asegurar la entrega confiable entre
las aplicaciones. Si bien estas funciones adicionales proveen una
comunicación más sólida entre aplicaciones de la capa de Transporte,
representan la necesidad de utilizar recursos adicionales y generan un
mayor número de demandas en la red.
58
4.2.1 Protocolo de datagramas de usuario (UDP)
UDP es un protocolo simple, sin conexión, descrito en la RFC 768.
Cuenta con la ventaja de proveer la entrega de datos sin utilizar
muchos recursos. Las porciones de comunicación en UDP se
llaman datagramas. Este protocolo de la capa de Transporte envía
estos datagramas como "maximo esfuerzo".
Entre las aplicaciones que utilizan UDP se incluyen: Sistema de
nombres de dominios (DNS), streaming de vídeo, y Voz sobre IP
(VoIP).
59
Considere el siguiente ejemplo, una computadora que recibe y envía e-
mails, mensajes instantáneos, páginas Web y llamadas telefónicas VoIP
de manera simultánea.
Los servicios basados en TCP y UDP mantienen un seguimiento de las
varias aplicaciones que se comunican. Para diferenciar los segmentos y
datagramas para cada aplicación, tanto TCP como UDP cuentan con
campos de encabezado que pueden identificar de manera exclusiva
estas aplicaciones. Estos identificadores únicos son los números de los
puertos.
En el encabezado de cada segmento o datagrama hay un puerto de
origen y destino. El número de puerto de origen es el número para esta
comunicación asociado con la aplicación que origina la comunicación
en el host local. El número de puerto de destino es el número para esta
comunicación asociado con la aplicación de destino en el host remoto.
Los números de puerto se asignan de varias maneras, en función de si
el mensaje es una solicitud o una respuesta. Mientras que los procesos
en el servidor poseen números de puertos estáticos asignados a ellos,
los clientes eligen un número de puerto de forma dinámica para cada
conversación.
Cuando una aplicación de cliente envía una solicitud a una aplicación
de servidor, el puerto de destino contenido en el encabezado es el
número de puerto que se asigna al daemon de servicio que se ejecuta en
el host remoto. El software del cliente debe conocer el número de
puerto asociado con el proceso del servidor en el host remoto. Este
número de puerto de destino se puede configurar, ya sea de forma
predeterminada o manual. Por ejemplo, cuando una aplicación de
explorador Web realiza una solicitud a un servidor Web, el explorador
utiliza TCP y el número de puerto 80 a menos que se especifique otro
valor. Esto sucede porque el puerto TCP 80 es el puerto predeterminado
asignado a aplicaciones de servidores Web. Muchas aplicaciones
comunes tienen asignados puertos predeterminados.
60
El puerto de origen del encabezado de un segmento o datagrama de un
cliente se genera de manera aleatoria. Siempre y cuando no entre en
conflicto con otros puertos en uso en el sistema, el cliente puede elegir
cualquier número de puerto. El número de puerto actúa como dirección
de retorno para la aplicación que realiza la solicitud. La capa de
Transporte mantiene un seguimiento de este puerto y de la aplicación
que generó la solicitud, de manera que cuando se devuelva una
respuesta, pueda ser enviada a la aplicación correcta. El número de
puerto de la aplicación que realiza la solicitud se utiliza como número
de puerto de destino en la respuesta que vuelve del servidor.
La combinación del número de puerto de la capa de Transporte y de la
dirección IP de la capa de Red asignada al host identifica de manera
exclusiva un proceso en particular que se ejecuta en un dispositivo host
específico. Esta combinación se denomina socket. Un par de sockets,
que consiste en las direcciones IP y los números de puerto de origen y
de destino, también es exclusivo e identifica la conversación entre dos
hosts.
Ejemplo: una solicitud de página Web HTTP que se envía a un servidor
Web (puerto 80) y que se ejecuta en un host con una
dirección IPv4 de Capa 3 192.168.1.20 será destinada al
socket 192.168.1.20:80.
Si el explorador Web que solicita la página Web se ejecuta en
el host 192.168.100.48 y el número de puerto dinámico
asignado al explorador Web es 49152, el socket para la
página Web será 192.168.100.48:49152, tal como se muestra
en la fig.16.
Se debe considerar que TCP no envía datos a la red hasta que advierte
que el destino está preparado para recibirlos. Luego TCP administra el
flujo de datos y reenvía todos los segmentos de datos de los que recibió
acuse a medida que se reciben en el destino. TCP utiliza mecanismos de
enlace, temporizadores y acuses de recibo y uso dinámico de ventanas
61
para llevar a cabo estas funciones confiables. Sin embargo, esta
confiabilidad representa cierta sobrecarga en la red en términos de
encabezados de segmentos más grandes y mayor tráfico de red entre el
origen y el destino que administra el transporte de datos.
62
capas cumplen un rol importante en las comunicaciones de redes de
datos y tendrán influencia en el rendimiento.
ACTIVIDAD
Un cliente envía un mensaje de solicitud de 200 bytes a un servicio,
que produce una respuesta conteniendo 5000 bytes. Estime el tiempo
total necesario para completar la operación en cada uno de los
siguientes casos:
o Utilizando una comunicación de datagramas no orientado a
conexión (por ejemplo UDP).
o Utilizando una comunicación orientada a conexión (por ejemplo
TCP).
o El proceso servidor se encuentra en la misma maquina del
cliente.
[Latencia por paquete (local o remoto tanto al enviar como al
recibir): 5ms
Tiempo de establecimiento de conexión (solo TCP): 5ms
Tasa de transferencia de datos: 10Mbps.
MTU: 1000 bytes
Tiempo de procesado de solicitud en el servidor: 2ms
Supongase que la red esta un poco cargada]
RESUMEN
En esta parte hemos enfocado nuestra atención en los conceptos y en las
técnicas de las redes que se necesitan como base para los sistemas
distribuidos y no hemos aproximado a ellos desde el punto de vista de
un diseñador de sistemas distribuidos. Las redes de datos y los
protocolos en cada capa son la base de las comunicaciones en los
sistemas distribuidos. Las redes de área local se basan en la difusión de
paquetes en un medio común, y Ethernet es la tecnolgia dominante. Las
redes área amplia se basan en la conmutación de paquetes para
63
encaminar los paquetes hacia sus destinos a través de la red conectada.
El encaminamiento es el mecanismo clave y son varios los algoritmos de
encaminamiento utlizados, de los cuales los de vector distancia es el mas
básico pero efectivo. Es necesario un control de la congestion para
prevenir el desbordamiento de los buferes en el receptor y en los nodos
intermedios.
Las interredes se construyen colocando una capa virtual de protocolo de
intered sobre la colleccion unidas por los Routers. Los portocolos de
internet TCP/IP hacen posible que los computadores en internet se
comuniquen con cualquier otro de una forma uniforme,
independientemente de que se encuentren que se encuentren en la
misma red de área local o en países diferentes. Los estándares de internet
incluyen varios protocolos del nivel de aplicación que resultan
adecuadas para su uso en aplicaciones distribuidas a gran escala.IPv6
tiene el espacio de direccionamiento necesario para la evolución futura
de internet y aporta los medios para satisfacer los requisitos de las
nuevas aplicaciones tales como calidad de servicio y seguridad.
Los usuarios móviles tiene soporte de IP móvil en su deambular por
áreas amplias, y por las LAN inalmbricas basada en la IEEE 802.11 para
una conectividad local.
BIBLIOGRAFIA RECOMENDADA
o GARCIA, P. DIAZ, J. LOPEZ , J. Transmisión de Datos y Redes de
Computadores. Pearson. Prentice Hall. (2003)
o CISCO Systems, Guía del 1er año CCNA1 y CCNA2. Academia de
Networking de Cisco Systems. CiscoPress. Editorial Pearson.
Madrid(2005)
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
64
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o Internet es demasiado grande para que cualquier Router pueda
almacenar la información de encaminamiento para todos los
nodos. ¿Cómo resuelve el esquema de encaminamiento de
Internet este problema?
o ¿Cuál es el cometido de un conmutador Ethernet? ¿Qué tablas de
direcciones contiene?
o ¿Que tipos de enrutamiento existe y cual es el fin de cada uno?
o Describa el modo en que deberia configurar un cortafuegos para
proteger la red local de su institucio o empresa ¿Qué solicitudes
entrantes y salientes debería interceptar?
o ¿Explique el proceso de encapsulamiento?
o Explique el direccionamiento de puertos en las siguientes
aplicaciones de la fig. 17
65
UNIDAD ACADÉMICA Nº 04
COMUNICACION ENTRE
PROCESOS EN SISTEMAS
DISTRIBUIDOS
En el presente capitulo estudiaremos las caracteristicas de los protocolos que
permiten la comunicación entre procesos en un sistema distribuido, ya sea por
si mismos o como soporte para la comunicación entre objetos.
La interfaz de programcion de aplicaciones (API) de java para la comunicación
de procesos en internet proporciona comunicación tanto por datagramas como
or streams. Estas proveen bloques constructivos alternativos para los protocolos
de comunicación.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir que es la comunicación entre procesos en sistemas
distribuidos.
Definir, describir la comunicación por paso de mensajes
Definir y describir el llamado a un procediemiento remoto (RPC)
Definir y describir la comunicación Cliente – Servidor.
Definir y describir la comunicación en grupo.
Aplicaciones, servicios.
}
RMI y RPC
Capas
Este
capítulo
{ Protocolo petición respuesta
Empaquetado y representación externa de datos
Middleware
UDP y TCP
66
¿Qué es un proceso?
Es un programa en ejecucion.
COMUNICACIÓN ENTRE PROCESOS EN SISTEMAS DISTRIBUIDOS
Después de haber revizado los conceptos de redes para la comunicacion ahora
introduscamonos en nuestro tema comunicación de procesos en Sistemas
Distribuidos.
El sistema de comunicación es la espina dorsal de los Sistemas Distribuidos.
La comunicación entre procesos en S.D. necesita compartir información:
67
1.2 Semántica uniforme en:
• Comunicaciones locales
• Comunicaciones remotas
1.3 Eficiencia
Criterio: reducción del número de mensajes intercambiados por que las
IPC son costosas.
Optimización incluye:
Evitar el costo de establecer y terminar conexiones entre el mismo
par de procesos y cada intercambio de mensajes entre ellos.
Minimizar el costo de mantener la conexión.
Optimizar los reconocimientos cuando hay una serie de mensajes
entre el send y receive.
1.4 Flexibilidad
Deben permitir alguna clase de control de flujo entre procesos
cooperativos, incluyendo send/receive sincrónicos y asincrónicos.
1.5 Seguridad
Autenticación del receptor de un mensaje por el enviador
Autenticación del enviador de un mensaje por el receptor
Encriptación del mensaje
1.6 Confiabilidad
La caída del nodo o enlace implica pérdida de mensaje.
Se usan timeouts (duplicación de mensajes)
1.7 Correctitud
Pueden enviarse multicast
Atomicidad
Orden de despacho
Persistencia
68
1.8 Portabilidad
El sistema de pasaje de mensajes debe ser portable (posible
construcción de protocolos de IPC reusando el mismo sistema de
mensajes)
Heterogeneidad de máquinas compatibilización de representación.
69
3.1.1. Primitivas con bloqueo o sin bloqueo
Una primitiva tiene una semántica sin bloqueo cuando su
ejecución no produce un retardo en el proceso que la invoca; de
otra manera la primitiva es con bloqueo.
Existen básicamente cuatro tipos de comunicación para este tipo
de primitivas:
Send con bloqueo (CPU inactivo durante la transmisión de los
mensajes)
Send sin bloqueo, sin copia (no se puede sobrescribir hasta
que el mensaje haya sido leído)
Send sin bloqueo, con copia (se desperdicia el tiempo del CPU
para la copia adicional)
Send sin bloqueo, con interrupción (dificulta la programación).
70
En sistemas sin buffer, la ejecución de un send se detiene hasta
que en el otro extremo se ejecuta un receive (si se utilizó
bloqueo). En ese momento el mensaje es enviado y ambos
procesos pueden continuar su ejecución. Ambos procesos se
sincronizan o se encuentran cuando el mensaje es transferido. Los
sistemas con buffer son más difíciles de controlar debido a la
necesidad de crear, destruir y mantener los buffers.
71
núcleo del cliente. Así una solicitud de respuesta consta de cuatro
mensajes.
El Tercer método aprovecha el hecho de que la comunicación
cliente-servidor se estructura como una solicitud del cliente al
servidor, seguida de una respuesta del servidor al cliente. En este
método, el cliente se bloquea después de enviar un mensaje. El
núcleo del servidor no envía de regreso un reconocimiento sino
que la misma respuesta funciona como tal. Así, el emisor
permanece bloqueado hasta que regresa la respuesta. Si tarda
demasiado, el núcleo emisor puede volver a enviar la solicitud
para protegerse contra la posibilidad de una pérdida del mensaje.
Una consideración más dentro de la comunicación por paso de
mensajes es la determinación del receptor o receptores de un
mensaje. Se tienen tres opciones:
• Transmisión a un sólo receptor (unicast)
• Transmisión radial (broadcast)
• Transmisión radial múltiple (multicast)
72
4 NIVEL DE ABSTRACCIÓN EN COMUNICACIÓN CON PASO DE
MENSAJES:
Diferentes conjuntos de primitivas pueden ser usados en la comunicación
entre procesos remotos. Los tres más comunes están basados en:
• Paso de mensajes puro.
• Llamado a procedimientos remotos
• Transacciones.
El orden en la lista anterior indica que cada forma de comunicación puede
ser construida en base a la anterior. En otras palabras, a mayor número,
mayor nivel de abstracción.
4.1 PASO DE MENSAJES PURO
Un mensaje es una colección de datos de cierto tipo consistente
en un encabezado y un cuerpo de longitudes fijas o variables, la
cual puede ser manejada por un proceso y entregada a su destinatario.
La comunicación orientada a mensajes está íntimamente ligada al
modelo cliente-servidor. El proceso cliente envía un mensaje
(petición) a un proceso servidor y espera una respuesta o continúa
ejecutándose. Las primitivas de comunicación por paso de mensajes son
send y receive. En algunos sistemas, la primitiva receive puede ser
selectiva o condicional si se agrega un guardia al llamar a la primitiva.
Existen diversas formas o interpretaciones semánticas de las primitivas:
4.1.1 Direccionamiento:
Para que un cliente pueda enviar un mensaje a un servidor, debe
conocer la dirección de éste. Existen varios métodos por los
que un cliente puede conocer o determinar la dirección del
servidor, a continuación se mencionan tres de ellas:
4.1.1.1 Asignación numérica fija predeterminada
en este caso la dirección del servidor es acordada en forma
anterior o durante el desarrollo de las aplicaciones cliente-
servidor, y por ello se puede incluir en el programa
ejecutable (ejemplo en un archivo de encabezados
73
header.h). Aunque esta estrategia podría funcionar en un
sistema particularmente sencillo, es necesaria una forma
más sofisticada de direccionamiento. Aquí cabe señalar que
no se ha determinado que es lo que significa el número
asignado, es decir, no especifica si es la identificación de un
proceso o de un equipo.
74
Figura 7. Asignacion Aleatoria de numero de proceso
75
4.2 LLAMADOS A PROCEDIMIENTOS REMOTOS
El llamado a procedimientos remotos (RPC) implica que un proceso
cliente envía una petición y permanece bloqueado hasta que el proceso
servidor devuelve una respuesta. El objetivo de los RPCs es permitir
que los programas en un ambiente distribuido se escriban con el mismo
estilo que los programas en un sistema de cómputo centralizado. Una
de las principales ventajas de este esquema de comunicación es que los
programadores no requieren saber si un llamado a procedimiento se
atenderá local o remotamente.
La responsabilidad del mecanismo RPC es convertir llamadas
escritas en un lenguaje de programación y manejar los tipos de datos
de alto nivel traduciéndolos en llamadas a servicios del nivel de
Transporte en una red. El mecanismo RPC está asociado con servicios
en los niveles de Presentación y Sesión en el modelo OSI:
Las primitivas de comunicación en RPC son:
Del lado del cliente:
call service (value_args; result_args)
Del lado del servidor:
accept service (in value_parameters; out result_parameters)
body
Profundizaremos esto mas adelante
4.3 TRANSACCIONES
Dentro de los sistemas distribuidos, hay muchos casos en que una
sola comunicación no resuelve problemas específicos de interacción
entre dos procesos (por ejemplo, un retiro de una cuenta bancaria).
La interacción entre los procesos puede ser una secuencia de
comunicaciones y cálculos. En estas situaciones, es adecuado operar en
base a transacciones.
El concepto de transacción se desarrolló en sistemas de manejo de bases
de datos para mantener la consistencia de la información almacenada.
76
Los mecanismos de transacciones simplifican la construcción de
sistemas confiables, y son transparentes para las aplicaciones de usuario
(nivel de Sesión en el modelo OSI).
En general, el término transacción describe una secuencia de
operaciones sobre una o más bases de datos que transforma un estado
consistente del sistema en otro estado consistente. No todos los estados
de un sistema son consistentes y, por lo tanto, algunos cambios no
son permitidos. Las aseveraciones que describen los cambios
permitidos reciben el nombre de restricciones de consistencia.
Propiedades: Las transacciones tienen las siguientes propiedades:
• Consistencia.- debe mantener la consistencia del sistema en que
se aplica.
• Atomicidad.- debe ejecutarse completamente o no ejecutarse.
• Durabilidad.- una vez que se completó con buen éxito, una
transacción no se puede cancelar (al menos que se aplique otra
transacción).
Los sistemas de transacciones deben soportar las siguientes
operaciones: terminación, concurrencia y recuperación (Commitment,
Concurrency and Recovery [CCR]).
5 SINCRONIZACION DE PROCESOS
Como mencionamos anteriormente el paso de mensajes entre un par de
procesos se puede basar en dos operaciones, envía y recibe definidas en
función del destino y del mensaje. Para que un proceso se pueda comunicar
con otro, el proceso envía un mensaje (una secuencia de bytes) a un destino
y otro proceso en el destino recibe el mensaje. Esta actividad implica la
comunicación de datos desde el proceso emisor al proceso receptor y puede
implicar además la sincronización de los procesos.
Entonces a cada destino de mensajes se asocia una cola, los procesos
emisores producen mensajes que serán añadidos a las colas remotas
mientras que los procesos receptores locales eliminaran mensajes de las
colas locales.
77
La comunicación entre los proceso emisor y receptor puede ser Síncrona o
asíncrona.
5.1 Comunicación Síncrona
Lo procesos emisor y receptor se sincronizan con cada mensaje, aquí
tanto envía como recibe son operaciones bloqueantes, es decir a cada
envía producido el proceso emisor se bloquea hasta que se produce el
correspondiente recibe y cuando se invoca un recibe el proceso se
bloquea hasta que llegue un mensaje
5.2 Comunicación Asíncrona
En la comunicación asíncrona la utilización de la operación asíncrona es
no bloqueante de tal forma que el proceso emisor pueda continuar tan
pronto como el mensaje haya sido copiado en el buffer local, la
transmisión del mensaje se lleva a cabo en paralelo con el proceso
emisor. La operación recibe puede tener variantes bloqueantes y no
bloqueantes.
Comunicación Síncrona Vs Comunicación Asíncrona
78
Petición-Respuesta (cliente/servidor) : [1:2:3:4:<servicio>:5:6:7:8]:
Emisor espera a que el receptor procese la operación. Respuesta
puede servir de ACK.
79
la comunicación petición - respuesta es síncrona, ya que el proceso cliente se
bloquea hasta que llega la respuesta del servidor. Esta comunicación
también puede ser fiable debido a que la respuesta del servidor es en efecto
un acuse de recibo para el cliente.
Dos roles diferentes en la interacción
Cliente: Solicita servicio. Petición: Operación + Datos
Servidor: Proporciona servicio. Respuesta: Resultado
Modelo Multicapa
Servidor puede ser cliente de otro servidor, Típico en aplicaciones web:
Presentación + Lógica de negocio + Acceso a datos
En Microsoft: ASP + COM + ADO
En Java: JSP + EJB + JDBC
80
Figura 12. Comunicación peticion respuesta Servidor - Servidor
8 COMUNICACIÓN EN GRUPO
El intercambio de mensajes entre iguales no es mejor modelo para la
comunicación entre un proceso y un grupo de procesos, como por ejemplo
se da en el caso de un servicio implementado por varios procesos en
diferentes computadores, quizás para proporcionar tolerancia a fallos o
mejorar la disponibilidad. Resulta mas apropiada una operacion
multidifusión, esta es una operación que envía un único mensaje desde un
proceso a cada uno de los miembros de un grupo de procesos, normalmente
de modo que la pertenencia al grupo resulte transparente para el emisor. La
comunicación en grupo Provee confiabilidad, disponibilidad de servicios
desde la perspectiva de replicación, la operación más apropiada para
81
comunicar un mensaje a un grupo es el multicasting y la comunicación debe
ser hecha de forma transparente
Posibles usos en los sistemas distribuidos:
Uso de datos replicados: actualizaciones múltiples.
Uso de servicios replicados.
Operaciones colectivas en cálculo paralelo.
La implementación depende de si la red proporciona multicast, Si no, se
implementa enviando N mensajes
Un proceso puede pertenecer a varios grupos, en el cual existe una
dirección de grupo que los distingue a cada uno.
El grupo suele tener carácter dinámico
Se pueden incorporar y retirar procesos del grupo
Gestión de pertenencia debe coordinarse con la comunicación.
8.1 Modelos de grupos:
Grupo abierto.
Proceso externo puede mandar mensaje al grupo
Suele usarse para datos o servicios replicados
Grupo cerrado.
Sólo procesos del grupo pueden mandar mensajes.
Suele usarse en procesamiento paralelo (modelo peer-to-peer)
Atomicidad
O reciben todos los procesos el mensaje o ninguno
Orden de recepción de los mensajes
Tres alternativas:
Orden FIFO: Los mensajes de una misma fuente llegan a cada
receptor en el orden que son enviados.
No hay ninguna garantía sobre mensajes de distintos emisores
Ordenación causal: Si entre los mensajes enviados por dos
emisores existe una posible relación “causa-efecto”, todos los
procesos del grupo reciben primero el mensaje “causa” y después el
mensaje “efecto”.
82
Si no hay relación, no se garantiza ningún orden de entrega
Concepto de “causalidad” se estudia en capítulo
“Sincronización”
Ordenación total: Todos los mensajes (de varias fuentes) enviados
a un grupo son recibidos en el mismo orden por todos los elementos.
ACTIVIDAD
Un servidor crea un puerto que utiliza para recibir peticiones de sus
clientes. Discuta los problemas de diseño concernientes a las
relaciones entre el nombre de ese puerto y los nombres utilizados
por los clientes.
¿Resulta útil que un puerto tenga varios receptores?
RESUMEN
Los protocolos petición-respuesta que se puede construir un protocolo
específico para sistemas distribuidos efectivo basándose en datagramas
UDP. El mensaje de respuesta se considera como un reconocimiento del
mensaje de petición, evitando de este modo las sobrecargas de los
reconocimientos adicionales. El protocolo se puede hacer mas fiable si
fuera necesario. Tal como es, no existe garantía de que el envio del de un
mensaje de petición desencadene la ejecucion de un método, para
algunas aplicaciones esto puede ser suficiente, pero se puede conseguir
una fiabilidad adicional haceindo uso de delas identificaciones de los
mensajes y de la retransmisión de los mensajes, de modo que nos
aseguremos que los métodos serna ejecutados.
Otras aplicaciones necesitan que los mensajes de respuesta sean
transmitidos sin tener que volver a ejecutar el método solicitado. Esto se
puede conseguir utilizando un historial. Esto demuestra que resulta una
buena idea construir distintos protocolos que se ajusten alas necesidades
de diferentes clase de aplicaciones en lugar de construir un único
protocolo superfiable para uso general.
83
Los mensajes de mutidifusion se utilizan en la comunicación entre lo
miembros de un grupo de procesos.el protocolo de multidifusión IP
proporciona un servicio de multidifusión tanto para redes de área local
como para internet.
BIBLIOGRAFIA RECOMENDADA
o 1ST INTERNATIONAL WORKSHOP ON AGENTS FOR
AUTONOMIC COMPUTING (AAC 2008) June 6, 2008 in Chicago,
http://www.iids.org/aac2008/
o 2008 SIWN International Conference on Selforganization
and Selfmanagement in Computing and Communications,
Glasgow, UK, 2224 July 2008 http://siwn.org.uk/2008/
o The Second International Conference on Autonomic Computing
and Communication Systems, September 2325, 2008, TURIN,
http://www.autonomics.eu/
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o Muestre un esquema de implementación de un servidor
mostrando el modo en que se utilizan las operaciones
damePeticion y envíaRespuesta por un servidor que crea un
nuevo hilo para ejecutar cada petición de un cliente. Indique el
84
modo en que el servidor copiara la IdPeticion del mensaje de
petición en el mensaje de respuesta y como obtendrá la dirección y
el puerto cliente.
o Describa un escenario en el cual un cliente pudiera recibir una
respuesta de un llamado anterior.
o Describa los modos en que los protocolos petición-respuesta
ocultan la heterogeneidad de los sistemas operativos y de las
redes de computadores.
85
UNIDAD ACADÉMICA Nº 05
COMUNICACIÓN A BAJO
NIVEL, SOCKETS
En este capitulo como el que sigue están realcionados con el Middleware, este
capitulo se centra en el como el Midleware y los programas de aplicación
pueden utilizar los protocolos de la capa de transporte de internet TCP y UDP.
En este capitulo se presenta las caracteristicas de comunicación entre procesos y
discute UDP y TCP des punto de vista del programador, presentando la
interfaz Java para estos dos protocolos.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir que es un socket
Realizar operaciones con Sockets
Crear sockets utilizando los protocolos TCP y UDP en java.
Conocer e implementar el Protocolo de interfaz de aplicacion (api) de java
para las direcciones de internet
86
los raw sockets se usan en programas basados en el protocolo ICMP,
como es el caso del programa Ping).
Una conexión de red entre dos procesos queda completamente definida
por una asociación, la cual es una quinteta formada de la siguiente
manera: {protocolo, dirección_local, proceso_local, dirección_remota,
puerto_remoto}
Un ejemplo de asociación usando la suite de protocolos TCP/IP es el
siguiente: {tcp, 192.43.235.2, 1500, 192.43.235.6, 21}
Con base en el concepto de asociación, se puede definir un socket como
una media-asociación, la cual tiene dos posibles definiciones:
{protocolo, dirección_local, proceso_local}
{protocolo, dirección_remota, proceso_remoto}.
A una media-asociación también se le llama dirección de transporte.
87
comunicaciones (socket). De esta manera tenemos las siguientes
analogías:
88
Uso de cast en las llamadas.
Direcciones en AF_INET (struct sockaddr_in).
Direcciones en AF_UNIX (struct sockaddr_un
1.5 Creación de un socket
La función socket crea uno nuevo:
int socket(int dom,int tipo,int proto)
Devuelve un descriptor de fichero (igual que un open de fichero).
Dominio (dom): AF_XXX
Tipo de socket (tipo): SOCK_XXX
Protocolo (proto): Dependiente del dominio y del tipo:
0 elige el más adecuado.
Especificados en /etc/protocols.
El socket creado no tiene dirección asignada.
1.6 Transmisión de datos con streams
Envío:
Puede usarse la llamada write sobre el descriptor de socket.
int send(int s,char *mem,int tam,int flags)
Devuelve el nº de bytes enviados.
Recepción:
Puede usarse la llamada read sobre el descriptor de socket.
int recv(int s,char *mem,int tam,int flags)
Devuelve el nº de bytes recibidos.
Los flags implican aspectos avanzado como enviar o recibir datos
urgentes (out-of-band).
90
necesite enviar o recibir mensajes debe crear primero un conector
asociado a una dirección de internet y a un puerto local. Un servidor
enlazara su conector a un puerto de de servidor (uno que resulte
conocido a los clientes de forma que puedan enviarle mensajes). Un
cliente ligara su conector a cualquier puerto local libre. El método recibe
devolverá, además del mensaje, la dirección de internet y el puerto del
emisor, permitiendo al receptor enviar la correspondiente respuesta.
API java para datagramas UDP.
La API java proporciona una comunicación de datagramas por medio
de dos clases: Datagrama Packet y DatagramaSocket.
Datagrama Packet:
Esta clase proporciona un constructor que crea una instancia
compuesta por una cadena de bytes que almacena el mensaje, la
longitud del mensaje y la dirección internet y el número de puerto
local del conector destino.
Cadena de bytes conteniendo el Longitud del Dirección de Numero de
mensaje mensaje. internet puerto
91
El código muestra un programa de un cliente que crea un
conector, envía un mensaje a un servidor en el puerto 6789, y
después espera una respuesta. Los argumentos para el método
main proporcionan un mensaje y el nombre del DNS de host
del servidor. El mensaje se convierte en una cadena de bytes y
el nombre DNS del host a la correspondiente dirección de
internet.
import java.net.*;
import java.io.*;
public class UDPClient{
public static void main(String args[]){
// args give message contents and server hostname
DatagramSocket aSocket = null;
try {
aSocket = new DatagramSocket();
byte [] m = args[0].getBytes();
InetAddress aHost = InetAddress.getByName(args[1]);
int serverPort = 6789;
DatagramPacket request = new DatagramPacket(m,
args[0].length(), aHost, serverPort);
aSocket.send(request);
byte[] buffer = new byte[1000];
DatagramPacket reply = new DatagramPacket(buffer,
buffer.length);
aSocket.receive(reply);
System.out.println("Reply: " + new
String(reply.getData()));
}catch (SocketException e){System.out.println("Socket: " +
e.getMessage());
}catch (IOException e){System.out.println("IO: " +
e.getMessage());}
}finally {if(aSocket != null) aSocket.close();}
92
}
}
93
}finally {if(aSocket != null) aSocket.close();}
}
}
94
indicación del final del stream. Cuando un proceso finaliza su ejecución
o falla, todos sus conectores se cierran y cualquier proceso que intente
con él descubrirá que la conexión se ha roto.
Utilización del TCP
Muchos de los servicios utilizados se ejecutan sobre conexiones TCP,
con números de puerto reservados. Entre ellos se encuentran los
siguientes.
HTTP: El protocolo de transferencia de Hipertexto se utiliza en la
comunicación entre un navegador y un servidor web.
FTP: El protocolo de transferencia de archivos permite leer los
directorios de un computador remoto y transferir los archivos entre los
computadores de una conexión.
Telnet: la herramienta Telnet proporciona acceso a un terminal en un
computador remoto.
SMTP: el protocolo simple de transferencia de de correo se utiliza para
enviar correos electrónicos entre computadores.
API Java para los Streams TCP
La interfaz java para los Streams TCP está constituido por clases
ServerSockets y Socket.
ServerSocket: esta clase está diseñada para ser utilizada por un
servidor para crear un conector en el puerto de servidor que escucha las
peticiones de conexión de los clientes. Su método Accept toma una
petición connect de la cola, o si la cola esta vacía, se bloquea hasta que
llega una petición. El resultado de ejecutar accept es una instancia de
socket, un conector que da acceso a streams para comunicarse con el
cliente.
Socket: esta clase es utilizada por el par de procesos de una conexión. El
cliente utiliza un constructor para crear un conector, especificando el
nombre DNS de host y el puerto del servidor. Este constructor no solo
crea el conector asociado con el puerto local, sino que también se
conecta con el computador remoto especificado con el puerto indicado.
95
Puede lanzar una excepción UnknowException si el nombre de host no
es correcto, o una exception IOEexception si se da un error de entrada y
salida.
La clase socket proporciona los métodos getinputstream y
getoutputstream para accesder a los streams asociados con un conector.
Un cliente TCP realiza una conexión a un servidor, envía una
petición y recibe una respuesta
El código muestra un programa cliente donde se le da como
argumento al método main un mensaje y nombre DNS del host
servidor. El cliente crea un conector ligado al nombre del host y al
puerto 7896. Obtiene DataInputStream y DataOuputStream delos
streams de los conectores de entrada y salida respectivamente, y
entonces escribe el mensaje en su stream de salida y espera a leer la
respuesta en el stream de entrada.
import java.net.*;
import java.io.*;
public class TCPClient {
public static void main (String args[]) {
// arguments supply message and hostname of destination
Socket s = null;
try{
int serverPort = 7896;
s = new Socket(args[1], serverPort);
DataInputStream in = new DataInputStream(
s.getInputStream());
DataOutputStream out =
new DataOutputStream( s.getOutputStream());
out.writeUTF(args[0]); // UTF is a string encoding see
Sn 4.3
String data = in.readUTF();
System.out.println("Received: "+ data) ;
}catch (UnknownHostException e){
System.out.println("Sock:"+e.getMessage());
}catch (EOFException
e){System.out.println("EOF:"+e.getMessage());
96
}catch (IOException
e){System.out.println("IO:"+e.getMessage());}
}finally {if(s!=null) try {s.close();}catch (IOExceptione) {System.out.println
("close:"+e.getMessage());}}
}
}
97
in = new DataInputStream( clientSocket.getInputStream());
out =new DataOutputStream( clientSocket.getOutputStream());
this.start();
} catch(IOException e)
{System.out.println("Connection:"+e.getMessage());}
}
public void run(){
try { // an echo server
String data = in.readUTF();
out.writeUTF(data);
} catch(EOFException e)
{System.out.println("EOF:"+e.getMessage());
} catch(IOException e) {System.out.println("IO:"+e.getMessage());}
} finally{ try {clientSocket.close();}catch (IOException e){/*close
failed*/}}
}
}
3 REPRESENTACION EXTERNA Y EMPAQUETADO.
La información almacenada dentro d elos programas de ejecución se
representa mediante estructuras de datos (por ejemplo, por conjuntos de
objetos interrelacionados) mientras que la información transportada en los
mensajes consiste en secuencias de bytes. Independientemente de la forma
de comunicación utilizada, las estructuras de datos deben ser apalanadas
(covertidas a una secuencia de bytes) antes de su transmisión y
reconstruidas en el destino. Los tipos de datos primitivos transmitidos en
los mensajes pueden tener valores de diferentes tipos, y no todos los
computadores almacenan valores primitivos, tales como los enteros, en el
mismo orden etc.
Entonces para hacer posible que dos computadores puedan intercambiar
datos se puede utilizar uno de los métodos siguientes:
Los valores se convierten a un formato externo acordado antes de la
transmisión y se revierte al formato local en la recepción, si los dos
computadores son del mismo tipo y lo saben, se puede omitir la
transformación al formato externo.
98
Los valores se transmiten según el formato del emisor junto con una
indicación del formato utilizado, y el receptor los convierte si es
necesario.
Hay que hacer notar sin embargo que los bytes no son alterados durante la
transmisión. Para soportar RMI o RPC. Al estándar acordado para la
representación de estructuras de datos y valores primitivos se denomina
represetacion externa de datos.
ACTIVIDAD
Utilice el código de datagramas UDP (cliente-servidor), para hacer
un prototipo que pruebe las condiciones en las que los datagramas
son, en ocasiones desechados(concejo: el programa cliente debería
ser capaz de variar el numero y el tamaño de los mensajesque envía;
el servidor debería detectar cuando se ha perdido un mensaje de un
cliente en particular)
RESUMEN
Este capitulo muestra que existen dos alternativas a la hora de construir
los bloques con los que elaborar los protocolos de internet. Existe una
interesante relación de compromiso entre estos dos protocolos: UDP
proporciona la posibilidad de un simple paso de mensajes que adolece
de fallos de omisión pero lleva asociada penalización en las prestaciones.
En el otro lado, en buenas condiciones, TCP garantiza la entrega de los
mensajes pero a cambio de tener mensajes adicionales y una mayor
latencia y costos de almacenamiento.
La interfaz del programa de aplicación para UDP proporciona una
abstracción del tipo de paso de mensajes, la forma mas simple de
comunicación entre procesos. Esto hace que el proceso emisor pueda
transmitir un mensaje simple al proceso receptor. Los procesos
independientes que contienen estos mensajes se llaman datagramas.
Tanto en Java como en cada API UNIX, el emisor especifica el destino
99
utlizando un zocalo , conector o socket(una referencia indirecta a un
puerto en particular utlizada por el proceso destino en el computador
destino)
La interfaz del programa de aplicación de TCP proporciona la
abstracción de un flujo (stream) de dos direcciones enrte pares de
procesos. La información intercambiada consiste en un stream de datos
sin limites entre mensajes. Los streams son un bloque básico para la
construcción de la comunicación productor consumidor. Un productor y
un consumidor forman un par de procesos en los cuales el papel del
primero es producir ítems de datos y el papel del segundo es consumir es
consumirlos. Los ítems de datos enviados por el productor al
consumidor se colocan en una cola a su llegada hasta que el consumidor
este en disposición de recibirlos. El consumidor debe esperar cuando no
hay datos disponibles y el productor debe esperar si se llena el
almacenamiento utilizado para guardar la cola de los Items.
BIBLIOGRAFIA RECOMENDADA
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
100
AUTOEVALUACION FORMATIVA
o Modifique el código de Streams TCP de modo que el cliente
obtenga de forma repetida una línea del usuario y la escriba en el
flujo que el servidor leera repetidamente, imprimiendo el
resultado de la lectura. Compare los datos enviados utilizando un
datgrama UDP y un stream.
o Utilice el código de datagrama UDP para construir un programa
cliente que lea repetidamente una línea de entrada del usuario, la
envie a un servidor en un datagrama UDP. Y entonces reciba un
mensaje del servidor. El cliente asociara un tiempo de espera
limite con su conector, de modo qe pueda informar al usuario
cuando el servidor no responda.
o Utilice el código de datagrama UDP, para probar el efecto causado
sobre el emisor cuandoel receptor se cae y viceversa.
101
UNIDAD ACADÉMICA Nº 06
OBJETOS DISTRIBUIDOS E
INVOCACION REMOTA
Los modelos de programación para aplicaciones distribuidas son aquellas que
se componen de programas cooperantes corriendo en los procesos distintos,
tales programas necesitan ser capaces de invocar operaciones entre otros
procesos, que por lo general residen en otros computadores diferentes. Para
lograr esto algunos modelos de programación familiares han sido extendidos
para aplicarlos a los programas distribidos.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir objetos remotos
Describir e impementar el llamado a procesos remotos (RPC).
Describir e impementar Invocacion a métodos Remotos (RMI).
102
El modelo de programación basado en eventos permite a los objetos recibir
notificaciones de los eventos que ocurren en otros objetos en los que se ha
mantenido el interés. Este modelo ha sido extendido para permitir escribir
programas distribuidos basados en eventos.
Notese que usamos el termino RMI para referirnos a una invocación de un
método remoto de forma genérica. No debemos confundir con ejemplos
particulares de invocación de un método remoto como Java RMI.
Idea Central: “¿Cómo hacer para que objetos remotos se comuniquen entre sí?”
1. MIDDLEWARE
Al software que proporciona un modelo de programación sobre bloques
básicos arquitectónicos, a saber procesos y paso de mensajes se le llama
middleware. La capa midlleware emplea protocolos basados en mensaje
entre procesos para proporcionar abstracciones de un nivel mayor, tales
como invocaciones remotas y eventos.
Aplicaciones, servicios.
}
RMI y RPC
Capas
UDP y TCP
103
Middleware capa que oculta los aspectos de comunicación, paso de
mensajes y notificación de eventos, en algunas formas pretende modelar el
sistema como si fuese local y no distribuida, y la vez que los componentes
del programa estén escritos en diferentes lenguajes de programación
teniendo en cuenta lo siguientes criterios:
Transparencia Frente a la ubicación
Protocolos de comunicación
Hardware de los Computadores y empaquetados de datos
Sistemas Operativos
Uso de diversos lenguajes de programación
2. INTERFACES
La mayoría de los lenguajes de programacion modernos proporciona
medios para organizar un programa en conjuntos de modulos que puedan
comunicarse unos con otros. La comunicación entre los modulos se puede
realizar mediante llamadas a procedimientos entre los modulos accediendo
directamente a las variables de otro modulo. Para controlar las
interacciones posibles entre los modulos, se define explícitamente una
interfaz para cada modulo, de tal manera que oculte toda la información
excepto aquella que se haga disponible a través de su interfaz. De este
modo, mientras la interfaz permanezca inalterada, la implementación
podrá cambiar sin afectar a los usuarios.
Un programa puede organizarse en módulos que se comunican entre sí,
cada módulo posee su propia interfaz (Nombre+argumentos+resultado), el
algoritmo del módulo puede variar pero no su interfase.
104
2.1. Interfaces en los sistemas distribuidos
En los sistemas distribuidos las interfaces tienen las siguientes
características.
Cada proceso posee su propio espacio de memoria,
Los módulos locales corren bajo un mismo proceso,
Módulos de dos procesos distintos no pueden acceder a las
variables del otro.
Los tipos de datos punteros sólo están restringidos al proceso local
El paso de variables de argumento y de resultados (respuesta) no
puede ser por referencia
Las Interfaces empleadas en el modelo cliente – servidor para RPC, y
modelo de objetos distribuidos para RMI.
Interfaces de servicio.
En el modelo cliente servidor, cada servidor provee un conjunto de
módulos disponibles que entregarán dicho servicio
Ejemplo: Servidor de archivos
x Leer(archivo)
Escribir(archivo,x)
Interfaces Remotas.
Cada objeto remoto pone a disposición algunos o todos los métodos
para que sean accesibles por otros objetos.Al conjunto de esos
métodos accesibles, se les llama interfaz remota.
105
Ejemplo : lenguaje de definición de interfaz de CORBA
// In file Person.idl en IDL de CORBA
struct Person {
string name;
string place;
long year;
};
interface PersonList {
readonly attribute string listname;
void addPerson(in Person p) ;
void getPerson(in string name, out Person p);
long number();
};
CORBA IDL admite herencia múltiple a nivel de interfaces:
Ejemplo: //interface Impresora
interface Impresora { ... };
interface ServidorImpresoras
{
void registrar_impresora(in Impresora prn,
in string nombre);
Impresora buscar_impresora(in string nombre);
}
106
programadores definan objetos en los que las variables de sus
instancias estén accesibles de modo directo. Pero para su uso en un
sistema distribuido de objetos, los datos de un objeto solo deberían ser
accesibles mediante sus métodos.
Referencia a Objetos: Forma de acceder a un objeto
Interfaces: Métodos (argumentos, resultados y excepciones)
Acciones (mensajes locales): Informa acerca del estado del receptos,
Cambia el estado del receptos, Puede afectar a otros objetos
(“indirectamente”).
Excepciones: Tratamiento de errores separados del código principal
del módulo
Liberación de Memoria: Cuando un objeto deja de ser accesible
108
3.3.3. Acciones en un Sistema de Objetos Distribuidos.
Como en el caso local, las acciones de un objeto remoto, puede
afectar a otros objetos también remotos. En cada caso se emplea
RMI, para tener acceso a los objetos remotos.
109
Figura 8. Invocaciones semanticas
110
3.4.2. Transparencia.
Semántica de invocación, Ubicación, Empaquetado, Paso
deMensaje, Recuperación ante fallos, Latencia es mayor al
invocar un objeto remoto, Ante una invocación fallida, construir
mecanismos para restaurar el estado del objeto remoto
4. IMPLEMENTACIÓN RMI
En una invocación de método remoto están involucrados varios objetos y
modulos separados. Como se muestra en la figura en la que un objeto A del
nivel de aplicación invoca a unmetodo en un objeto remoto B del nivel de
aplicación para el cual dispone de una referencia de objeto remoto.
Observamos los papeles de cada uno de los componentes mostrados en la
figura, tratando promero con los modulos de comunicación y referencias
remotas y después con el software RMI que se ejecuta en ellas.
111
4.2. Modulo de Referencias Remotas:
Traduce referencias locales y remotas, Utiliza una tabla de referencias
de métodos locales y métodos remotos, Los objetos remotos son
registrados en el servidor, y el proxy correspondiente, en la tabla local.
Un mensaje de respuesta puede contener una referencia a un objeto
remoto, ésta referencia se registrará en la tabla local
4.3. El software de RMI (capa RMI)
Este consiste en una capa de software entre los objetos del nivel de
aplicación y los modulos de comunicación y de referencia remota.
Proxy :
Representa al objeto remoto, redirigiendo mensajes de invocación y
entregando resultados o excepciones.Esqueleto del objeto remoto
Distribuidor del mensaje de petición/respuesta
112
Cuando es una aplicación algunas veces nos referimos a ella como
Aplicación de Objetos Distribuidos.
Las aplicaciones de objetos distribuidos necesitan
Localizar Objetos Remotos
Las aplicaciones pueden utilizar uno de los dos mecanismos para
obtener referencias a objetos remotos. Puede registrar sus objetos
remotos con la facilidad de nombrado de RMI rmiregistry. O puede
pasar y devolver referencias de objetos remotos como parte de su
operación normal.
Comunicar con Objetos Remotos
Los detalles de la comunicación entre objetos remotos son
manejados por el RMI; para el programador, la comunicación
remota se parecerá a una llámada estándard a un método Java.
Cargar Bytecodes para objetos que son enviados.
Como RMI permite al llamador pasar objetos Java a objetos
remotos, RMI proporciona el mecanismo necesario para cargar el
código del objeto, así como la transmisión de sus datos.
113
muestra que el sistema RMI utiliza una servidor Web existente para
cargar los bytecodes de la clase Java, desde el servidor al cliente y
desde el cliente al servidor, para los objetos que necesita.
5.1.1. Ventajas de la Carga Dinámica de Código
Una de las principales y únicas características de RMI es la
habilidad de descargar los bytecodes (o simplemente, código) de
una clase de un objeto si la clase no está definida en la máquina
virtual del recibidor. Los tipos y comportamientos de un objeto,
anteriormente sólo disponibles en una sóla máquina virtual,
ahora pueden ser transmitidos a otra máquina virtual,
posiblemente remota. RMI pasa los objetos por su tipo
verdadero, por eso el comportamiento de dichos objetos no
cambia cuando son enviados a otra máquina virtual. Esto
permite que los nuevos tipos sean introducidos en máquinas
virtuales remotas, y así extender el comportamiento de una
aplicación dinámicamente. El ejemplo del motor de cálculo de
este capítulo utiliza la capacidad de RMI para introducir un
nuevo comportamiento en un programa distribuido.
5.1.2. Interfaces, Objetos y Métodos Remotos
Una aplicación distribuida construida utilizando RMI de Java, al
igual que otras aplicaciones Java, está compuesta por interfaces y
clases. Los interfaces definen métodos, mientras que las clases
implementan los métodos definidos en los interfaces y, quizás,
también definen algunos métodos adicionales. En una aplicación
distribuida, se asume que algunas implementaciones residen en
diferentes máquinas virtuales. Los objetos que tienen métodos
que pueden llamarse por distintas máquinas virtuales son los
objetos remotos.
Un objeto se convierte en remoto implementando un interface
remoto, que tenga estas caracterísitcas.
Un interface remoto desciende del interface java.rmi.Remote.
114
Cada método del interface declara que lanza una
java.rmi.RemoteException además de cualquier excepción
específica de la aplicación.
El RMI trata a un objeto remoto de forma diferente a como lo
hace con los objetos no-remotos cuando el objeto es pasado
desde una máquina virtual a otra. En vez de hacer una copia de
la implementación del objeto en la máquina virtual que lo recibe,
RMI pasa un stub para un objeto remoto. El stub actúa como la
representación local o proxy del objeto remoto y básicamente,
para el llamador, es la referencia remota. El llamador invoca un
método en el stub local que es responsable de llevar a cabo la
llamada al objeto remoto.
Un stub para un objeto remoto implementa el mismo conjunto de
interfaces remotos que el objeto remoto. Esto permite que el stub
sea tipado a cualquiera de los interfaces que el objeto remoto
implementa. Sin embargo, esto también significa que sólo
aquellos métodos definidos en un interface remoto están
disponibles para ser llamados en la máquina virtual que lo
recibe.
5.1.3. Crear Aplicaciones Distribuidas utilizando RMI
Cuando se utiliza RMI para desarrollar una aplicación
distribuida, debemos seguir estos pasos generales.
Diseñar e implementar los componentes de nuestra aplicación
distribuida.
Compilar los Fuentes y generar stubs.
Hacer las clases Accesibles a la Red.
Arrancar la Aplicación.
Construir un Motor de Cálculo Genérico
115
5.1.4. Diseñar e implementar los componentes de nuestra aplicación
distribuida.
Primero, decidimos la arquitectura de nuestra aplicación y
determinamos qué componentes son objetos lcoales y cuales
deberían ser accesibles remotamente. Este paso incluye.
Definir los Interfaces Remotos. Un interface remoto
especifica los métodos que pueden ser llamados remotamente
por un cliente. Los clientes programan los interfaces remotos,
no la implementación de las clases de dichos interfaces. Parte
del diseño de dichos interfaces es la determinación de
cualquier objeto local que sea utilizado como parámetro y los
valores de retorno de esos métodos; si alguno de esos
interfaces o clases no existen aún también tenemos que
definirlos.
Implementar los Objetos Remotos. Los objetos remotos
deben implementar uno o varios interfaces remotos. La clase
del objeto remoto podría incluir implementaciones de otros
interfaces (locales o remotos) y otros métodos (que sólo
estarán disponibles localmente). Si alguna clase local va a ser
utilizada como parámetro o cómo valor de retorno de alguno
de esos métodos, también debe ser implementada.
Implementar los Clientes. Los clientes que utilizan objetos
remotos pueden ser implementados después de haber
definido los interfaces remotos, incluso después de que los
objetos remotos hayan sido desplegados.
5.1.5. Compilar las Fuentes y Generar stubs.
Este es un proceso de dos pasos. En el primer paso, se utiliza el
compilador javac para compilar los ficheros fuentes de Java, los
cuales contienen las implementaciones de los interfaces remotos,
las clases del servidor, y del cliente. En el segundo paso es
utilizar el compilador rmic para crear los stubs de los objetos
116
remotos. RMI utiliza una clase stub del objeto remoto como un
proxy en el cliente para que los clientes puedan comunicarse con
un objeto remoto particular.
5.1.6. Hacer accesibles las Clases en la Red.
En este paso, tenmos que hacer que todo - los ficheros de clases
Java asociados con los interfaces remotos, los stubs, y otras clases
que necesitemos descargar en los clientes - sean accesibles a
través de un servidor Web.
5.1.7. Arrancar la Aplicación.
Arrancar la aplicación incluye ejecutar el registro de objetos
remotos de RMI, el servidor y el cliente.
El resto de este capítulo muestra cómo seguir estos pasos para
crear un motor de cálculo.
5.1.8. Construir un Motor de Cálculo Genérico
Esta sección se enfoca a una sencilla pero potente aplicación
distribuida llamada motor de cálculo. Este motor de cálculo es
un objeto remoto en el servidor que toma tareas de clientes, las
ejecuta, y devuelve los resultados. Las tareas se ejecutan en la
máquina en la que se está ejecutando el servidor. Este tipo de
aplicación distribuida podría permitir que un número de
máquinas clientes utilizaran una máquina potente, o una que
tuviera hardware especializado.
El aspecto novedoso del motor de cálculo es que las tareas que
ejecuta no necesitan estar definidas cuando se escribe el motor de
cálculo. Se pueden crear nuevas clases de tareas en cualquier
momento y luego entregarlas el motor de cálculo para
ejecutarlas. Todo lo que una tarea requiere es que su clase
implemente un interface particular. Por eso una tarea puede ser
enviada al motor de cálculo y ejecutada, incluso si la clase que
define la tarea fue escrita mucho después de que el motor de
cálculo fuera escrito y arrancado. El código necesita conseguir
117
que una tarea sea descargada por el sistema RMI al motor de
cálculo, y que éste ejecute la tarea utilizando los recursos de la
máquina en la que está ejecutando el motor de cálculo.
El RMI carga dinámicamente el código de las tareas en la
máquina virtual del motor de cálculo y ejecuta la tarea si tener
un conocimiento anterior de la clase que implementa la tarea.
Una aplicación como ésta que tiene la habilidad de descargar
código dinámicamente recibe el nombre de "aplicación basada en
comportamiento". Dichas aplicaciones normalmente requieren
infraestructuras que permitan agentes. Con RMI, dichas
aplicaciones son parte del mecanismo básico de programación
distribuida de Java.
5.2. Diseñar e implementar los componentes de nuestra aplicación
distribuida.
Escribir un Servidor RMI
El servidor del motor de cálculo acepta tareas de los clientes, las
ejecuta, y devuelve los resultados. El servidor está compuesto por un
interface y una clase. El interface propociona la definición de los
métodos que pueden ser llamados desde el cliente. Esencialmente, el
interface define lo que el cliente ve del objeto remoto. La clase
proporciona la implementación.
5.2.1. Diseñar una Interface Remoto
Interface Compute es el pegamento que conecta el cliente y el
servidor.
En el corazón del motor de cálculo hay un protocolo que permite
que se le puedan enviar trabajos, el motor de cálculo ejecuta esos
trabajos, y los resultados son devueltos al cliente. Este protocolo
está expresado en interfaces soportados por el motor de cálculo y
por los objetos que le son enviados.
119
Como este interface no extiende Remote, el método no necesita
listar java.rmi.RemoteException en su clausula throws.
5.2.2. Implementar una Interface Remoto
La clase que implementa el interface Compute, implementa un
objeto remoto. Esta clase también propociona el resto del código
que configura el programa servidor: un método main que crea
un ejemplar del objeto remoto, lo registra con la facilidad de
nombrado, y configura un controlador de seguridad, la
implementación de la clase para un interface remoto debería al
menos.
Declarar los Interfaces remotos que están siendo
implementados.
Definir el constructor del objeto remoto.
Proprorcionar una implementación para cada método
remoto de cada interface remoto.
El servidor necesita crear e instalar los objetos remotos. Este
proceso de configuración puede ser encapsulado en un método
main en la propia clase de implementación del objeto remoto, o
puede ser incluido completamente en otra clase.
El proceso de configuración debería.
Crear e instalar un controlador de seguridad.
Crear uno o más ejemplares del objeto remoto.
Registrar al menos uno de los objetos remotos con el registro
de objetos remotos de RMI (a algún otro servicio de
nombrado que utilice JNDI).
Código motor de cálculo. La clase engine.ComputeEngine
implementa el interface remoto Compute y también incluye el
método main para configurar el motor de cálculo.
package engine;
import java.rmi.*;
import java.rmi.server.*;
import compute.*;
120
public class ComputeEngine extends UnicastRemoteObject
implements Compute
{
public ComputeEngine() throws RemoteException {
super();
}
public Object executeTask(Task t) {
return t.execute();
}
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
String name = "//localhost/Compute";
try {
Compute engine = new ComputeEngine();
Naming.rebind(name, engine);
System.out.println("ComputeEngine bound");
} catch (Exception e) {
System.err.println("ComputeEngine exception: " +
e.getMessage()); e.printStackTrace();
}
}
}
Declarando las Interfaces Remotos que están siendo
Implementados
La clase que implementa el motor de cálculo se declara
como.
public class ComputeEngine extends UnicastRemoteObject
implements Compute
Esta declaración indica que la clase implementa el interface
remoto Compute (y, por lo tanto, define un objeto remoto)
y extiende la clase java.rmi.server.UnicastRemoteObject.
Definir el Constructor
La clase ComputeEngine tiene un único constructor que no
toma argumentos.
public ComputeEngine() throws RemoteException {
super();
}
121
Nota:
En el JDK 1.2, podríamos indicar el puerto específico que
un objeto remoto utiliza para aceptar peticiones.
122
que implementa el conjunto completo de interfaces
remotos que implementa el objeto remoto.
Los objetos locales son pasados por copia utilizando el
macanismo de serialización de objetos de Java. Por
defecto, todos los campos se copian, excepto aquellos
que están marcados como static o transient. El
comportamiendo de la serialización por defecto puede
ser sobrecargado en una básica clase-por-clase.
El método main() del Servidor
El método más complicado de la implementación de
ComputeEngine es el método main. Este método es
utilizado para arrancar el ComputeEngine, y, por lo tanto,
necesita hacer la inicialización necesaria para preparar el
servidor para aceptar llamadas de los clientes. Este método
no es un método remoto, lo que significa que no puede ser
llamado desde otra máquina virtual que no sea la suya.
Cómo el método main se declara static, no está asociado
con ningún objeto, sino con la clase ComputeEngine.
Crear e Instalar un Controlador de Seguridad
Lo primero que hace el método main es crear e instalar
un controlador de seguridad. Éste protege los accesos a
los recursos del sistema por parte de código no firmado
que se ejecute dentro de la máquina virtual. El
controlador de seguridad determina si el código
descargado tiene acceso al sistema de ficheros local o
puede realizar cualquier otra operación privilegiada.
Aquí temos el código que crea e instala el controlador de
seguridad.
if (System.getSecurityManager() == null) {
System.setSecurityManager(new
RMISecurityManager());}
123
Poner el Objeto Remoto a Disposición de los Clientes
Luego, el método main crea un ejemplar de
ComputeEngine. Esto se hace con la sentencia.
Compute engine = new ComputeEngine();
Antes de que un llamador pueda invocar un método de
un objeto remoto, debe obtener una referencia al objeto
remoto. Este puede hacerse de la misma forma que en
que se obtiene cualquier otra referencia en un programa
Java, que es obteniéndolo como parte del valor de
retorno de un método o como parte de una estructura de
datos que contenga dicha referencia.
La clase ComputeEngine crea un nombre para el objeto
con la sentencia.
String name = "//localhost
/Compute";
Este nombre incluye el nombre del host localhost, en el
que se están ejecutando el registro y el objeto remoto, y
un nombre Compute, que identifica el objeto remoto en
el registro. Luego está el código necesario para añadir el
nombre al registro RMI que se está ejecutando en el
servidor. Esto se hace después (dentro del bloque try con
la sentencia.
Naming.rebind(name, engine);
Una vez que el servidor se ha registrado en el registro
RMI local, imprime un mensaje indicando que está listo
para empezar a manejar llamadas, y sale del método
main. Como el programa entrega una referencia de
ComputeEngine en el registro, éste es alcanzable por un
cliente remoto (¡el propio registro!). El sistema RMI tiene
cuidado de mantener vivo el proceso ComputeEngine. El
124
ComputeEngine está disponible para aceptar llamadas y
no será reclamado hasta que.
su nombre sea eliminado del registro, y
ningún cliente remoto mantenga una referencia al
objeto ComputeEngine.
La pieza final de código del método
ComputeEngine.main maneja cualquier excepción que
pudiera producirse.
5.2.3. Crear un Programa Cliente
El motor de cálculo es un bonito y sencillo programa - ejecuta las
tareas que le son enviadas. Los clientes del motor de cálculo son
más complejos. Un cliente necesita llamar al motor de cálculo,
pero también tiene que definir la tarea que éste va a realizar.
Nuestro ejemplo está compuesto por dos clases separadas. la
primera clase ComputePi, busca y llama a un objeto Compute. La
segunda clase Pi, implementa el interface Task y define el trabajo
que va a hacer el motor de cálcilo. El trabajo de la clase Pi es
calcular el valor del número pi, con algún número de posiciones
decimales.
Como recordaremos, el interface no-remoto Task se define de
esta forma.
package compute;
public interface Task extends java.io.Serializable {
Object execute(); }
El interface Task extiende java.io.Serializable por lo que
cualquier objeto que lo implemente puede ser serializado por el
sistema RMI y enviado a una máquina virtual remota como parte
de una llamada a un método remoto. Podríamos haber elegido
hacer que la implementación de nuestra clase implementara los
interfaces Task y Serializable, y hubiera tenido el mismo efecto.
Sin embargo, el único proposito del interface Task es permitir
125
que las implementaciones de este interface sean pasadas a
objetos Compute, por eso, una clase que implemente el interface
Task no tiene sentido que también implemente el interface
Serializable. Dado esto, hemos asociado explícitamente los dos
interfaces en el tipo system, asegurando que todos los objetos
Task sean serializables.
El código que llama a los métodos del objeto Compute debe
obtener una referencia a ese objeto, crear un objeto Task, y luego
pedir que se ejecute la tarea. Más adelante veremos la definición
de la tarea Pi. Un objeto Pi se construye con un sólo argumento,
la precisión deseada en el resultado. El resultado de la ejecución
de la tarea es un java.math.BigDecimal que representa el número
pi calculado con la precisión especificada.
La clase cliente ComputePi.
package client;
import java.rmi.*;
import java.math.*;
import compute.*;
public class ComputePi {
public static void main(String args[]) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
String name = "//" + args[0] + "/Compute";
Compute comp = (Compute) Naming.lookup(name);
Pi task = new Pi(Integer.parseInt(args[1]));
BigDecimal pi = (BigDecimal) (comp.executeTask(task));
System.out.println(pi);
} catch (Exception e) {
System.err.println("ComputePi exception: " +
e.getMessage());
126
e.printStackTrace();
}
}
}
Al igual que el servidor ComputeEngine, el cliente empieza
instalando un controlador de seguridad. Esto es necesario
porque RMI podría descargar código en el cliente. En este
ejemplo, el stub ComputeEngine es descargado al cliente.
Siempre que el RMI descargue código, debe presentarse un
controlador de seguridad. Al igual que el servidor, el cliente
utiliza el controlador de seguridad proporcionado por el sistema
RMI para este propósito.
Después de llamar al controlador de seguridad, el cliente
construye un nombre utilizado para buscar un objeto remoto
Compute. El valor del primer argumento de la línea de
comandos args[0], es el nombre del host remoto, en el que se
están ejecutando los objetos Compute. Usando el método
Naming.lookup, el cliente busca el objeto remoto por su nombre
en el registro del host remoto. Cuando se hace la búsqueda del
nombre, el código crea una URL que específica el host donde se
está ejecutando el servidor. El nombre pasado en la llamada a
Naming.lookup tiene la misma síntaxis URL que el nombre
pasado a la llamada Naming.rebind que explícamos en páginas
anteriores.
Luego, el cliente crea un objeto Pi pasando al constructor de Pi el
segundo argumento de la línea de comandos, args[1], que indica
el número de decimales utilizados en el cálculo. Finalmente, el
cliente llama al método executeTask del objeto remoto Compute.
El objeto pasado en la llamada a executeTask devuelve un objeto
del tipo java.math.BigDecimal, por eso el programa fuerza el
127
resultado a ese tipo y almacena en resultado en la variable result.
Finalmente el programa imprime el resultado.
128
/**
* Calcula pi.
*/
public Object execute() {
return computePi(digits);
}
/**
* Calcula el valor de Pi con el número de decimales especificados.
* El valor se calcula utilizando la fórmula de Machin.
*
* pi/4 = 4*arctan(1/5) - arctan(1/239)
*
* y una poderoas serie de expansiones de arctan(x)
* para una precisión suficiente.
*/
public static BigDecimal computePi(int digits) {
int scale = digits + 5;
BigDecimal arctan1_5 = arctan(5, scale);
BigDecimal arctan1_239 = arctan(239, scale);
BigDecimal pi =
arctan1_5.multiply(FOUR).subtract(arctan1_239).multiply(FOUR
);
return pi.setScale(digits,
BigDecimal.ROUND_HALF_UP);
}
/**
* Calcula el valor, en radianes, de la arcotangente de la
* inversa del entero suministrado para el número de decimales.
* El valor se calcula utilizando la poderosa serie de
* expansiones de arcotangente.
* arctan(x) = x - (x^3)/3 + (x^5)/5 - (x^7)/7 +
* (x^9)/9 ...
*/
public static BigDecimal arctan(int inverseX,
int scale)
{
BigDecimal result, numer, term;
BigDecimal invX = BigDecimal.valueOf(inverseX);
BigDecimal invX2 =
BigDecimal.valueOf(inverseX * inverseX);
numer = ONE.divide(invX, scale, roundingMode);
result = numer;
int i = 1;
do {
numer =
numer.divide(invX2, scale, roundingMode);
int denom = 2 * i + 1;
term =
129
numer.divide(BigDecimal.valueOf(denom),
scale, roundingMode);
if ((i % 2) != 0) {
result = result.subtract(term);
} else {
result = result.add(term);
}
i++;
} while (term.compareTo(ZERO) != 0);
return result;
}
}
La característica más interesante de este ejemplo es que el objeto
Compute no necesita una definición de la clase Pi hasta que se le
pasa un objeto Pi como un argumento del método executeTask.
Hasta este punto, el código de la clase se ha cargado por el RMI
dentro de la máquina virtual del objeto Compute, se ha llamado
al método execute, y se ha ejecutado el código de la tarea. El
Object resultante (que en el caso de la tarea Pi es realmente un
objeto java.math.BigDecimal) es enviado de vuelta al cliente,
donde se utiliza para imprimir el resultado.
El hecho de que el objeto Task suministrado calcule el valor de Pi
es irrelevante para el objeto ComputeEngine. Por ejemplo,
también podríamos implementar una tarea que generara un
número primo aleatorio utilizando un algoritmo probabilistico.
(Esto también consume muchos recursos y por tanto es un
candidato para ser enviado al ComputeEngine). Este código
también podría ser descargado cuando el objeto Task fuera
pasado al objeto Compute. Todo lo que el objeto Compute sabe
es que cada objeto que recibe implementa el método execute, no
sabe (y tampoco le interesa) qué hace la implementación.
5.3. Compilar el Ejemplo
Ahora aprenderemos cómo crear un fichero JAR, las clases del
servidor, y las clases del cliente. Veremos como la clase Pi será
descargada al servidor durante la ejecución. También veremos como el
130
stub remoto ComputeEngine será descargado desde el servidor hasta
el cliente durante la ejecución.
El ejemplo separa los interfaces, la implementación de los objetos
remotos y el código del cliente en tres paquetes diferentes.
compute (Los interfaces Compute y Task)
engine (Implementación de la clase, el interface y el stub de
ComputeEngine)
client (la implementación del cliente ComputePi y de la tarea Pi).
UNIX.
cd /home/waldo/src
javac compute/Compute.java
javac compute/Task.java
jar cvf compute.jar compute/*.class
131
adding: compute/Task.class (in=200) (out=164)
(deflated 18%)
132
Detalles Específicos de la Plataforma: Compilar el Motor de Cálculo y sus Stubs
Windows.
cd c:\home\ana\src
javac engine\ComputeEngine.java
rmic -d . engine.ComputeEngine
mkdir c:\home\ana\public_html\classes\engine
cp engine\ComputeEngine_*.class
c:\home\ana\public_html\classes\engine
Unix.
cd /home/ana/src
javac engine/ComputeEngine.java
rmic -d . engine.ComputeEngine
mkdir /home/ana/public_html/classes/engine
cp engine/ComputeEngine_*.class
Windows.
set CLASSPATH=c:\home\ana\src;c:\home\ana\public_html\classes\compute.jar
Unix:
setenv CLASSPATH /home/ana/src:/home/ana/public_html/classes/compute.jar
Ahora compilamos el fichero fuente ComputeEngine.java y
generamos un stub para la clase ComputeEngine y coloca el stub
accesible a la red. Para crear el stub (y opcionalmente los ficheros
esqueleto) ejecutamos el compilador rmic sobre los nombres
totalmente cualificados de las clases de implementación de los
objetos remotos que deberían encontrarse en el path de clases. El
comando rmic toma uno o más nombres de clase como entrada y
produce, como salida, ficheros de clases con la forma
ClassName_Stub.class (y opcionalmente ClassName_Skel.class).
El fichero esqueleto no será generado si llamamos a rmic con la
opción -v1.2. Esta opción sólo debería utilizarse si todos nuestros
clientes van a utilizar el JDK 1.2 o posterior.
La opción -d le dice al compilador rmic que situe los ficheros de
clases generados, ComputeEngine_Stub y ComputeEngine_Skel,
en el directorio c:\home\ana\src\engine. También necesitamos
poner estos ficheros accesibles en la red, por eso debemos
copiarlos en el área public_html\classes.
Como el stub de ComputeEngine implementa el interface
Compute, que referencia al interface Task, también necesitamos
133
poner estas clases disponibles en la red. Por eso, el paso final es
desempaquetar el fichero compute.jar en el directorio
c:\home\ann\public_html\classes para hacer que los interfaces
Compute y Task estén disponibles para su descarga.
Detalles Específicos de la Plataforma: Desempaquetar el Fichero JAR
Windows.
cd c:\home\ana\public_html\classes
jar xvf compute.jar
Unix.
cd /home/ana/public_html/classes
jar xvf compute.jar
El comando jar muestra esta salida.
created: META-INF/
extracted: META-INF/MANIFEST.MF
extracted: compute/Compute.class
extracted: compute/Task.class
5.3.3. Construir las clases del Cliente
Asumamos que el usuario jones ha creado el código del cliente
en el directorio c:\home\jones\src\client y colocará la clase Pi
(para que sea descargada por el motor de cálculo) en el directorio
accesible a la red c:\home\jones\public_html\classes (también
disponible mediante algunos servidores como
http://host/~jones/classes/). Las dos clases del lado del cliente
están contenidas en los ficheros Pi.java y ComputePi.java en el
subdirectorio client.
Para construir el código del cliente, necesitamos el fichero
compute.jar que contiene los interfaces Compute y Task que
utiliza el cliente. Digamos que el fichero compute.jar está situado
en c:\home\jones\public_html\classes. Las clases del cliente se
pueden construir así.
Detalles Específicos de la Plataforma: Compilar el Cliente
Windows:
set
CLASSPATH=c:\home\jones\src;c:\home\jones\public_html\classes\compu
te.jar
cd c:\home\jones\src
javac client\ComputePi.java
javac -d c:\home\jones\public_html\classes client\Pi.java
134
UNIX.
setenv CLASSPATH
/home/jones/src:/home/jones/public_html/classes/compute.jar
cd /home/jones/src
javac client/ComputePi.java
javac -d /home/jones/public_html/classes client/Pi.java
135
entornos windows, la barra invertida necesita ser representada con
dos barras invertidas en el fichero de policía.
grant {
permission java.net.SocketPermission "*:1024-65535",
"connect,accept";
permission java.io.FilePermission
"c:\\home\\ana\\public_html\\classes\\-", "read";
permission java.io.FilePermission
"c:\\home\\jones\\public_html\\classes\\-", "read";
};
Este ejemplo asume que el fichero de policía se llama java.policy y
contiene los permisos apropiados. Si ejecutamos este ejemplo en el
JDK 1.1, no necesitamos un fichero de policía ya que el
RMISecurityManager proporciona toda la protección que necesitamos.
Arrancar el Servidor
Antes de arrancar el motor de cálculo, necesitamos arrancar el registro
de RMI con el comando rmiregistry. Como explicamos en páginas
anteriores el registro RMI es una facilidad de nombrado que permite a
los clientes obtener una referencia a un objeto remoto.
Observa que antes de arrancar el rmiregistry, debemos asegurarnos de
que el shell o ventana en la que ejecutaremos rmiregistry no tiene la
variable de entorno CLASSPATH, o si la tiene ésta no incluye el path a
ninguna clase, incluyendo los stubs de nuestras clases de
implementación de los objetos remotos, que querramos descargar a los
clientes de nuestros objetos remotos.
Si arrancamos el rmiregistry y éste puede encontrar nuestras clases
stub en el CLASSPATH, no recordará que las clases stub cargadas
pueden ser cargadas desde el codebase de nuestro servidor (que fue
especificado por la propiedad java.rmi.server.codebase cuando se
arrancó la aplicación servidor). Como resultado, el rmiregistry no
enviará a los clientes un codebase asociado con las clases stub, y
consecuentemente, nuestros clientes no podrán localizar y cargar las
clases stub (u otras clases del lado del servidor).
136
Para arrancar el registro en el servidor, se ejecuta el comando
rmiregistry. Este comando no produce ninguna salida y normalmente
se ejecuta en segundo plano.
Detalles Específicos de la Plataforma: Arrancar el Registro en el Puerto por
Defecto
Windows (utilizar javaw si no está disponible start).
unset CLASSPATH
start rmiregistry
UNIX.
unsetenv CLASSPATH
rmiregistry &
Unix.
setenv CLASSPATH /home/ana/src:/home/ana/public_html/classes/compute.jar
137
java -Djava.rmi.server.codebase=file:/c:\home\ana\public_html\classes/
-Djava.rmi.server.hostname=zaphod.east.sun.com
-Djava.security.policy=java.policy
engine.ComputeEngine
UNIX.
java -Djava.rmi.server.codebase=http://zaphod/~ana/classes/
-Djava.rmi.server.hostname=zaphod.east.sun.com
-Djava.security.policy=java.policy
engine.ComputeEngine
Arrancar el Cliente
Una vez que el registro y el motor se están ejecutando, podemos
arrancar el cliente, especificando.
la localización donde el cliente sirve sus clases (la clase Pi)
utilizando la propiedad java.rmi.server.codebase.
como argumentos de la línea de comandos, el nombre del host
(para que el cliente sepa donde localizar el objeto remoto) y el
número de decimales utilizado en el cálculo del número Pi.
java.security.policy, una propiedad utilizada para especificar el
fichero de policía que contiene los permisos adecuados.
Primero seleccionamos el CLASSPATH para ver el cliente de jones y el
fichero JAR que contiene los interfaces. Luego se arranca el cliente de
esta forma.
Detalles Específicos de la Plataforma: Arrancar el Cliente
Windows.
set CLASSPATH c:\home\jones\src;c:\home\jones\public_html\classes\compute.jar
java -Djava.rmi.server.codebase=file:/c:\home\jones\public_html\classes/
-Djava.security.policy=java.policy
client.ComputePi localhost 20
UNIX.
setenv CLASSAPTH /home/jones/src:/home/jones/public_html/classes/compute.jar
java -Djava.rmi.server.codebase=http://ford/~jones/classes/
-Djava.security.policy=java.policy
client.ComputePi zaphod.east.sun.com 20
138
ACTIVIDAD
Discuta la semántica de invocación que puede lograrse cuando se
implementa el protocolo petición-respuesta, sobre una conexión
TCP/IP, que garantiza que los datos se entrean en el orden de su
envio. Sin pérdidas y sin duplicación. Tenga en cuenta todas las
condiciones que puedan causar la ruptura de una conexión.
RESUMEN
Este capitulo ha mostrado dos paradigmas de la programación
distribuida: la invocación de métodos remotos y lo sistemas basados en
eventos. Ambos paradigmas contemplan los objetos como entidades
independientes que pueden recibir invocaciones desde objetos remotos.
En el primer caso, un método en la interfaz remota de un objeto en
particular es invocado sincrónicamente (el que invoca espera por la
respuesta). En el segundo caso se envían notifcaciones asincrónicamente
a varios multiples suscriptores cuando quiera que ocurra un evento
publicado hacia el objeto interesado.
El modelo de objetos distribuidos es una extensión del modelo de objetos
locales que se emplea en los lenguajes de programación badaos en
objetos. Los objetos encapsulados constituyen componentes utiles en un
sistema distribuido, puesto que la encapsulación los hace enteramente
responsables de gestionar su propio estado, y la invocación de métodos
locales puede extenderse hacia la invocación remota. Cada objeto de un
sistema distribuido tiene una referencia a un objeto remoto (un
identificador global único) y una interfaz remota que especifica cuales de
sus operaciones pueden ser invocadas remotamente.
La invocación a un método local da una semántica del tipo exactamente
una vez, mientras que una invocación remota no puede dar las mismas
garantías dado que los objetos participantes stan en computadoras
diferentes, que pueden fallar independientemente y están ligados por
una red, que también podría fallar. Lo mejor que podemos obtener es
139
una semántica del tipo como máximo una vez, debido a sus dieferentes
caracteristicas de fallo y prestaciones y a la posibilidad de acceso
concurrente a esos objetos remoto, no parece una buena idea hacer que
invocación remota parezca idéntica a una invocación local.
Las implentaciones de Middleware para RMI proporcionan
componentes(que comprenden proxy, esqueleto y distribuidor) que
oculta detalles del empaquetado, el paso de mensajes y la localización de
los objetos remotos desde los programas cliente y servidor. Estos
componentes pueden generarse mediante un compilador de interfaces.
Java RMI extiende la invocación local en invoacion remota emplenado la
misma sintaxis, pero habrá que especificar las interfaces remotas como
una extensión de una interfaz denominada Remote y también cada
método deberá lanzar la excepción RemoteException. Esto garantiza que
los programadores son conscientes de que realizan llamadas remotas o
implemnetan objetos remotos, y permitiéndoles gestionar los errores o
diseñar objetos adecuados para acceso en caso de ocurrencia.
BIBLIOGRAFIA RECOMENDADA
o Java Remote Method Invocation (RMI);
http://java.sun.com/products/jdk/rmi/
o jGuru: Remote Method Invocation: Introduction;
http://developer.java.sun.com/developer/onlineTraining/rmi/
o RMI y CORBA (RMI sobre IIOP);
http://developer.java.sun.com/developer/earlyAccess/idlc/
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
140
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o La interfaz Eleccion proporciona dos metodos remotos:
Vota: con dos parametros mediante los que el cliente indica el
nombre del candidato (una cadena de texto) y el numero del
votante (un entero que sirve para asegurar que cada usuario solo
vota una vez). Los numeros de votante se escogen de modo
disperso del intervalo de los enteros para que sean dificiles de
adivinar.
¿Cuáles de los parametros de estos procedimientos son de entrada
y cuales osn de salida?.
o El servicio Eleccion debe asegurar que se registra cada voto
cuando quiera que un usuario piense que ha emitido su voto.
Explique el efecto de la semantica de llamada pudiera ser sobre el
servicio eleccion.
¿seria aceptable la semantica de llamada al menos una vez para el
servicio Eleccion o recomendaria una semantica de llamada del
tipo como maximo una vez?
141
UNIDAD ACADÉMICA Nº 07
SISTEMAS DE ARCHIVOS
DISTRIBUIDOS
Los sistemas de archivos distribuidos soportan la compraticion de información
en forma de archivos a través de internet. Un servicio de archivos bien diseñado
proporciona acceso a los archivos alamacenados en un servidor con
prestaciones y fiabilidad semejantes (y en algunos casos mejor) que la de
archivos almacenados en discos locales. Un sistema de archivos distribuido
permite a los programas almacenar y acceder a archivos remotos del mismo
modo como que si fueran loscales, permitiendo a los usuarios acceder a los
archivos desde cualquier compuatdor de la intranet.
Un sistema de archivos distribuidos, (DFS), es una implementación distribuida
del clásico modelo de tiempo compartido de un sistema de archivos, donde
varios usuarios comparten archivos y almacenan recursos.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir que es sistema de archivos distribuido.
Definir, describir caracteristicas de los sistemas de archivos distribuido.
Definir, describir los requisitos de los sistemas de archivos diatribuido
Conocer e implementar la arquitectura de los sistemas de archivos
distribuidos.
142
por los detalles de la asignación y la disposición del almacenamiento. Los
archivos se almacenan en Discos y otros medios de almacenamiento no
volátiles.
Los sistemas de archivos están diseñados para almacenar y gestionar gran
número de archivos, con posibilidades de crear, nombrar y borrar archivos.
La nomenclatura de los archivos está respaldada por la utilizaciónde
directorios.
Un directorio es un archivo.
En la figura 1 se muestra una estructura típica de niveles para la
implementación de un sistema de archivos no distribuidos en un sistema
operativo convencional. Cada nivel depende sólo de los niveles que se
encuentran debajo de él. La implementación de un servicio de archivos
distribuidos requiere todos los componentes indicados, junto a componentes
adicionales para ocuparse de la comunicación cliente – servidor y de la
nomenclatura y ubicación de los archivos distribuidos.
143
2. REQUISITOS DEL SISTEMA DE ARCHIVOS DISTRIBUIDOS
Muchos de los requisitos y potenciales obstáculos en el diseño de servicios
distribuidos fueron ya observados en los primeros desarrollos de sistemas
de archivos distribuidos. Inicialmente ofrecían transparencia de acceso y
transparencia de ubicación, los requisitos de prestaciones, escalabilidad,
control de concurrencia, tolerancia a fallos y seguridad surgieron y se fueron
satisfaciendo en fases posteriores del desarrollo. Discutimos estos requisitos,
y otros relacionados, en las subsecciones siguientes.
Transparencia. El servicio de archivos es el servicio más fuertemente cargado
en una intranet, por lo que su funcionalidad y prestaciones son críticas. El
diseño de un servicio de archivos debe soportar muchos de los requisitos de
transparencia para sistemas distribuidos.
2.1. Actualizaciones concurrentes de archivos.
Los cambios en un archivo por un cliente no deben interferir con la
operación de otros clientes que acceden o cambian simultáneamente el
mismo archivo.
2.2. Replicación de Archivos.
En un servicio de archivos que soporta replicaciones, un archivo puede
estar representado por varias copias de su contenido en diferentes
ubicaciones Esto tiene dos beneficios, permite que múltiples servidores
compartan la carga de proporcionar un servicio a los clientes que
acceden al mismo conjunto de archivos, mejorando la escalabilidad del
servicio y mejorando la tolerancia a fallos, permitiendo a los clientes
localizar otro servidor que mantiene una copia del archivo cuando ha
fallado.
2.3. Heterogeneidad del hardware y del sistema operativo.
Las interfaces del servicio deben estar definidas de modo que el software
del cliente y el servidor pueden estar implementados por diferentes
sistemas operativos y computadores. Este requisito es un aspecto
importante de la extensibilidad.
144
2.4. Tolerancia a Fallos.
El papel central de un servicio de archivos en los sistemas distribuidos
hace que sea esencial que el servicio continúe funcionando aun en el caso
de fallos del cliente y del servidor. Afortunadamente un diseño
moderadamente tolerante a fallos es inmediato para servidores sencillos.
Para manejar los fallos de comunicación transitorios, el diseño puede
estar basado en la semántica de invocación de cómo máximo una vez. O
puede utilizarse la semántica más sencilla al menos una vez con un
protocolo de servidor diseñado en términos de operaciones
idempotentes, asegurando que solicitudes duplicadas no producen
actualizaciones inválidas en los archivos.
2.5. Consistencia.
Los sistemas de archivos convencionales, como los se proporcionan en
UNIX, ofrecen una semántica de actualización de una copia. Esto se
refiere a un modelo para acceso concurrente a archivos en el que el
contenido del archivo visto por todos los procesos que acceden o
actualizan a un archivo dado es aquel que ellos verían si existiera una
única copia del contenido del archivo.
2.6. Seguridad.
Virtualmente todos los sistemas de archivos proporcionan mecanismos
de control de acceso basados en el uso de listas de control de acceso. En
sistemas de archivos distribuidos, hay una necesidad de autenticar las
solicitudes del cliente por lo que el control de acceso en el servidor está
basado en identificar al usuario correcto y proteger el contenido de los
mensajes de solicitud y respuesta con firmas digitales y (opcionalmente)
encriptación de datos secretos.
2.7. Eficiencia.
Un servicio de archivos distribuidos debe ofrecer posibilidades con la
misma potencia y generalidad que las que se encuentran en los sistemas
de archivos convencionales y deben proporcionar un nivel de
prestaciones comparable.
145
3. ARQUITECTURA DEL SERVICIO DE ARCHIVOS
El alcance de la extensibilidad y configurabilidad se mejora si el servicio de
archivos se estructura en tres componentes, un servicio de archivos plano, un
servicio de directorio y un módulo cliente. El servicio de archivos plano y el
servicio de directorio exportan cada uno una interfaz, para su uso por los
programas del cliente y sus interfaces RPC, consideradas conjuntamente,
proporcionan un conjunto global de operaciones para acceso a archivos.
El módulo cliente proporciona una interfaz de programación sencilla con
operaciones sobre archivos semejantes a las encontradas en los sistemas de
archivos convencionales. El diseño es abierto en el sentido que pueden
utilizarse diferentes módulos cliente para implementar diferentes interfaces
de programación, simulando las operaciones sobre archivos de una variedad
de diferentes sistemas operativos y optimizando las prestaciones para
diferentes configuraciones de hardware del cliente y el servidor.
Servicio de archivos
plano
Módulo de cliente
146
Cuando el servicio de archivos planos recibe una solicitud para crear un
archivo, genera un nuevo UFID para el y lo devuelve al solicitante.
3.2. Servicio de directorio.
El servicio de directorio proporciona una transformación entre nombres
de texto para los servicios UFID. Los clientes pueden obtener UFID de un
archivo indicando su nombre de texto al servicio de directorio. El
servicio de directorio proporciona las funciones necesarias para generar
directorios. Para añadir nuevos nombres de archivo a los directorios y
para obtener UFID desde los directorios. Es un cliente del servicio de
archivos plano, sus archivos de directorio están almacenados en archivos
del servicio de archivos plano. Cuando se adopta un esquema jerarquico
de nominación de archivos, como el UNIX, los directorios mantienen
referencia a otros directorios.
3.3. Modulo cliente.
En cada computador cliente se ejecuta un modulo cliente, que integra y
extiende las operaciones del servicio de archivos plano y el servicio de
directorio bajo una interfaz de programación de aplicaciones sencilla,
que estará disponible para los programas a nivel de usuario en los
computadores cliente. Por ejemplo en maquinas UNIX, se debe
proporcionar un modulo cliente que emula un conjunto total de
operaciones UNIX sobre archivos, interpretando los nombres
compuestos por UNIX mediante reiteradas solicitudes al servicio de
directorio. El modulo cliente mantiene también información sobre las
ubicaciones en la red del proceso servidor de archivos planos y del
proceso servidor de directorio.
3.4. Control de Acceso
En el sistema de archivos UNIX, se comprueban los derechos de acceso
del usuario frente al modo de acceso (lectura y escritura) solicitado en la
operación de llamada y el archivo solo es abierto solo si el usuario tiene
los derechos de acceso necesarios. La identidad del usuario (UID)
utilizada en la comprobación de los derechos de acceso es el resultado
147
del login autenticado anterior del usuario y no puede ser alterado en las
implementaciones no distribuidas. Los derechos de acceso resultantes se
retienen hasta que el archivo se cierra y no se necesitan otras
comprobaciones en las operaciones posteriores solicitadas sobre el
mismo archivo.
En las implemntaciones distribuidas, la comprobación de los derechos de
acceso se ha de realizar en el servidor por que la interfaz del servidor
RPC es un punto desprotegido de acceso para los archivos. La identidad
del usuario ha de pasarse con cada solicitud y el servidor se hace
vulnerable a identidades antiguas.
3.5. Sistema de Archivos Jerarquico
Un servicio de archivos jerarquico, como uno de los que proporciona
UNIX, consiste en un número de directorios organizados en una
estructura de árbol. Cada directorio contiene los nombres de los archivos
y toros directorios que son accesibles que son accesibles desde él.
Cualquier archivo o directorio puede ser referenciado con un nombre de
ruta (path), un nombre compuesto de varias partes que representa una
ruta a través del árbol. La raíz tiene un nombre que le distingue y cada
archivo o directorio tiene un nombre en un directorio. El esquema de
nominación de los archivos de UNIX no es jerarquica estricta, los
archivos pueden tener varios nombres y pueden estar en varios
directorios. Esto se implementa mediante una operación de enlace (link)
que añade un nuevo nombre para un archivo en un directorio
especificado.
3.6. Agrupacion de Archivos.
Un grupo de archivos es una colección de archivos ubicada en un
servidor dado. Un servidor puede mantener varios grupos de archivos y
los grupos pueden ser recolocados entre servidores, pero un archivo no
puede cambiar el grupo al que pertenece. Una construcción similar
(llamada filesystem-volumen) se utiliza en UNIX y en la mayoría de los
sistemas operativos. Los grupos de archivos se introdujeron inicialmente
148
paratrasladar colecciones de archivos almacenados en cartuchos de disco
extraíbles en computadores. En un servicio de archivos distribuidos los
grupos de archivos permiten la asignación de archivos a servidores de
archivos almacenados en varios servidores.
Servidor archivos
archivos Cliente
NFS UNIX
UNIX NFS
archivos
Protocolo
NFS
149
Sistemas de Archivos Virtuales.- Otros sistemas de archivos
distribuidos pueden considerar que permiten las llamadas al sistema de
UNIX, y si lo hacen, podrían integrarse de la misma forma. La
integración se obtiene mediante un módulo de archivos virtual (VFS),
que ha sido añadido al núcleo de UNIX para distinguir entre archivos
remostos y locales y para traducir los identificadores de archivos,
independientes de UNIX y otros sistemas de archivos. En resumen, VFS
mantiene la pista de los sistemas de archivos que están actualmente
disponibles tanto local como remotamente, pasa cada solicitud al módulo
del sistema local apropiado (el sistema de archivos UNIX, el módulo
cliente NFS o el módulo de servicio de otro sistema de archivos).
– Un único módulo cliente sirve a todos los procesos del nivel del
usuario, con una caché compartida de los bloques utilizados
recientemente.
150
– La clave de encriptación utilizada para autentificar ID del usuario
pasadas al servidor puede retenerse en el núcleo, previniendo la
impersonaciónpor clientes a nivel de usuario.
ACTIVIDAD
Esboce meeotodos mediante los cuales un odulo cliente podría
emular la interfaz del servicio de archivos UNIX utilizando nuestro
modelo de servicio de archivos.
RESUMEN
Los sistemas de archivos distribuidos son empleados intensamente en las
organizaciones actuales y sus prestaciones han estado a muchos ajustes.
Las caracterisiticas fundamentales para el diseño para sistemas de
archivos distribuidos son:
La utlizacion efectuva de la memoria caché en el cliente para
conseguir iguales prestaciones o mejores que los de los sistemas
de archivos locales.
El manetnimiento de la consistencia entre multiples copias de
archivos en las cachés de los clientes cuando son actualizadas.
La recuperación después de un fallo en el servidor o en el cliente.
El alto rendimiento en la lectura y escriturade archivos de todos
los tamaños,
La escalabilidad.
151
BIBLIOGRAFIA RECOMENDADA
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o ¿ por que no hay operación Abre y Cierra en nuestra interfaz de
servicio de archivos planos o en el servicio de directorio? ¿Cuáles
son las diferencias entre operación Busca de nuestro servicio de
directorio y la open de UNIX?
o ¿Por qué deben ser unicos los UFID entre todos los posibles
sistemas de archivos? ¿Cómo se asegura la unicidad para los
UFID?
152
UNIDAD ACADÉMICA Nº 08
SEGURIDAD EN SISTEMAS
DISTRIBUIDOS
En el mundo actual hay una necesida apremiante de medidas de seguridad
para garantizar la privacidad, integridad y disponibilidad de recursos en los
sistemas distribuidos. Los ataques contra la seguridad toman las formas de
escucha, suplantación, modificación y denegación del servicio. Los diseñadores
de sistemas distribuidos seguros deben tratar con interfaces de servicio
desprotegidos y redes inseguras en un entorno donde se supones que los
atacantes tienen conocimientos sobre los algoritmos emplesados para desplegar
los recursos computacionales.
INDICADORES DE LOGRO
Al terminar esta unidad el estudiante estará en condiciones de:
Definir, describir que es una amenaza y ataque en sistemas distribuidos.
Definir, describir los tipos de ataques en los sistemas de distribuidos.
Conocer e implementar las técnicas de seguridad los sistemas de
distribuidos
1. AMENAZAS Y ATAQUES
Algunos ataques son obvios, por ejemplo en la mayoría de los tipos de
redes locales es fácil construir y lanzar sobre un computador conectado
para obtener copias de los mensajes en otros computadores. Otras
amenazas son mas sultiles, si los clientes fallan en autenticar los servidores
un programa podría situarse a si mismo en lugar del autentico servidor de
archivos y asi obtener copias de información confidencial que los clientes,
inconcientemente envían para su almacenamiento.
153
Además del peligro de pérdida o daño de información, o de recursos por
violaciones directas también pueden aparecer reclamos fraudulentos contra
el propietario de un sistema que no sea demostrablemente seguro. Para
evitar tales reclamos, el propietario debe estar en situación de desacreditar
el reclamo mostrando que el sistema es seguro contra tales violaciones o
también produciendo un registro histórico de todas las transacciones
durante el periodo en cuestión. Un ejemplo es el problema de debito
fantasma en los dispensadores automaticos de dinero en efectivo(cajeros
automaticos). La mejor respuesta que un banco pueda aportar a tal reclamo
es proporcionar un registro de la transacciones firmado digitalmente por el
titular de la cuenta, de manera que no pueda ser falsificado por un tercero.
La principal meta de la seguridad es restringir el acceso a la información y
los recursos de modo que solo tengan acceso aquellos principales
autorizados. Las amenazas de seguridad caen en tres amplias clases:
Fuga: la adquisición de información por receptores no autorizados.
Alteración: la modificación no autorizada de información.
Vandalismo: interferencia con el modo de operación adecuado de un
sistema, sin ganancia alguna para el perpetrador.
Los ataques en los sistemas distribuidos dependen de la obtención de
acceso a los canales de comunicación existentes o del establecimiento de
canales nuevos que se suplantan a las conexiones(empleamos el termino
canal para hacer alusión a cualquier mecanismo de comunicación de
procesos).
Los métodos pueden clasificarse más aun en función del modo en que se
abusa del canal:
Fisgar: obtener copias de mensajes sin autoridad.
Suplantar : enviar o recibir mensajes utilizando la identidad de otro
principal sin su autorización.
Alterar mensajes: Interceptar mensaje y alterar sus contenidos antes de
pasarlos al receptor pretendido.
Reenviar : almacenar mensajes interceptados y enviarlos mas tarde.
154
Dengacion de servicio: desbordar un canal u otros recursos con
mensajes con el fin de impedir que otros accedan a él.
En teoría estos son los peligros, pero ¿como se llevan a la practica esto
ataques? Los ataques victoriosos dependen de los descubrimientos de
agujeros de seguridad en los sistemas. Desgraciadamente estos problemas
son demasiados comunes en los sistemas de hoy en dia y no son
necesariamente complicados.
3. FUGAS DE INFORMACIÓN
Si pudiera observarse la sucesión de mensaes en la comunicación entre dos
procesos, seria posible vislumbrar información importante aun de su sola
existencia, por ejemplo: un flujo de mensajes hacia un vendedor hacerca de
una mercancía en particular podría indicar un alto nivel de comercio en esa
mercancía. Hay muchas formas sutiles de fugas de información algunas
maliciosas y otras que son consecuencias de errores inadvertidos.
155
puja a una subasta por email), la seguridad criptográfica basada en las
técnicas que se describen en este capitulo se incluye actualmente en
muchos clientes de correo.
Compra de bienes y servicios: tales transacciones son hoy en dia, algo
usual. Los compradores selecciona bienes y pagan por ellos empleando
la web, mas tarde sonenviados por el mecanismo de reparto mas
apropiado. El software y otros productos digitales (como videos y
grabaciones), se pueden enviar mediante el procedimiento de descarga
desde internet los bienes tanjibles como libros, disco compactos y casi
cualquier otro tipo de producto puede venderse desde comercios en
internet estos se envían mediante un servicio de reparto.
Transacciones bancarias: los bancos electrónicos de hoy en dia ofrecen
virtualmente a los usuarios todos los servicos que proporcionan los
bancos convencionales estos proporcionan la comprobación de los cargos
y balances de cuentas, transferencias de efectivo entre cuentas, el
establecimiento de cargos regulares automaticos y demás desde la
cuenta.
Microtransacciones : internet se presta a proporcionar pequeñas
cantidades de información y otros servicios a sus clientes, por ejemplo el
acceso a la mayoría de las paginas web no exige ningún pago, pero el
desarrollo del web como un medio de publicacon de alta calidad
seguramente depende de que hasta que punto los proveedores de
información puedan obtener beneficio de los clientes de esta
información.
156
CRIPTOGRAFÍA.
La encriptación es el proces de codificación de un mensaje de forma que
puedan ocultar sus contenidos, la criptografía moderna incluye algunos
algoritmos seguros de encritacion y desencriptacion de mensajes. Todos
ellos se basan en el uso de ciertos secretos llamados claves. Una clave
criptográfica es un parámetro empleado en un algoritmo de encritptacion
de forma que la encriptación no sea reversible sin el conocimiento de una
clave.
a) Criptoalgorítmos Clásicos
Revisión de la historia de la cifra.
Cifra de sustitución: Monoalfabética. Polialfabética. Distribución de
claves. Poligramas. Homofónica. Cifra de transposición. Ruptura
mediante el uso del análisis de frecuencia. Teoría de Shanon del secreto
perfecto y sus aplicaciones prácticas. Data Encryption Standard – primer
intento de estandarizar la protección de la información en redes de
computadoras.
Revisión histórica de los criptosistemas
Los roles de NBS – NSA – IBM. Aceptación por parte de organismos
oficiales y sectores comerciales. Principales características del algoritmo.
Criterios de diseño. Criptoanálisis diferencial y lineal. Vulnerabilidad a
un ataque de búsqueda exhaustiva de clave. Triple DES: Modos de
operación. Seguridad de los diferentes modos de operación.
Otras cifras de bloque de clave simétrica.
IDEA, RC5, Blowfish, DESX, Skipjack. Algoritmos de cifrado para una
implementación rápida por software.
Implementación de cifras de bloque de clave secreta
Arquitecturas generales de hardware y software. Implementaciones
básicas, operación de los componentes de software y hardware.
Arquitecturas de fast-hardware: loop unrolling;
inner-round pipelining; outer-round pipelining; mixed inner- and outer-
round pipelining.
157
Limitaciones impuestas por el ambiente de implementación.
Desarrollos de nuevo Advanced Encryption Standard –AES.
Contexto de desarrollo. Criterios de evaluación. Algoritmos candidatos a
AES. Comparación de los candidatos a AES: Seguridad; Eficiencia en la
implementación por software; Eficiencia en la implementación por
hardware; Flexibilidad; Procesos de evaluación.
158
c) Servicios de Seguridad
Firma Digital. Digital Signature Standard – DSS.
Clasificación de firmas digitales. Ataques contra la firma digital. Relleno
de seguridad para firmas. Digital Signature Standard (DSS). Análisis
comparativo de RSA y DSS – Seguridad, perfomance, funcionalidad.
Temas legales respecto a la firma digital.
Integridad de datos y autenticación – dos faces del mismo problema.
Funciones de hash y MACs.
Requerimientos para una función de hashing segura. Clasificación de las
funciones de hashing. Ataques contra funciones de hashing. Aplicaciones
estándar y no estándar.: firma digital y códigos de autenticación;
detección de virus; almacenamiento de password; cifrado rápido.
Familias de algoritmos para funciones de hashing y su seguridad.
Requerimientos para Message Authentication Code (MAC). Familias de
MACs y su seguridad. Combinación de autenticación y confidencialidad.
d) Administración de claves
Intercambio de claves para criptosistemas de clave simétrica.
Clave de sesión y clave de encripción. Intercabio de claves usando
centros de distribución. Protocolo de intercambio de clave de Diffie-
Hellman. Intercambio de claves simétricas utilizando criptosistemas de
clave pública.
Certificados de clave pública e infraestructuras de autoridades de
certificación.
Generación y registro del par de claves públicas. Concepto de certificado
de clave pública. Formatos de los certificados (X.509; EDIFACT; etc.).
Estructura jerárquica y autoridades de certificación en una estructura de
clave pública. Revocación de certificados.
159
e) Estándares criptográficos y protocolos seguros para Internet.
Estándares critptográficos de USA y resto del mundo.
Organizaciones que administran estándares. Principales grupos de
estándares criptográficos: Estándares federales ( USA); Estándares ANSI;
Estándares del IEEE; Estándares ISO; Estándares informales de la
industria. Estándares para la criptografía clásica. Estándares para la
criptografía de clave pública.
Protocolos seguros para Internet.
Correo electrónico seguro: S/MIME; Open PGP. Web Site seguros: SSL;
S-HTTP. Protocolos de seguridad para pagos con tarjeta: SET; dinero
electrónico; micropagos. Redes privadas virtuales seguras: IPSec; PPTP.
Controles de importación y exportación de dispositivos criptográficos.
Evolución de las políticas de USA. Reglamentación actual en USA.
ACTIVIDAD
Describa algunas de las políticas de seguridad de su organización.
Expréselas en términos que pudieran ser implementados en sistema
de computarizado de bloqueo de puertos..
160
RESUMEN
Los ataques a la seguridad son parte de la realidad de los sistemas
distribudos. Es esencial proteger los canales e interfaces de comunicación
de cualquier sistema que trate con información que sea suceptible de ser
atacada. El correo personal, el coemrsio electrónico y otras transacciones
financieras son ejemplos de tal tipo de información. Los protocolos de
seguridad se diseñan cuidadosamente para evitar trampas. El diseño de
los sistemas seguros parte de un listado de premisas de ataque y un
conjunto de “peores casos posibles”.
Loa mecanismos de seguridad se basan en la criptografía de clave
publica y de clave secreta. Los algoritmos criptográficos disfrazan los
mensajes de forma que no pueda revertirse el proceso sin el
conocimiento de la clave de desencriptacion. La criptografía de la clave
secreta es simetrica: la misma clave sirve tanto para la encriptación como
para la desencriptacion. Si dos partes compraten una clave secreta,
podrán intercambiar información encriptada sin riesgo que sea
desvelada o modificada y con garantías de autenticidad.
La criptografía de clave publica es asimétrica: se utlizan claves separadas
para la encriptación y desencriptacion, y el conociemiento de una de ellas
no implica el de la otra. Una de ellas se hace pubica, de modo que
cualquiera pueda enviar mensajes seguros al propietario de la
correspondiente clave privada y permitiendo al poseedor de la clave
privada firmar mensajes y certificados. Los certificados pueden servir
como credenciales para el uso de recursos protegidos.
Los recursos se protegen mediante mecanismos de control de acceso. Los
esquemas de control de acceso asignan derechos a principales (esto es,
los propietarios de las credenciales) para relaizar operaciones sobre
objetos y colecciones de objetos distribuidos. Se pueden mantenerse
enmanos de los principales bajo la forma de habilitaciones: claves
infalsificables de acceso a conjunto de recursos. Las habilitaciones son
una forma conveniente de delegación de derechos a acceso pero son
161
difíciles de revocar. Los cambios en una ACL tienen efecto
inmediatamente, revocando los derechos de acceso previos, pero son mas
costosas de manejar habilitaciones.
BIBLIOGRAFIA RECOMENDADA
o George Colouris, “Sistemas Distribuidos” Conceptos y Diseño,
Addison Wesley, España 2001
http://www.cdk3.net/
o Tanenbaum, Distributed Systems: Principles and Paradigms,
Prentice Hall, Mexico 2002.
http://www.prenhall.com/divisions/esm/app/author_tanenbau
m/custom/dist_sys_1/
o Liu, “Distributed Computing: Principles and Applications”,
Addison Wesley, Mexico 2005
http://www.csc.calpoly.edu/~mliu/book/
AUTOEVALUACION FORMATIVA
o Describa algunas de las formas en la que es vulnerable el correo
electronico a la indiscrecion, suplantacion, modificacion,
repeticion y denegacion de servicio. Sugiera metodos por los que
se pudiera proteger el correo electronico contra cada una de estas
formas de ataque
o Los intercambios iniciales de claves publicas son vulneranles al
ataque del hombre entre medias. Describa cuantas defensas pueda
contra él.
o ¿Cómo podria enviarse un correo electronico a un lista de
receptores utilizando PGP o un esquema similar?
162