2.1
COMUNICACIÓN
2.1.1 COMUNICACIÓN CON CLIENTE/SERVIDOR
(SOCKETS)
Cliente-Servidor.
Es el modelo que actualmente domina el ámbito de
comunicación, ya que descentraliza los procesos y los recursos. En el cual el
cliente es una aplicación, en un equipo, que solicita un determinado servicio y
existe un software, en otro equipo, que lo proporciona.
Los servicios pueden ser:
a) Ejecución de un programa.
b) Acceso a una Base de Datos.
c) Acceso a un dispositivo de hardware.
Socket.
Designa un concepto abstracto por el cual dos programas (posiblemente
situados en computadoras distintas) pueden intercambiarse cualquier flujo de
datos, generalmente de manera fiable y ordenada.
Los sockets proporcionan una comunicación de dos vías, punto a punto entre
dos procesos. Los sockets son muy versátiles y son un componente básico de
comunicación entre interprocesos e inter-sistemas. Un socket es un punto final
de comunicación al cual se puede asociar un nombre.
Para lograr tener un socket es necesario que se cumplan ciertos requisitos:
1.
Que un
programa sea capaz de localizar al otro.
2.
Que ambos
programas sean capaces de intercambiarse información.
Por lo que son necesarios tres recursos que originan el concepto de socket:
a)
Un protocolo
de comunicaciones, que permite el intercambio de octetos.
b)
Una dirección
del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que
identifica una computadora.
c)
Un número de
puerto, que identifica a un programa dentro de una computadora. Con un socket
se logra implementar una arquitectura cliente-servidor. la comunicación es
iniciada por uno de los programas (cliente). Mientras el segundo programa espera
a que el otro inicie la comunicación (servidor). Un Socket es un archivo
existente en el cliente y en el servidor.
Si el cliente lanza una demanda de conexión y el servidor acepta la
conexión, este abre un socket en un puerto diferente, para que pueda continuar
escuchando en el puerto original nuevas peticiones de conexión, mientras que
atiende a las peticiones del cliente conectado. El cliente y el servidor
pu8eden ahora comunicarse escribiendo o leyendo en sus respectivos sockets.
Los tipos de socket definen las propiedades de comunicación visibles para
la aplicación. Los procesos se comunican solamente entre los sockets del mismo
tipo. Existen cinco tipos de sockets.
El Cliente actúa de la siguiente forma.
1.
Establece una
conexión con el servidor (Crea un socket con el servidor).
2.
Mandar
mensajes al servidor o Esperar un mensaje de él.(Consultas).
3.
Esperar su
respuesta o contestarle (existen casos en que este paso no es necesario).
4.
Repetir los
pasos 2 y 3 mientras sea necesario.
5.
Cerrar la
conexión con el servidor.
El servidor actúa así.
1.
Inicializa un
puerto de comunicación, en espera de clientes que intenten conectarse a él
(Crea un serverSocket).
2.
Una vez que se
conecta alguien, crea un hilo de ejecución para este usuario mientras que el
thread principal vuelve al paso 1. Esto comúnmente se hace para que el servidor
puede atender a varios clientes al mismo tiempo.
3.
Se comunica
con el cliente mediante el socket creado entre el cliente y él.
4.
Espera que el
cliente se vaya o lo bota el mismo servidor (Cierre el socket entre ellos) y
elimina el thread de comunicación entre ellos.
Las propiedades de un socket dependen de las características del protocolo
en el que se implementan. El protocolo más utilizado es TCP, aunque también es
posible utilizar UDP o IPX. Gracias al protocolo TCP, los sockets tienen las
siguientes propiedades:
1.
Orientado a
conexión. Se garantiza la transmisión de todos los octetos sin errores ni
omisiones.
2.
Se garantiza
que todo octeto llegará a su destino en el mismo orden en que se ha
transmitido.
Los tipos de socket definen las propiedades de comunicación visibles para
la aplicación. Los procesos se comunican solamente entre los sockets del mismo
tipo. Existen tres tipos básicos de sockets.
·
Socket de
flujo: da un flujo de datos
de dos vías, confiable, y sin duplicados sin límites de grabación. El flujo
opera en forma parecida a una conversación telefónica. El tipo del socket es
SOCK_STREAM, el cual en el dominio de Internet usa TCP (Transmission Control
Protocol).
·
Socket de
datagrama: soporta
un flujo de mensajes de dos vías. En un socket de datagrama podría recibir
mensajes en diferente orden de la secuencia de la cual los mensajes fueron
envíados. Los límites de grabación en los datos son preservados. Los sockets de
datagrama operan parecidos a pasar cartas hacia adelante y hacia atrás en el
correo. El tipo de socket es SOCK_DGRAM, el cual en el dominio de internet usa
UDP (User Datagram Protocol).
·
Socket de
paquete secuencial: da una
conexión de dos vías, secuencial y confiable para datagramas de una longitud
fija máxima. El tipo de socket es SOCK_SEQPACKET. No hay protocolo en Internet
implementado para este tipo de socket.
POGRAMA CLIENTE
Este se conecta a un servidor indicando el nombre de la máquina y el número
puerto (tipo de servicio que solicita) en el que el servidor está instalado.
Una vez conectado, lee una cadena del servidor y la escribe en la pantalla:
import java.io.*; import java.net.*; class Cliente
{
static final String HOST =
“localhost”;
static final int PUERTO=5000;
public Cliente( )
{
try
{
Socket skCliente = new Socket( HOST , Puerto );
Input Stream aux = skCliente.getInputStream();
Data Input Stream? flujo
= new Data Input Stream( aux );
System.out.println( flujo.readUTF() );
skCliente.close();
}
catch( Exception e )
{
System.out.println( e.getMessage() );
}
}
public static void main( String[] arg )
{
new Cliente();
}
}
PROGRAMA SERVIDOR
El programa servidor se instala en un puerto determinado, a la espera de
conexiones, a las que tratará mediante un segundo SOCKET. Cada vez que se
presenta un cliente, le saluda con una frase “Hola cliente N”. Este servidor
sólo atenderá hasta tres clientes, y después finalizará su ejecución, pero es
habitual utilizar ciclos infinitos (while(true)) en los servidores, para que
atiendan llamadas continuamente.Tras atender cuatro clientes, el servidor deja
de ofrecer su servicio:
import java.io.* ; import java.net.* ; class
Servidor
{
static final int PUERTO=5000;
public Servidor( )
{
try
{
Server Socket
skServidor = new Server Socket( PUERTO );
System.out.println(“Escucho el puerto “ + PUERTO );
for ( int numCli = 0;
numCli < 3; numCli++; ) {
Socket skCliente =
skServidor.accept(); // Crea objeto
System.out.println(“Sirvo al cliente “ + numCli);
Output Stream aux =
skCliente.getOutputStream();
Data Output Stream
flujo= new Data Output Stream( aux );
flujo.writeUTF( “Hola
cliente “ + numCli );
skCliente.close();
} // Cierra while
System.out.println(“Demasiados clientes por hoy”);
}
catch( Exception e )
{
System.out.println(
e.getMessage() );
}
}
public static void main( String[] arg ) {
new Servidor();
}
}
2.1.2. COMUNICACIÓN CON RPC
El mecanismo general para las
aplicaciones cliente-servidor se proporciona por el paquete Remote Procedure
Call (RPC). RPC fue desarrollado por Sun Microsystems y es una colección de
herramientas y funciones de biblioteca. Aplicaciones importantes construidas
sobre RPC son NIS, Sistema de Información de Red y NFS, Sistema de Ficheros de
Red.
Un servidor RPC consiste en
una colección de procedimientos que un cliente puede solicitar por el envío de
una petición RPC al servidor junto con los parámetros del procedimiento. El
servidor invocará el procedimiento indicado en nombre del cliente, entregando
el valor de retorno, si hay alguno. Para ser independiente de la máquina, todos
los datos intercambiados entre el cliente y el servidor se convierten al
formato External Data Representation (XDR) por el emisor, y son reconvertidos a
la representación local por el receptor. RPC confía en sockets estandard UDP y
TCP para transportar los datos en formato XDR hacia el host remoto. Sun
amablemente a puesto RPC en el dominio público; se describe en una serie de
RFCs.
La comunicación entre
servidores RPC y clientes es un tanto peculiar. Un servidor RPC ofrece una o
más colecciones de procedimientos; cada conjunto se llama un programa y es
idenficado de forma única por un número de programa. Una lista que relaciona
nombres de servicio con números de programa se mantiene usualmente en /etc/rpc.
2.1.3 COMUNICACIÓN EN GRUPO
La comunicación se clasifica
de acuerdo al número de usuarios a los que se les ha enviado el mensaje:
ü BROADCAST O
DIFUSION FORZADA un nodo emite todos los escuchan y solo contesta a quien va
dirigido el mensaje
ü MULTICAST se
entrega el mensaje a todos los anfitriones HOST que están compuestos de ciertas
características.
ü UNICAST o
POINTCAST un nodo emite y otro recibe, solo escucha aquel a quien se dirigió el
mensaje.
Una clasificación adicional es
la realizada en base a grupos:
ü LISTAS DE
DESTINARIOS se tiene una lista de aquellos a los que se les enviara el mensaje.
ü IDENTIFICADOR DE
GRUPO se forman grupos y el mensaje es dirigido solo a los miembros de ese
grupo.
ü PREDICADOR DE
PERTENENCIA se envía y otro recibe, solo escucha aquel a quien se dirigió el
mensaje.
2.1.4 TOLERANCIA DE FALLOS
La difusión de los sistemas
distribuidos incrementa la demanda de sistemas que esencialmente nunca fallen.
Los sistemas tolerantes a
fallos requerirán cada vez más una considerable redundancia en hardware,
comunicaciones, software, datos, etc.
La réplica de archivos sería
un requisito esencial.
También debería contemplarse
la posibilidad de que los sistemas funcionen aún con la carencia de parte de
los datos.
Los tiempos de fallo
aceptables por los usuarios serán cada vez menores.
2.2 SINCRONIZACIÓN DE RELOJES
El término sincronización se
define como la forma de forzar un orden parcial o total en cualquier conjunto
de eventos, y es usado para hacer referencia a tres problemas distintos pero
relacionados entre sí:
1.
La sincronización entre el emisor y el receptor.
2.
La especificación y control de la actividad
común entre procesos cooperativos.
3.
La serialización de accesos concurrentes a
objetos compartidos por múltiples procesos. Haciendo referencia a los métodos
utilizados en un sistema centralizado, el cual hace uso de semáforos y
monitores; en un sistema distribuido se utilizan algoritmos distribuidos para
sincronizar el trabajo común entre los procesos y estos algoritmos
2.2.1.
RELOJES FÍSICOS
La idea es proveer de un único bloque de tiempo para
el sistema. Los procesos pueden usar la marca física del tiempo provista o
leída de un reloj central para expresar algún orden en el conjunto de acciones
que inician. La principal ventaja de este mecanismo es la simplicidad, aunque
existen varios inconvenientes: el correcto registro del tiempo depende en la
posibilidad de recibir correctamente y en todo momento, el tiempo actual desplegado
por el reloj físico; los errores de transmisión se convierten en un impedimento
para el orden deseado, el grado de exactitud depende de las
constantes puestas en el sistema.
·
Los
valores de tiempo asignados a los eventos no tienen porqué ser cercanos alos
tiempos reales en los que ocurren.
·
En
ciertos sistemas es importante la hora real del reloj:
·
Se
precisan relojes físicos externos (más de uno).
·
Se deben
sincronizar:
·
Con los
relojes del mundo real.
·
Entre
sí.
2.2.2 RELOJES LÓGICOS
Las
computadoras poseen un circuito para el registro del tiempo conocido como dispositivo
reloj.
Es un cronómetro consistente
en un cristal de cuarzo de precisión sometido a una tensión eléctrica que la
cual oscila con una frecuencia bien definida. A cada cristal se le asocian dos
registros:
ü Registro contador.
ü Registro
mantenedor.
Cada oscilación del cristal
decrementa en “1” al contador. Pero, cuando el contador llega a “0”:
ü Se genera una
interrupción.
ü El contador se
vuelve a cargar mediante el registro mantenedor.
Se puede programar un
cronómetro para que genere una interrupción “x” veces por segundo, a cada
interrupción se denomina marca de reloj .
Para una computadora y un
reloj no interesan pequeños desfasajes del reloj porque todos los procesos de
la máquina usan el mismo reloj y tendrán consistencia interna, lo que importan
son los tiempos relativos.
En caso de varias computadoras
con sus respectivos relojes es imposible garantizar que los cristales de
computadoras distintas oscilen con la misma frecuencia por lo tanto habrá una
pérdida de sincronía en los relojes (de software), es decir que tendrán valores
distintos al ser leídos.
La diferencia entre los
valores del tiempo se llama distorsión del reloj y podría generar
fallas en los programas dependientes del tiempo.
Lamport demostró que la
sincronización de relojes es posible y presentó un algoritmo para lograrlo.
Lamport señaló que la
sincronización de relojes no tiene que ser absoluta:
·
Si 2 procesos no interactúan no es necesario que
sus relojes estén sincronizados.
·
Generalmente lo importante no es que los
procesos estén de acuerdo en la hora, pero sí importa que coincidan en el orden
en que ocurren los eventos.
Para ciertos algoritmos lo que
importa es la consistencia interna de los relojes:
·
No interesa su cercanía particular al tiempo
real (oficial).
·
Los relojes se denominan relojes lógicos
2.2.3 USOS DE LA SINCRONIZACIÓN MANEJO DE CACHE,
COMUNICACIÓN EN GRUPO, EXCLUSIÓN MUTUA, ELECCIÓN TRANSACCIONES ATÓMICAS E
INTERBLOQUEO
Memoria Caché
En los sistemas de archivos
convencionales, el fundamento para la memoria caché es la reducción de la E/S
de disco (lo que aumenta el rendimiento), en un SAD el objetivo es reducir el
tráfico en la red, si los datos necesarios para satisfacer la solicitud de
acceso no se encuentran en la memoria cache, se trae una copia de servicio al
usuario y los accesos se llevan a cabo con la copia de memoria caché.
La idea es conservar allí los
bloques de disco de acceso mas reciente, para así manejar localmente los
accesos repetidos a la misma información y no aumentar el tráfico de la red. La
memoria caché con escritura directa equivale a usar el servicio remoto para
accesos de escritura y explotar la memoria cache únicamente para accesos de
lectura.
Comunicación en grupos
Si una máquina tiene un
receptor de UTC, todas las máquinas deben sincronizarse con ella. Si ninguna
máquina tiene un receptor de UTC:
•
Cada máquina lleva el registro de su propio
tiempo.
•
Se debe mantener el tiempo de todas las máquinas
tan cercano como sea posible.
Exclusión Mutua
Cuando un proceso debe leer o
actualizar ciertas estructuras de datos compartidas, primero ingresa a una
región crítica para lograr la exclusión mutua y garantizar que ningún otro
proceso utilizará las estructuras de datos al mismo tiempo. En sistemas monoprocesadores
las regiones críticas se protegen con semáforos, monitores y similares. En
sistemas distribuidos la cuestión es más compleja.
Transacciones Atómicas
Las técnicas de sincronización
ya vistas son de bajo nivel:
El programador debe
enfrentarse directamente con los detalles de:
ü La exclusión
mutua.
ü El manejo de las
regiones críticas.
ü La prevención de
bloqueos.
ü La recuperación de
fallas.
Se precisan técnicas de
abstracción de mayor nivel que:
Oculten estos aspectos
técnicos y permitan a los programadores concentrarse en los algoritmos y la
forma en que los procesos trabajan juntos en paralelo. Tal abstracción la
llamaremos transacción atómica, transacción o acción atómica. La principal
propiedad de la transacción atómica es el “todo o nada”, es decir; se hace todo
lo que se tenía que hacer como una unidad o no se hace nada.
2.3 NOMINACION CARACTERÍSTICAS Y
ESTRUCTURAS
Nominación es una
correspondencia entre objetos de datos lógicos y físicos. Por ejemplo, los
usuarios tratan con objetos de datos lógicos representados por nombre de
archivos, mientras que el sistema manipula bloques de datos físicos almacenados
en las pistas de los discos. Generalmente un usuario se refiere a un archivo
utilizando un nombre, el cual se transforma en un identificador numérico de
bajo nivel, que a su vez se corresponde con bloques en disco. Esta
correspondencia multinivel ofrece a los usuarios la abstracción de un archivo,
que oculta los detalles de cómo y donde se almacena el archivo en disco.
Estructuras de Nominación: Existen dos conceptos
que hay que distinguir en relación con al correspondencia de nombres en un SAD.
Transparencia de Nominación. El nombre de archivo no revela ningún indicio
sobre de la ubicación del almacenamiento físico del archivo. Independencia de
Ubicación, No es necesario modificar el nombre de un archivo cuando cambia su ubicación
en el almacenamiento físico.
Esquema de Nominación: Hay tres enfoques principales para
los esquemas de nominación en un SAD. En el enfoque mas sencillo, los archivos
se nombran con una combinación del nombre de su anfitrión y su nombre local ,
lo que garantiza un nombre único dentro de todo el sistema. Por ejemplo, en
Ibis, un archivo se identifica de manera única con el Nombre Anfitrión Local,
donde nombre local es una ruta semejante a las de UNIX.
2.3.2 TIPOS DE NOMBRES
USUARIO Y DE SISTEMA
Un nombre es más que una cadena de caracteres. Representa un punto de
acceso hacia un objeto. La característica
principal de un sistema de nombre es que no debe de presentar ambigüedades,
para un momento dado, un nombre refiere a uno y sólo un recurso en el sistema.
•
Identificadores
de puertos y procesos.
•
Nombres
textuales de servicios.
•
Identificadores
de recursos.
•
Nombres de
archivos.
•
Direcciones
físicas y lógicas de redes.
•
El nombre de
un objeto, por ejemplo un recurso o servidor; especifica lo que busca un
proceso.
•
Una dirección
especifica dónde se encuentra el objeto.
•
Una ruta
especifica cómo llegar ahí. La modificación no autorizada del iPhone OS constituye una fuente muy importante de inestabilidad,
interrupciones de los servicios y otros problemas.
Se pueden clasificar a las violaciones de seguridad en tres categorías:
·
Liberación no
autorizada de información. Ocurre cuando una persona no autorizada tiene la
posibilidad de leer y tomar ventaja de la información almacenada en una
computadora. También se incluye el uso no autorizado de un programa.
·
Modificación
no autorizada de información. Este tipo de violación se da cuando una persona
tiene la posibilidad de alterar la información almacenada en un sistema
computacional.
·
Bloqueo no
autorizado de servicios. Se da cuando una persona no autorizada bloquea la
capacidad de algún usuario autorizado, a accesar la información almacenada en
un sistema computacional.
La seguridad en los sistemas computacionales puede
dividirse en dos tipos:
·
Seguridad externa:
(llamada comúnmente seguridad física), se encarga de regular el acceso al
hardware del sistema, incluyendo: discos, cintas, reguladores y no-breaks,
acondicionadores de aire, terminales, procesadores.
·
Seguridad
interna: se encarga del acceso y uso del software almacenado en el sistema. A
diferencia de la seguridad física, existe el tema de autenticación, en el cual
el usuario se registra (login) en el sistema para accesar a los recurso de
hardware y software del mismo.
Servidor DNS
·
Traducir su
nombre de dominio en una dirección IP
·
Asignar
nombres a todas las máquinas de una red y trabajar con nombres de dominio en
lugar de IPs.
Un servidor DNS permite acceder a un dominio en internet entre los millones
existentes. Básicamente su función es atender a las peticiones hechas por los
distintos programas que acceden a internet y resolver la dirección IP asociada
al dominio consultado. Cuando el servidor recibe una consulta realiza una
búsqueda en caso de que ese servidor no disponga de la respuesta, el servidor
comienza la búsqueda a través de uno o varios Servidores DNS hasta encontrar
una respuesta positiva o negativa.
2.3.3 RESOLUCION Y
DISTRIBUCION
Resolución de nombres de
dominio
El mecanismo que consiste en encontrar la dirección IP relacionada al
nombre de un ordenador se conoce como "resolución del nombre de
dominio". La aplicación que permite realizar esta operación (por lo
general, integrada en el sistema operativo se llama "resolución".
Cuando una aplicación desea conectarse con un host conocido a través de su
nombre de dominio (por ejemplo, "es.kioskea.net"), ésta interroga al
servidor de nombre de dominio definido en la configuración de su red. De hecho,
todos los equipos conectados a la red tienen en su configuración las
direcciones IP de ambos servidores de nombre de dominio del proveedor de
servicios.
Distribución: Los sistemas operativos distribuidos
abarcan los servicios de los de red, logrando integrar recursos (impresoras,
unidades de respaldo, memoria, procesos, unidades centrales de proceso) en una
sola máquina virtual que el usuario aceza en forma transparente. Es decir,
ahora el usuario ya no necesita saber la ubicación de los recursos, sino que
los conoce por nombre y simplemente los usa como si todos ellos fuesen locales
a su lugar de trabajo habitual.
2.3.4 SERVIDORES Y AGENTES DE NOMBRE
Para implantar una nominación transparente se requiere
un mecanismo para correspondencia entre un nombre de archivo y la ubicación
asociada. Para que esta correspondencia sea manejable, hay que agrupar
conjuntos de archivos en unidades componentes y proporcionar la correspondencia
según las unidades componentes, no por archivos.
2.3.5 MAPAS DE DIRECCIONES
Existe una coherencia directa entre los accesos y el
tráfico que va y viene del servidor. De notar que se presenta una analogía
directa entre los métodos de acceso a disco en los sistemas de archivos
convencionales y el método de servicio remoto en un SD. El método de servicio análogo
efectúa un acceso al disco para cada solicitud de acceso.
Una manera de lograr esta transferencia es a través
del método de servicio remoto, con el cual se entregan al servidor las
solicitudes de acceso, la maquina servidora lleva a cabo dichos accesos y los
usuarios se devuelven al usuario.
2.3.6 MAPAS DE RUTAS
En un sistema distribuido, el usar un nombre para los
propósitos de la comunicación no es bastante. Porque los procesos en ejecución
se comunican desde diferentes computadoras. El conocimiento de su localización
actual es necesario. Esto conduce a los términos básicos en esta área: un
nombre, una dirección, y una ruta. El significado de estos términos se puede
explicar usando las definiciones intuitivas siguientes:
1. El nombre de un
objeto (por ejemplo, recursos, servidor) específico que el proceso busca (al
qué desea tener acceso)
2.
Una dirección especifica donde ésta
3.
Una ruta especifica cómo esta ahí
Cada uno de estos
identificadores representa un atascamiento más apretado de la información:
1.
Los nombres son mapeados en direcciones. Este
mapeo es necesario para la aplicación en ejecución, puesto que la sintaxis y la
semántica de nombres dependen enteramente de qué tipos de entidades se están
nombrando y también qué uso se está haciendo de ellas
2.
Las direcciones son mapeadas en los routeadores.
2.3.7 MODELO DE TERRY
Los mensajes remitentes entre los procesos y objetos
soportados por un sistema operativo precisa la presentación para el sistema operativo de los nombres de los
objetos que los procesos quieren ganar acceso a. El problema es cómo localizar
objetos nombrados. Esto está directamente conectado a la gerencia del espacio
de nombre y las estructuras de la facilidad de nombramiento.
Como ha visto, acto de
servidores de nombre como agentes obligatorios distribuidos que amarran el
nombre de un objeto para una cierta cantidad de sus propiedades, incluyendo la
posición del objeto. Algunos servidores de nombre pueden almacenar información
acerca de los objetos particulares. Tales servidores de nombre se llaman las
autoridades que nombra o servidores autoritarios de nombre para eso objetan. El
problema es cómo distribuir servidores de nombre, esto es, que de las
estructuras de una facilidad de nombramiento es el mejor.
Los criterios diferentes
pueden ser tomados en cuenta al desarrollar la facilidad de nombramiento para
sistemas de cómputo distribuidos. En la etapa de análisis de la estructura de
facilidad de nombramiento, usaremos la mayor parte de importante de esos criterios,
a saber actuación. Este criterio es importante para un ambiente distribuido
porque que hay usualmente un número de redes interconectadas (lo mismo es
cierto en caso de una red de área local conectando un número grande de
computadoras personales y / o los puestos de trabajo, y los servidores
diferentes), lo cual insinúa que el costo de comunicación entre clientes y
servidores de nombre es el cuello de botella principal en localizar recursos
remotos. En este caso, la actuación de averiguaciones del servidor de nombre es
dominada por el número de servidores de nombre que deben ser a los que se ganó
acceso y el costo de ganar acceso a esos los servidores de nombre.
No hay comentarios:
Publicar un comentario