Esta publicación trata acerca de las interfaces de los programas de aplicación (API), en
particular de las interfaces entre los programas de aplicación y el protocolo TCP/IP.
En arquitecturas cliente-servidor, cuando se hace una solicitud, por ejemplo obtener una
imagen, image.png de la página web example.com , los pasos que se siguen, a grandes
rasgos, son los siguientes:
- Obtener una dirección ip para example.com (Ver como DNS proporciona dirección ip)
- Abrir un socket a una dirección ip en un puerto determinado
- Abrir una conexión TCP a una dirección ip en un puerto determinado
- Hacer la solicitud HTTP GET, de la image.png
- Obtener la imagen solicitada, image.png
- Cerrar la conexión.
En lo que sigue, se detalla el concepto de
socket.
Socket
La abstracción de la interfaz socket es el socket [1], [2]. Un socket es como el punto donde un proceso de aplicación local se conecta a la red. La interfaz define las operaciones de creación del socket, adjuntar el socket a la red, enviar/recibir mensajes a través del socket y cerrar el socket. como se ilustra en la Figura 1.
 |
| Figura 1: Socket. |
Para que un proceso reciba mensajes, su socket debe estar vinculado a un puerto local y a una de las direcciones de Internet en la computadora que se ejecuta. Los mensajes enviados a una dirección de Internet y número de puerto en particular solo pueden recibir un proceso cuyo socket está asociado con esa dirección de Internet y número de puerto.
Los procesos pueden usar el mismo socket para enviar y recibir mensajes. Cualquier proceso puede hacer uso de múltiples puertos para recibir mensajes, pero un proceso no puede compartir puertos con otros procesos en la misma computadora. Cada socket esta asociado con un protocolo particular, ya sea UDP o TCP.
Veamos como se implementan los socket en los protocolos de la capa de transporte, UDP y TCP.
UDP
UDP, User Datagram Protocol, es un protocolo de nivel de transporte basado en el intercambio de datagramas. Permite el envío de 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. No tiene confirmación de recepción del mensaje ni control de flujo de transmisión del mensaje, por lo que los paquetes pueden adelantarse unos a otros; y tampoco se sabe si ha llegado correctamente, ya que no hay confirmación de entrega o recepción .
Un datagrama enviado por UDP se transmite desde un proceso de envío a un proceso de recepción sin reconocimiento ni reintentos. Si ocurre una falla, el mensaje puede que no llegue. Para enviar o recibir mensajes, un proceso primero debe crear un socket vinculado a una dirección de Internet del host local y un puerto local. El servidor enlazará su socket a su puerto: y se da a conocer a los clientes para que puedan enviarle mensajes.
Datagrama
En la capa de transporte, la unidad de transferencia básica en las llamadas de internet son los datagramas de internet, llamados también datagramas IP o datagrama. La capa de transporte es responsable de brindar servicios a la capa de aplicación:
- obtener un mensaje de un programa de aplicación que se ejecuta en el host de origen;
- lo encapsula en un paquete de capa de transporte (llamado datagrama de usuario); y
- entregarlo al programa de aplicación correspondiente en el host de destino.
Un datagram esta compuesto de dos partes: encabezado y cuerpo, en la Figura 2 se ilustra la estructura.
 |
| Figura 2: Estructura del Datagrama |
Revisar más de UDP en documento de IBM: UDP
Características de la comunicación con Datagramas
Los siguientes son algunas características relacionada con la comunicación de datagramas [3]:
- Tamaño del mensaje: la longitud total de un datagrama esta medido en octetos.
- Longitud del encabezado (HLEN). El campo de longitud del encabezado de 4 bits (HLEN) define la longitud total del encabezado del datagrama en palabras de 4 bytes. El datagrama IPv4 tiene un encabezado de longitud variable. Cuando un dispositivo recibe un datagrama, necesita saber cuándo se detiene el encabezado y comienzan los datos, que están encapsulados en el paquete. Para que el valor de la longitud del encabezado (número de bytes) se ajuste a una longitud de encabezado de 4 bits, la longitud total del encabezado se calcula como palabras de 4 bytes. La longitud total se divide por 4 y el valor se inserta en el campo.
- Longitud total. Es un campo de 16 bits (encabezado más datos) del datagrama IP en bytes. Un número de 16 bits puede definir una longitud total de hasta 65.535. Sin embargo, el tamaño del datagrama es normalmente mucho menor que esto. Para encontrar la longitud de los datos de un datagrama, reste la longitud del encabezado de la longitud total. La longitud del encabezado se puede encontrar multiplicando el valor en el campo HLEN por 4:
Longitud de datos = longitud total - (HLEN) x 4
- Bloqueos: La implementación de sockets con datagramas normalmente proporcionan envíos sin bloqueo y recepciones con bloqueo (una recepción sin bloqueo es una opción en algunos implementaciones):
- La operación de envío termina cuando ha entregado el mensaje a los protocolos UDP e IP subyacentes, que son responsables de transmitirlo al host de destino
- A su llegada al destino, el mensaje se coloca en una cola asociada al puerto de destino que esta relacionado con el socket.
- El mensaje puede ser recogido de la cola por un invocación pendiente o futura a ese socket.
- Los mensajes se descartan en el destino si no hay procesos con un socket vinculado al puerto de destino.
- Tiempos de espera: La recepción con bloqueo es adecuada cuando un servidor está esperando recibir solicitudes de sus clientes. Pero en algunos programas, no es apropiado que en procesos que han invocado una operación de recepción con espera, lo haga indefinidamente. Puede suceder fallas en el proceso de envío o el mensaje esperado puede haberse perdido. Para ello, se pueden establecer tiempos de espera en los sockets.
- Recibir de cualquiera: el método de recepción no especifica un origen para los mensajes. En cambio, una invocación del método de recepción obtiene un mensaje dirigido a su socket desde cualquier origen. El método de recepción devuelve la dirección de Internet y el puerto local del remitente, permitiendo al destinatario comprobar de dónde procede el mensaje. Es posible conectar un socket de datagrama a un puerto remoto particular y una dirección de Internet, para que el socket pueda enviar mensajes y recibir mensajes de esa dirección.
Uso de UDP
Voz sobre IP y DNS. Es una opción popular porque no causa sobrecarga (overhead) en la
red
Bibliografia:
[1] Douglas Comer. Internetworking with TCP/IP . Volume 1. Sixth edition, Pearson
New International Edition. Always learning. Pearson Education Limited, 2014
[2]Larry L. Peterson and Bruce S. Davie. Computer Networks: A Systems Approach.
6th edition. Morgan Kaufmann, 2021
[3] Behrouz A. Forouzan. Data communications & networking with TCP/IP protocol
suite. McGraw-Hill Forouzan networking series. McGraw-Hill US Higher Ed ISE,
2021. ISBN