Ir al contenido principal

Sockets Datagrama

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.
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.
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.
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.
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.

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



Comentarios

Entradas más populares de este blog

Conclusiones: Soporte de Software, Mantenimiento de Software y Soporte Técnico

  Conclusiones El software es parte indispensable de nuestra vida cotidiana, ya que lo utilizamos en todas partes y es indispensable para todos. Empresas y Organizaciones suelen utilizar software para poder automatizar y mejorar la producción. En la actualidad es habitual que el software de soporte avanzado permita a los técnicos la motorización continua de todos los dispositivos de la organización, la verificación remota del correcto funcionamiento, la obtención de parámetros de funcionamiento que permiten adelantarse a posibles errores así como la posibilidad de tomar el control remoto de ordenadores y servidores sin la necesidad de desplazarse para solucionar el problema. Otro aspecto a tomar en cuenta es el servicio de mantenimiento de software, que es el proceso de mejorar y optimizar el software desplegado, así como también remediar los defectos. Y por ultimo el soporte técnico es un rango de servicios por medio del cual se proporciona asistencia a los usuarios al tener ...

RMI

  Introducción RMI ("Remote Method Invocation") es un mecanismo para invocar/ejecutar procedimientos remotos en computadoras o servidores distribuidos. La gran mayoría de los sistemas empresariales hoy en día requieren de esta funcionalidad , esto se debe tanto a distancias geográficas como a requerimientos de computo, ya que seria iluso pensar que las necesidades de computo de TODA una empresa fueran satisfechas por una sola computadora y/o servidor. A continuacion hablaremos mas a detalle sobre lo que ofrece RMI. . Desarrollo ¿Qué es RMI? RMI ("Remote Method Invocation") es el mecanismo ofrecido en Java que permite a un procedimiento poder ser invocado remotamente. Una de las ventajas al diseñar un procedimiento con RMI es interoperabilidad , ya que RMI forma parte de todo JDK , por ende, cualquier plataforma que tenga acceso a un JDK también tendrá acceso a estos procedimientos. RMI se caracteriza por la facilidad de su uso en la programación por estar...

Seguridad: Kerberos

Seguridad web y aplicaciones Introducción La seguridad e integridad de sistemas dentro de una red puede ser complicada. Puede ocupar el tiempo de varios administradores de sistemas sólo para mantener la pista de cuáles servicios se estan ejecutando en una red y la manera en que estos servicios son usados. Más aún, la autenticación de los usuarios a los servicios de red puede mostrarse peligrosa cuando el método utilizado por el protocolo es inseguro, como se evidencia por la transferencia de contraseñas sin encriptar sobre la red bajo los protocolos FTP y Telnet. Kerberos es una forma eliminar la necesidad deaquellos protocolos que permiten métodos de autenticación inseguros, y de esta forma mejorar la seguridad general de la red. . Desarrollo ¿Qué es Kerberos? El servicio Kerberos es una arquitectura cliente-servidor que proporciona seguridad a las transacciones en las redes. El servicio ofrece una sólida autenticación de usuario y también integridad y privacidad. La auten...