Socket Datagrama

Para comenzar con el ensayo, se escribirá la definición de un Socket, así como un socket de datagrama, se mostraran los protocolos TCP y UDP, ejemplos del código de un socket para iniciar comenzaremos con la definición de un socket:

“Un socket es un extremo de comunicación, es decir, un objeto a través del cual una aplicación envía o recibe los paquetes de datos a través de una red. Un socket tiene un tipo y se asocia a un proceso en ejecución y puede tener un nombre. Actualmente, los sockets intercambian datos normalmente solo con otros sockets del mismo "dominio de comunicación", que utiliza el conjunto de protocolos de Internet.” (Microsoft, 2017)

Los sockets son muy importantes pues es la base de las aplicaciones de mensajería instantánea, permiten la comunicación entre dos host y también son un componente principal del modelo cliente-servidor.

Los sockets se ayudan de los protocolos de comunicación para su funcionamiento. Aquello que utilizan UDP (este protocolo se especificará más adelante) son conocidos como sockets datagrama por su parte los que usan TCP (se comentará más adelante) se les conoce como sockets stream. Se diferencian en que el socket datagrama tiene una estructura mucho más simple que el socket stream.

SOCKET DATAGRAMA

“Los sockets de datagrama admiten un flujo de datos bidireccional que no se garantiza que sea ordenada o para unduplicated (sin duplicar). Los datagramas también no está garantizado que sean confiables; no pueda para proteger. Los datos de datagrama pueden llegar desordenados y duplicado posiblemente, pero los límites del registro en los datos se conservan, mientras los registros son menores que el límite interno del tamaño del receptor. Es responsable de la secuencia y la confiabilidad administrar. (La confiabilidad suele ser buena en redes de área local [LAN] solo menos tan en redes de área extendida [el WAN], como internet.)” (Microsoft, 2017)

Java proporciona clases para dar soporte a la comunicación vía datagramas UDP, todas ellas contenidas en el paquete java.net. Estas clases son:
---DatagramSocket
---DatagramPacket

PROTOCOLO TCP

Transmission Control Protocol (TCP) es uno de los protocolos fundamentales en Internet. Fue creado entre los años 1973 y 1974 por Vint Cerf y Robert Kahn.

Muchos programas dentro de una red de datos compuesta por computadoras, pueden usar TCP para crear conexiones entre ellos a través de las cuales puede enviarse un flujo de datos. El protocolo garantiza que los datos serán entregados en su destino sin errores y en el mismo orden en que se transmitieron. También proporciona un mecanismo para distinguir distintas aplicaciones dentro de una misma máquina, a través del concepto de puerto.

“TCP da soporte a muchas de las aplicaciones más populares de Internet (navegadores, intercambio de ficheros, programas de mensajería, etc.) y protocolos de aplicación como HTTP, SMTP, SSH y FTP.” (Cinestav, 2017)

Las principales características principales TCP son:

·         ---ORIENTADO A LA CONEXIÓN: dos computadoras establecen una conexión para     intercambiar datos. Los sistemas de los extremos se sincronizan con el otro para manejar   el flujo de paquetes y adaptarse a la congestión de la red.  (González, 2017)

·        ---CONTROL DE FLUJO: si el transmisor está desbordando el buffer del receptor por       transmitir demasiado rápido, el receptor descarta paquetes. Los acuses fallidos que llegan   al transmisor le alertan para bajar la tasa de transferencia o dejar de transmitir. (González,   2017)

·        ---SERVICIO DE RECUPERACIÓN DE PAQUETES: el receptor puede pedir la     retransmisión de un paquete. Si el paquete no es notificado como recibido (ACK), el   transmisor envía de nuevo el paquete.  (González, 2017)

PROTOCOLO UDP

User Datagram Protocol (UDP) es un protocolo del nivel de transporte basado en el intercambio de datagramas. Permite el envío de dichos datagramas a través de la red sin que se haya establecido previamente una conexión, ya que el propio datagrama incorpora suficiente información de direccionamiento en su cabecera.  (Cinestav, 2017)
Su uso principal es para protocolos como DHCP, BOOTP, DNS y demás protocolos en los que el intercambio de paquetes de la conexión/desconexión son mayores, o no son rentables con respecto a la información transmitida, así como para la transmisión de audio y vídeo en tiempo real, donde no es posible realizar retransmisiones por los estrictos requisitos de retardo que se tiene en estos casos.
Sus principales características son:
**Es un protocolo mínimo de nivel de transporte orientado a mensajes.
**Proporciona una sencilla interfaz entre la capa de red y la capa de aplicación.
**No otorga garantías para la entrega de sus mensajes.
**Se utiliza, por ejemplo, cuando se necesita transmitir voz o vídeo y resulta más importante transmitir con velocidad que garantizar el hecho de que lleguen absolutamente todos los bytes.

DATAGRAM PACKET

La clase DatagramPacket proporciona un constructor que permite crear instancias de un array de bytes parar: el mensaje, la longitud del mensaje, la dirección Internet y el puerto local del socket de destino. (Nereida, 2017)
Los objetos del tipo DatagramPacket se pueden transmitir entre procesos cuando un proceso los envía y otro los recibe.
Esta clase proporciona otro constructor para usarlo cuando se recibe un mensaje. Sus argumentos especifican un array de bytes en el que recibir el mensaje y la longitud del array. Cuando se recibe un mensaje se pone en el DatagramPacket junto con su longitud, la dirección de Internet y el puerto del socket de envío.
Se puede obtener el mensaje del objeto DatagramPacket mediante el método getData(). Los métodos getPort() y getAddress() permiten obtener el puerto y la dirección Internet del objeto de tipo DatagramPacket. (Nereida, 2017)

DATAGRAM SOCKET

La clase DatagramSocket da soporte a sockets para el envío y recepción de datagramas UDP.
Se proporciona un constructor que toma un puerto como argumento, para que sea usado por los procesos que necesitan usar un puerto particular. También se proporciona un constructor sin argumentos que permite al sistema escoger un puerto local libre. Estos constructores pueden lanzar una excepción del tipo SocketException si el puerto ya está en uso o si está reservado.
Esta clase cuenta con los siguientes métodos:
-send() y receive().
Estos métodos permiten transmitir datagramas entre un par de sockets. El argumento del send es una instancia de un DatagramPacket que contiene un mensaje y su destino. El argumento del receive es un objeto DatagramPacket vacío en el cual se pondrá el mensaje, su longitud y su origen. Tanto el método send() como el receive() pueden lanzar una IOException. (Nereida, 2017)
-setSoTimeout().
Este método permite establecer un tiempo de espera. Con un tiempo de espera establecido, el método receive() se bloqueará por el tiempo especificado y entonces lanzará una InterruptedIOException().(Nereida, 2017)
-connect().
Este método se utiliza para conectar a un puerto remoto particular y una dirección de Internet, en este caso el socket sólo es capaz de enviar y recibir mensajes desde esa dirección. (Nereida, 2017)

Los sockets son parte vital para la conformación de comunicación en una red, son la base de las aplicaciones de mensajería instántanea, si una aplicación no tiene sockets entonces la comunicación posibles. También nos dimos cuenta que existen dos tipos de sockets los socket datagrama y los socket stream siendon los datagrama los más usados debido a su estructura simple administran los mensajes de manera bidireccional.Además los sockets datagrama pueden usarse en dos protocolos distintos el UTP y el TCP, el primero permite el envió de datagramas sin una conexión preestablecida y el TCP establece la conexión entre computadoras para después comunicarse. Los sockets son parte vital de la comunicación actual.
A continuación se mostrará el ejemplo del código de un Socket Datagrama:
Emisor

Receptor

Bibliografía

Cinestav. (15 de agosto de 2017). Cinestav. Obtenido de Tamaulipas: cinvestav.mx/~vjsosa/clases/sd/sistemas_distribuidos_panorama.pdf
Coulouris, G. (2001). Sistemas Distribuidos: Conceptos y Diseño. EUA: Pearson Addison-Wesley.
González, A. (14 de 10 de 2017). UC3M. Obtenido de http://www.it.uc3m.es/lpgonzal/protocolos/transporte.php
M.L.Liu. (2001). Computacion Distribuida:Fundamentos y Aplicaciones. EUA: Pearson Addison-Wesley.
Microsoft. (12 de 10 de 2017). MSDN Microsoft. Obtenido de https://msdn.microsoft.com/es-es/library/z4eykh88.aspx#_core_definition_of_a_socket
Nereida. (15 de 10 de 2017). TesisDoctorado. Obtenido de http://nereida.deioc.ull.es/~cleon/doctorado/doc06/doc06/html/node8.html



Comentarios

Entradas populares de este blog

Arquitectura Cliente-Servidor

Sistemas Distribuidos