Socket y Datagrama

Introducción
Previamente habíamos estudiado la transferencia de datos y el medio en el cual se llevan a cabo estas operaciones, pero nunca nos hemos adentrado en el proceso y los componentes necesarios para que estos mensajes se envían y se reciban.

Todos los antecedentes tales como la arquitectura cliente-servidor, el modelo TCP/IP y las redes harán que esta lección sobre sockets sea un tema más digerible, ya que hay muchos conceptos involucrados que ya fueron estudiados.


Con los sockets, nos adentramos en el proceso lógico que hace posible la transferencia de información a través de paquetes simples llamados datagramas. 


Socket

El término "socket" surge en referencia a las comunicaciones telefónicas, las cuales tenían que ser establecidas manualmente insertando clavijas.
Un socket, desde el punto de vista funcional, se define como un punto terminal al que pueden “enchufarse” dos procesos para comunicar entre sí (Díaz, 1994). Desde el punto de vista de software, son una construcción de programación. Los sockets proporcionan una interface para las redes y se ubican en la capa de transporte.
Los sockets están identificados por una IP, un protocolo (TCP o UDP) y un numero de puerto.


Protocolos
Para que la comunicación sea posible debe existir un protocolo que dicte el camino que hay que seguir. Para este caso existen dos tipos: los no orientados a conexión y los orientados a conexión, los cuales son llamados el protocolo de datagrama de usuario (UDP, User Datagram Protocol) y el protocolo de control de transmisión (TCP, Transmission Control Protocol) respectivamente.
Los sockets que utilizan UDP para el transporte son conocidos como socket datagrama, mientras que los que usan TCP se denominan sockets stream.

Datagrama
Un datagrama es una unidad de transferencia y son la agrupación lógica de información. Cada paquete contiene los datos (la carga, en inglés paytoad) y alguna información de control (la cabecera), que incluye la dirección de destino.

No orientado a conexión
De acuerdo a la comunicación sin conexión, cada datagrama transportado es dirigido y encaminado individualmente y no se garantiza que el receptor los reciba en el orden que fueron enviados.
Podemos hacer una analogía con la vida real: un sistema de correos. En cada carta debemos escribir la dirección del destinatario y si la carta se perdiese el receptor no sería informado al respecto.

Envió de paquetes

Este proceso incluye varios elementos; objetos que se instancian para posteriormente usarse e incluir parámetros.

  1. DatagramSocket
  2. DatagramPacket
  3. Método send de DatagramPacket
  4. Metodo receive de DatagramPacket
  5. Arreglo de bytes que incluye la información a enviar
  6. Numero de puerto de salida (Un puerto es un acceso lógico representado por un valor de 16 bits)
  7. Dirección IP
  8. Paquetes de longitud longitud


Se llama al objeto DatagramPacket y en él se incluyen los datos de la carga y del destino, después se realiza una llamada al método send del objeto DatagramSocket, especificando una referencia al objeto DatagramPacket como argumento.

Recepción de paquetes
Los elementos involucrados en esta operación son:

  1. DatagramSocket (Establecer un socket que se enlace al puerto local y que debe conicidir con el puerto del emisor)
  2. DatagramPacket (Para recibir el paquete)
  3. Metodo receive de DatagramPacket
  4. Paquetes de longitud longitud
  5. Arreglo de bytes en la que se almacenará la información que se recibirá


Para recibir los datagramas enviados al socket, el proceso crea un objeto DatagramPacket que hace referencia a un arreglo de octetos y llama al método receive del objeto DatagramSocket.
La sincronización entre el tamaño de arreglos debe ser idéntica y precisa, ya que si al arreglo receptor se le asigna un tamaño n y el paquete recibido es más grande puede existir una pérdida de información.

Diagrama simple del envió y recepción de datagramas con socket


Orientado a conexión

Los sockets del tipo stream son más típicos y apropiados para la comunicación orientada a conexión, sin embargo también puede ser posible que esta comunicación se lleve a cabo con datagramas como se explica a continuación.
DatagramSocket tiene métodos que permiten crear y terminar una conexión.  Primero se establece una conexión y así ese socket no estará disponible para comunicarse con otro socket hasta que la conexión se termine. Los metodos empleados con llamados connect y disconnect. Al método connect contine de información una dirección IP y el puerto por donde debe ser enviado.



Conclusión
Los sockets llegaron para darle un medio de transmisión a la información, para que las redes no solo fueran cables y maquinas. Durante la investigación encontre este fragmento que me pareció interesante: 

Socket-based communication is independent of a programming language used for implementing it. That means, a socket program written in Java language can communicate to a program written in non-Java (say C or C++) socket program.


esto hace que los sockets sean portables lo cual aumenta mucho su usabilidad e implementación.

De la misma manera, el usar sockets implica un buen análisis del sistema y de la funcionalidad que queremos que tenga, ya que las necesidades pueden equivaler a usar una comunicación orientada a conexión o no. Así mismo, debemos de tomar en cuenta las características que engloba cada protocolo, por ejemplo el UDP no necesita establecer una conexión pero no se garantiza la llegada del paquete o que notifique la perdida, lo cual lo hace más eficaz pero menos seguro. En cambio, TCP tiene orden y notificaciones pero existe el caso en el que los datos sean muy grandes y tarden más en llegar a su destino, haciéndolo más seguro pero menos eficaz.

Bibliografía


Buyya, R. (2009). Object-oriented Programming with Java: Essentials and Applications. Tata McGraw-Hill Education.

Díaz, J. L. (Octubre de 1994). Programación de aplicaciones distribuidas usando sockets. Obtenido de Arquitectura y Tecnología de Computadores, Universidad de Oviedo: http://www.atc.uniovi.es/inf_superior/atc/DISTRIBUIDAS/prog_ap_dist_sock.pdf

Liu, M. (2004). Computación Distribuida. Fundamentos y Aplicaciones. Madrid: PEARSON EDUCACIÓN.




Comentarios

Entradas más populares de este blog

Kerberos

Redes: tipos y topologías.