Un socket de red es una estructura de software dentro de un nodo de red de una computadora que sirve como punto final (endpoint) para el envío y recepción de datos a través de la red. Su estructura y propiedades están definidas por una interfaz de programación de aplicaciones (API) para la arquitectura de red. Los sockets se crean únicamente durante el tiempo de vida de un proceso de una aplicación que se ejecuta en el nodo.
Funcionamiento y Uso
El uso del término socket en software es análogo al funcionamiento de un conector hembra eléctrico en hardware, permitiendo la comunicación entre nodos interconectados. De manera similar, el término port (puerto) se refiere a los puntos finales físicos externos en un nodo o dispositivo.
La API de la pila de protocolos de red crea un manejador para cada socket creado por una aplicación, comúnmente llamado descriptor de socket. En los sistemas operativos tipo Unix, este descriptor es un tipo de descriptor de archivo. La aplicación lo almacena para utilizarlo en cada operación de lectura y escritura en el canal de comunicación.
El Proceso de Vinculación
Al momento de su creación, un socket de red se vincula a una combinación de:
- Un tipo de protocolo de red para las transmisiones.
- Una dirección de red del host.
- Un número de puerto.
Los puertos son recursos numerados que representan otra estructura de software del nodo. Funcionan como tipos de servicio y, una vez creados por un proceso, sirven como una ubicación direccionable externamente para que otros hosts puedan establecer conexiones.
Direcciones de Socket
Para que una aplicación se comunique con un proceso remoto, debe conocer la combinación de tipo de protocolo, dirección IP y número de puerto. Esta combinación se conoce como dirección de socket. Es el manejador de acceso orientado a la red del socket de red.
El proceso remoto establece su propio socket de red en su instancia de la pila de protocolos y utiliza la API de red para conectarse a la aplicación, presentando su propia dirección de socket para el intercambio de datos.
Implementación y Programación
La pila de protocolos, generalmente proporcionada por el sistema operativo, es un conjunto de services que permite a los procesos comunicarse a través de la red utilizando los protocolos implementados. El sistema operativo redirige la carga útil de los paquetes IP entrantes a la aplicación correspondiente extrayendo la información de la dirección de socket de los encabezados de IP y del protocolo de transporte.
El Estándar Berkeley Sockets
La API que los programas utilizan para comunicarse con la pila de protocolos se llama API de sockets. El desarrollo de programas que utilizan esta API se denomina programación de sockets o programación de red. Las API de sockets de Internet suelen basarse en el estándar de Berkeley sockets, siguiendo la filosofía de Unix de que "todo es un archivo". Por ello, los sockets tienen funciones para leer, escribir, abrir y cerrar, aunque en la práctica se utilizan interfaces específicas de envío y recepción.
Definiciones y Distinciones
En el uso cotidiano, las distinciones entre un socket (representación interna), un descriptor de socket (identificador abstracto) y una dirección de socket (dirección pública) suelen ser sutiles. Un socket de Internet se caracteriza mínimamente por:
- Dirección de socket local: Consiste en la dirección IP local y, para TCP y UDP, un número de puerto.
- Protocolo: Un protocolo de transporte, como TCP, UDP o IP raw. Por ejemplo, los endpoints con puerto 53 en TCP y UDP son sockets distintos.
- Dirección de socket remota: Un socket que ha sido conectado a otro socket (por ejemplo, en una conexión TCP) posee también una dirección de socket remota.