Sistemas distribuidos
Introducción
En los sistemas distribuidos es vital la comunicación entre una computadora a otra a través de mensajes. Poder enviar y recibir mensajes es ideal, ya que se pueden transmitir los datos y saber el estatus de cada computadora que pertenece al sistema distribuido. A continuación definiremos el concepto de un Socket y de los Sockets Datagrama.
Desarrollo
Cifrado asimétrico
Definición
Los sockets son mecanismos de comunicación
entre procesos que permiten que un proceso hable (emita o reciba información) con otro proceso incluso estando en distintas máquinas. Se puede decir que un socket sirve para que dos programas se transmitan datos.Un socket no es más que un "canal de comunicación" entre dos programas que corren sobre ordenadores distintos o incluso en el mismo ordenador. Desde el punto de vista de programación, un socket no es más que un "fichero" que se abre de una manera especial.
entre procesos que permiten que un proceso hable (emita o reciba información) con otro proceso incluso estando en distintas máquinas. Se puede decir que un socket sirve para que dos programas se transmitan datos.Un socket no es más que un "canal de comunicación" entre dos programas que corren sobre ordenadores distintos o incluso en el mismo ordenador. Desde el punto de vista de programación, un socket no es más que un "fichero" que se abre de una manera especial.
Atributos
Los sockets se caracterizan por tener tres atributos:
–Dominio: Especifica el medio de comunicación de
la red que el socket utilizará.
–Protocolo: Especifica que protocolo se va a usar.
-Tipo: Los protocolos de internet proveen dos niveles distintos de servicio : flujo y datagramas.
–Dominio: Especifica el medio de comunicación de
la red que el socket utilizará.
–Protocolo: Especifica que protocolo se va a usar.
-Tipo: Los protocolos de internet proveen dos niveles distintos de servicio : flujo y datagramas.
Propiedades
1. Fiabilidad de la Transmisión: No se pierden los datos transmitidos
2. Conservación del Orden de los Datos: Los datos llegan en el orden en que se emitieron.
3. No Duplicación de los Datos: El Dato sólo llega una vez.
4. Comunicación en modo conectado: La conexión está establecida
antes de iniciar la comunicación. De este modo, la emisión desde un extremo va destinada al otro.
5. Conservación de los límites de los mensajes: Los límites de mensajes emitidos pueden encontrarse o conocerse en el destino.
6. Envío de Mensajes “urgentes”: Permite el envío de datos fuera de flujo o fuera de banda. Al enviar datos fuera del flujo normal, son accesibles de inmediato.
2. Conservación del Orden de los Datos: Los datos llegan en el orden en que se emitieron.
3. No Duplicación de los Datos: El Dato sólo llega una vez.
4. Comunicación en modo conectado: La conexión está establecida
antes de iniciar la comunicación. De este modo, la emisión desde un extremo va destinada al otro.
5. Conservación de los límites de los mensajes: Los límites de mensajes emitidos pueden encontrarse o conocerse en el destino.
6. Envío de Mensajes “urgentes”: Permite el envío de datos fuera de flujo o fuera de banda. Al enviar datos fuera del flujo normal, son accesibles de inmediato.
Tipos de Sockets
Existen 2 tipos de sockets, los cuales son:
–Los no orientados a conexión: El programa de aplicación da la
fiabilidad.
–Los orientados a conexión: Tiene comunicaciones fiables y un circuito virtual.
–Los no orientados a conexión: El programa de aplicación da la
fiabilidad.
–Los orientados a conexión: Tiene comunicaciones fiables y un circuito virtual.
Sockets Datagrama
Los sockets datagrama son un servicio de transporte sin conexión. Son más eficientes que TCP, pero no está garantizada la fiabilidad. Los datos se envían y reciben en paquetes, cuya entrega no está garantizada. Los paquetes pueden ser duplicados, perdidos o llegar en un orden diferente al que se envió. El protocolo de comunicaciones con datagramas es un protocolo sin conexión, es decir, cada vez que se envíen datagramas es necesario enviar el descriptor del socket local y la dirección del socket que debe recibir el datagrama.
2. Los socket datagrama tienen un límite de tamaño de los datagramas, establecido en 64 kilobytes, que se pueden enviar a una localización determinada, mientras que TCP no tiene límite; una vez que se ha establecido la conexión, el par de sockets funciona como los streams: todos los datos se leen inmediatamente, en el mismo orden en que se van recibiendo.
3. Los socket datagrama tienen un protocolo desordenado, no garantiza que los datagramas que se hayan enviado sean recibidos en el mismo orden por el socket de recepción. Al contrario,TCP es un protocolo ordenado, garantiza que todos los paquetes que se envíen serán recibidos en el socket destino en el mismo orden en que se han enviado.
4. Los datagramas son bloques de información del tipo lanzar y olvidar. Para la mayoría de los programas que utilicen la red, el usar un flujo TCP en vez de un datagrama, es más sencillo y hay menos posibilidades de tener problemas. Sin embargo, cuando se requiere un rendimiento óptimo, y está justificado el tiempo adicional que supone realizar la verificación de los datos, los datagramas son un mecanismo realmente útil.
Caracteristicas
1. En un Socket Datagrama, cada vez que se envía un datagrama, hay que enviar también el descriptor del socket local y la dirección del socket que va a recibir el datagrama, luego éstos son más grandes que los TCP. Como el protocolo TCP está orientado a conexión, tenemos que establecer esta conexión entre los dos sockets antes de nada, lo que implica un cierto tiempo empleado en el establecimiento de la conexión, que no existe en un Socket Datagrama.2. Los socket datagrama tienen un límite de tamaño de los datagramas, establecido en 64 kilobytes, que se pueden enviar a una localización determinada, mientras que TCP no tiene límite; una vez que se ha establecido la conexión, el par de sockets funciona como los streams: todos los datos se leen inmediatamente, en el mismo orden en que se van recibiendo.
3. Los socket datagrama tienen un protocolo desordenado, no garantiza que los datagramas que se hayan enviado sean recibidos en el mismo orden por el socket de recepción. Al contrario,TCP es un protocolo ordenado, garantiza que todos los paquetes que se envíen serán recibidos en el socket destino en el mismo orden en que se han enviado.
4. Los datagramas son bloques de información del tipo lanzar y olvidar. Para la mayoría de los programas que utilicen la red, el usar un flujo TCP en vez de un datagrama, es más sencillo y hay menos posibilidades de tener problemas. Sin embargo, cuando se requiere un rendimiento óptimo, y está justificado el tiempo adicional que supone realizar la verificación de los datos, los datagramas son un mecanismo realmente útil.
Código
Servidor
import java.net.*;
import java.io.*;
public class servidorudp {
public static void main(String argv[]) {
DatagramSocket socket;
boolean fin = false;
try {
//Creamos el socket
socket = new DatagramSocket(6000);
byte[] mensaje_bytes = new byte[256];
String mensaje ="";
mensaje = new String(mensaje_bytes);
String mensajeComp ="";
DatagramPacket paquete = new DatagramPacket(mensaje_bytes,256);
DatagramPacket envpaquete = new DatagramPacket(mensaje_bytes,256);
int puerto;
InetAddress address;
byte[] mensaje2_bytes = new byte[256];
//Iniciamos el bucle
do {
// Recibimos el paquete
socket.receive(paquete);
// Lo formateamos
mensaje = new String(mensaje_bytes).trim();
// Lo mostramos por pantalla
System.out.println(mensaje);
//Obtenemos IP Y PUERTO
puerto = paquete.getPort();
address = paquete.getAddress();
if (mensaje.startsWith("fin")) {
mensajeComp="chauuuuuuu cliente";
}
if (mensaje.startsWith("hola")) {
mensajeComp="hola cliente";
}
//formateamos el mensaje de salida
mensaje2_bytes = mensajeComp.getBytes();
//Preparamos el paquete que queremos enviar
envpaquete = new DatagramPacket(mensaje2_bytes,mensajeComp.length(),address,puerto);
// realizamos el envio
socket.send(envpaquete);
} while (1>0);
}
catch (Exception e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Cliente
import java.net.*;
import java.io.*;
//declaramos la clase udp
public class clienteudp {
public static void main(String argv[]) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
//Definimos el sockets, número de bytes del buffer, y mensaje.
DatagramSocket socket;
InetAddress address;
byte[] mensaje_bytes = new byte[256];
String mensaje="";
mensaje_bytes=mensaje.getBytes();
//Paquete
DatagramPacket paquete;
String cadenaMensaje="";
DatagramPacket servPaquete;
byte[] RecogerServidor_bytes = new byte[256];
try {
socket = new DatagramSocket();
address=InetAddress.getByName("localhost");
do {
mensaje = in.readLine();
mensaje_bytes = mensaje.getBytes();
paquete = new DatagramPacket(mensaje_bytes,mensaje.length(),address,6000);
socket.send(paquete);
RecogerServidor_bytes = new byte[256];
//Esperamos a recibir un paquete
servPaquete = new DatagramPacket(RecogerServidor_bytes,256);
socket.receive(servPaquete);
//Convertimos el mensaje recibido en un string
cadenaMensaje = new String(RecogerServidor_bytes).trim();
//Imprimimos el paquete recibido
System.out.println(cadenaMensaje);
} while (!mensaje.startsWith("fin"));
}
catch (Exception e) {
System.err.println(e.getMessage());
System.exit(1);
}
}
}
Conclusión
Los sockets son un mecanismo utilizado en los sistemas distribuidos, el cual nos permite establecer una conexión entre dos o mas computadoras que son idependientes una de otra, un parte de cliente y otra del servidor. Básicamente los sockets son una parte vital para los sistemas distribuidos ya que se pueden transmitir los mensajes de una computadora a otra, lo cual es una de las principales caracteristicas que un sistema distribuido posee. Los sockets presentan un gran sinnumero de posibilidades de desarrollo, pues se pueden crear chats donde la respuesta de un servidor sea inmediata, y no como las que se alojan en bases de datos, los cuales son muy lentos comparaods con los sockets. Gracias a los sockets podemos conectar varias computadoras al mismo tiempo y de forma coordinada para poder intercambiar información.
Referencias bibliográficas:
1. Martín, S., & Martínez, S. (Mayo 3, 2007). COMUNICACIÓN ENTRE PROCESOS SOCKETS. Octubre 8, 2017, de Universidad de las Palmas de Gran Canaria Sitio web:http://sopa.dis.ulpgc.es/ii-dso/leclinux/ipc/sockets/sockets.pdf
2. Mirely, H,. (Noviembre 24, 2012). Sockets. Octubre 8, 2017, de BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA Sitio web: https://facturapp.weebly.com/sockets.html
2. Mirely, H,. (Noviembre 24, 2012). Sockets. Octubre 8, 2017, de BENEMÉRITA UNIVERSIDAD AUTÓNOMA DE PUEBLA Sitio web: https://facturapp.weebly.com/sockets.html
Comentarios
Publicar un comentario