Sockets
Table of Contents
¿Qué es un socket?
El término socket se refiere a la interfaz de programación de aplicaciones para la familia de protocolos de la arquitectura TCP/IP. Esta interfaz de programación la proporciona el Sistema Operativo aunque nosotros vamos a usar una capa mayor de abstracción provista por el lenguaje de programación que vamos a usar para programar aplicaciones que usen sockets.
Los sockets constituyen el mecanismo para la entrega de paquetes de datos provenientes de la tarjeta de red a los procesos o hilos apropiados. Un socket queda definido por:
- Un par de direcciones IP local (origen) y remota (destino)
- Un protocolo de transporte
- Un par de números de puerto local (origen) y remoto (destino)
Necesitas especificar IP y puerto de origen para que el host destinatario pueda responder al origen.
Tipos de socket
Podemos reducir los tipos de sockets en dos: Stream Sockets y Datagram Sockets.
Los Stream Sockets son confiables y orientados a la conexión, es decir, usan el protocolo de transporte TCP. Estos sockets son usados por aplicaciones como: el navegador web (que usan HTTP), Telnet o SSH, por ejemplo.
Los Datagram Sockets son sockets sin conexión y no confiables, es decir, usan el protocolo de transporte UDP. Estos sockets son usados por aplicaciones como. DHCP, juegos online, video y audio por streaming, entre otros.
Existen dos tipos de sockets más que son los Raw Sockets para enviar datos sin un protocolo específico y WebSocket para trabajar con TCP sobre el protocolo (puertos) HTTP (80) y HTTPS (443) y están soportados por los navegadores web.
Arquitectura Cliente/Servidor (C/S)
Los sockets nos permiten escribir programas C/S que es la arquitectura en al que se basan la mayoría de los servicios de red e Internet.
En esta arquitectura tenemos:
- Un proceso (programa) a la escucha llamado servidor que tendrá que tener una IP fija y un puerto determinado y, también, fijo.
- Un proceso (programa) que inicia la comunicación llamado cliente que necesita conocer la dirección IP y puerto del servidor. Este cliente puede cambiar de IP y puerto porque es quien inicia la conversación y, por tanto, en este inicio informará de su IP y puerto al servidor.
La imagen de abajo muestra cómo se inicia, se lleva a cabo y finaliza una conversación entre un cliente y un servidor usando Stream Sockets y Datagram Sockets:
Figure 1: Funcionamiento de la arquitectura C/S
Como ves, en los Stream Sockets hay que establecer una conexión y cerrarla, mientras que en los Datagram Sockets no hay que establecer una conexión ni cerrarla.
Además, como ya he comentado, y aunque no se ve en la imagen, los Stream Sockets garantizan que los paquetes lleguen y, además, lo hagan en orden.