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.
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.
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.
- DatagramSocket
- DatagramPacket
- Método send de DatagramPacket
- Metodo receive de DatagramPacket
- Arreglo de bytes que incluye la información a enviar
- Numero de puerto de salida (Un puerto es un acceso lógico representado por un valor de 16 bits)
- Dirección IP
- 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:
- DatagramSocket (Establecer un socket que se enlace al puerto local y que debe conicidir con el puerto del emisor)
- DatagramPacket (Para recibir el paquete)
- Metodo receive de DatagramPacket
- Paquetes de longitud longitud
- 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.
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
Publicar un comentario