Un conector de red es una estructura de software dentro de un nodo de red de una red informática que sirve como punto final para enviar y recibir datos a través de la red. La estructura y las propiedades de un socket se definen mediante una interfaz de programación de aplicaciones (API) para la arquitectura de red. Los sockets se crean solo durante la vida útil de un proceso de una aplicación que se ejecuta en el nodo.
Debido a la estandarización de los protocolos TCP / IP en el desarrollo de Internet , el término conector de red se usa con mayor frecuencia en el contexto de Internet Protocol Suite y, por lo tanto, a menudo también se lo conoce como conector de Internet . En este contexto, un socket se identifica externamente a otros hosts por su dirección de socket , que es la tríada del protocolo de transporte , la dirección IP y el número de puerto .
El término socket también se usa para el punto final de software de la comunicación entre procesos (IPC) interna del nodo , que a menudo usa la misma API como un socket de red.
Usar
El uso del término enchufe en software es análogo a la función de un conector eléctrico hembra , un dispositivo en hardware para la comunicación entre nodos interconectados con un cable eléctrico . De manera similar, el término puerto se usa para puntos finales físicos externos en un nodo o dispositivo.
La interfaz de programación de aplicaciones (API) para la pila de protocolos de red crea un identificador para cada socket creado por una aplicación, comúnmente conocido como descriptor de socket . En sistemas operativos similares a Unix , este descriptor es un tipo de descriptor de archivo . El proceso de aplicación lo almacena para su uso con cada operación de lectura y escritura en el canal de comunicación.
En el momento de la creación con la API, un conector de red está vinculado a la combinación de un tipo de protocolo de red que se utilizará para las transmisiones, una dirección de red del host y un número de puerto . Los puertos son recursos numerados que representan otro tipo de estructura de software del nodo. Se utilizan como tipos de servicio y, una vez creados por un proceso, sirven como un componente de ubicación direccionable externamente (desde la red), de modo que otros hosts puedan establecer conexiones.
Los sockets de red pueden estar dedicados para conexiones persistentes para la comunicación entre dos nodos, o pueden participar en comunicaciones sin conexión y multidifusión .
En la práctica, debido a la proliferación de los protocolos TCP / IP en uso en Internet, el término conector de red generalmente se refiere al uso con el Protocolo de Internet (IP). Por lo tanto, a menudo también se denomina conexión de Internet .
Direcciones de socket
Una aplicación puede comunicarse con un proceso remoto intercambiando datos con TCP / IP al conocer la combinación de tipo de protocolo, dirección IP y número de puerto. Esta combinación a menudo se conoce como dirección de socket . Es el identificador de acceso de la red al conector de red. El proceso remoto establece un conector de red en su propia instancia de la pila de protocolos y utiliza la API de red para conectarse a la aplicación, presentando su propia dirección de conector para que la utilice la aplicación.
Implementación
Una pila de protocolos , generalmente proporcionada por el sistema operativo (en lugar de una biblioteca separada, por ejemplo), es un conjunto de servicios que permiten que los procesos se comuniquen a través de una red utilizando los protocolos que implementa la pila. El sistema operativo reenvía la carga útil de los paquetes IP entrantes a la aplicación correspondiente extrayendo la información de la dirección del socket de los encabezados de protocolo de transporte y IP y eliminando los encabezados de los datos de la aplicación.
La interfaz de programación de aplicaciones (API) que utilizan los programas para comunicarse con la pila de protocolos, mediante sockets de red, se denomina API de socket . El desarrollo de programas de aplicación que utilizan esta API se denomina programación de sockets o programación de red . Las API de sockets de Internet generalmente se basan en el estándar de sockets de Berkeley . En el estándar de sockets de Berkeley, los sockets son una forma de descriptor de archivo , debido a la filosofía de Unix de que "todo es un archivo", y las analogías entre sockets y archivos. Ambos tienen funciones para leer, escribir, abrir y cerrar. En la práctica, las diferencias tensan la analogía y se utilizan diferentes interfaces (envío y recepción) en un conector. En la comunicación entre procesos , cada extremo generalmente tiene su propio conector.
En los protocolos estándar de Internet TCP y UDP, una dirección de socket es la combinación de una dirección IP y un número de puerto , al igual que un extremo de una conexión telefónica es la combinación de un número de teléfono y una extensión en particular . Los sockets no necesitan tener una dirección de origen, por ejemplo, solo para enviar datos, pero si un programa vincula un socket a una dirección de origen, el socket puede usarse para recibir datos enviados a esa dirección. Basándose en esta dirección, los sockets de Internet entregan los paquetes de datos entrantes al proceso de solicitud correspondiente .
Socket a menudo se refiere específicamente a un socket de Internet o un socket TCP. Un enchufe de Internet se caracteriza mínimamente por lo siguiente:
- dirección de socket local, que consta de la dirección IP local y (para TCP y UDP, pero no IP) un número de puerto
- protocolo: Un protocolo de transporte, por ejemplo, TCP, UDP, IP sin procesar. Esto significa que los puntos finales (locales o remotos) con el puerto TCP 53 y el puerto UDP 53 son sockets distintos, mientras que IP no tiene puertos.
- Un conector que se ha conectado a otro conector, por ejemplo, durante el establecimiento de una conexión TCP, también tiene una dirección de conector remoto.
Definición
Las distinciones entre socket (representación interna), descriptor de socket (identificador abstracto) y dirección de socket (dirección pública) son sutiles y no siempre se distinguen en el uso diario. Además, las definiciones específicas de un encaje difieren entre los autores. En la Solicitud de comentarios de IETF , estándares de Internet , en muchos libros de texto, así como en este artículo, el término socket se refiere a una entidad que se identifica de forma única por el número de socket. En otros libros de texto, [1] el término socket se refiere a una dirección de socket local, es decir, una "combinación de una dirección IP y un número de puerto". En la definición original de socket dada en RFC 147, ya que estaba relacionado con la red ARPA en 1971, "el socket se especifica como un número de 32 bits con sockets pares que identifican los sockets de recepción y sockets impares que identifican los sockets de envío". Hoy, sin embargo, las comunicaciones por socket son bidireccionales.
Dentro del sistema operativo y la aplicación que creó un socket, se hace referencia a un socket mediante un valor entero único llamado descriptor de socket .
Herramientas
En sistemas operativos similares a Unix y Microsoft Windows , las herramientas de línea de comandos netstat o ss [2] se utilizan para listar sockets establecidos e información relacionada.
Ejemplo
Este ejemplo, modelado de acuerdo con la interfaz de socket de Berkeley, envía la cadena "¡Hola, mundo!" vía TCP al puerto 80 del host con dirección 1.2.3.4. Ilustra la creación de un socket (getSocket), conectándolo al host remoto, enviando la cadena y finalmente cerrando el socket:
Socket mysocket = getSocket (tipo = "TCP")conectar (mysocket, dirección = "1.2.3.4", puerto = "80")enviar (mysocket, "¡Hola, mundo!")cerrar (mysocket)
Tipos
Hay varios tipos de conexión a Internet disponibles:
- Zócalos de datagramas
- Sockets sin conexión , que utilizan el Protocolo de datagramas de usuario (UDP). [3] Cada paquete enviado o recibido en un conector de datagrama se direcciona y enruta individualmente. El orden y la confiabilidad no están garantizados con los sockets de datagramas, por lo que varios paquetes enviados desde una máquina o proceso a otro pueden llegar en cualquier orden o no llegar en absoluto. Es posible que se requiera una configuración especial para enviar transmisiones en un conector de datagramas. [4] Para recibir paquetes de difusión, un conector de datagrama no debe estar vinculado a una dirección específica, aunque en algunas implementaciones, los paquetes de difusión también pueden recibirse cuando un conector de datagrama está vinculado a una dirección específica. [5]
- Tomas de corriente
- Sockets orientados a la conexión, que utilizan el Protocolo de control de transmisión (TCP), el Protocolo de transmisión de control de flujo (SCTP) o el Protocolo de control de congestión de datagramas (DCCP). Un socket de flujo proporciona un flujo secuenciado y único de datos sin errores sin límites de registro, con mecanismos bien definidos para crear y destruir conexiones y reportar errores. Un socket de flujo transmite datos de manera confiable , en orden y con capacidades fuera de banda . En Internet, los sockets de transmisión se implementan normalmente mediante TCP para que las aplicaciones puedan ejecutarse en cualquier red mediante el protocolo TCP / IP.
- Zócalos crudos
- Permita el envío y la recepción directos de paquetes IP sin ningún formato de capa de transporte específico del protocolo. Con otros tipos de sockets, la carga útil se encapsula automáticamente de acuerdo con el protocolo de capa de transporte elegido (por ejemplo, TCP, UDP) y el usuario del socket desconoce la existencia de encabezados de protocolo que se transmiten con la carga útil. Cuando se lee desde un socket sin formato, generalmente se incluyen los encabezados. Al transmitir paquetes desde un socket sin formato, la adición automática de un encabezado es opcional.
- La mayoría de las interfaces de programación de aplicaciones (API) de sockets , por ejemplo las basadas en sockets de Berkeley , admiten sockets sin formato. Windows XP se lanzó en 2001 con el soporte de socket sin formato implementado en la interfaz de Winsock , pero tres años más tarde, Microsoft limitó el soporte de socket sin formato de Winsock debido a problemas de seguridad. [6]
- Los sockets sin formato se utilizan en aplicaciones relacionadas con la seguridad como Nmap . Un caso de uso de sockets sin formato es la implementación de nuevos protocolos de capa de transporte en el espacio de usuario . [7] Los sockets sin procesar suelen estar disponibles en equipos de red y se utilizan para protocolos de enrutamiento como el Protocolo de administración de grupos de Internet (IGMP) y Open Shortest Path First (OSPF), y en el Protocolo de mensajes de control de Internet (ICMP) utilizado, entre otros. cosas, por la utilidad ping . [8]
Otros tipos de sockets se implementan sobre otros protocolos de transporte, como Systems Network Architecture [9] y sockets de dominio Unix para la comunicación interna entre procesos.
Estados de socket en el modelo cliente-servidor
Los procesos informáticos que proporcionan servicios de aplicaciones se denominan servidores y crean sockets en el inicio que están en estado de escucha . Estos sockets están esperando iniciativas de los programas del cliente .
Un servidor TCP puede servir a varios clientes al mismo tiempo creando un conector exclusivo dedicado para cada conexión de cliente en un nuevo proceso hijo o subproceso de procesamiento para cada cliente. Estos se encuentran en el estado establecido cuando se establece una conexión virtual de conector a conector o circuito virtual (VC), también conocido como sesión TCP , con el conector remoto, lo que proporciona un flujo de bytes dúplex .
Un servidor puede crear varios sockets TCP establecidos simultáneamente con el mismo número de puerto local y dirección IP local, cada uno asignado a su propio proceso servidor-hijo, sirviendo a su propio proceso cliente. El sistema operativo los trata como sockets diferentes, ya que la dirección del socket remoto (la dirección IP del cliente o el número de puerto) es diferente; es decir, ya que tienen tuplas de pares de conectores diferentes .
Los sockets UDP no tienen un estado establecido porque el protocolo no tiene conexión . Un proceso de servidor UDP maneja los datagramas entrantes de todos los clientes remotos secuencialmente a través del mismo socket. Los sockets UDP no se identifican por la dirección remota, sino solo por la dirección local, aunque cada mensaje tiene una dirección remota asociada que se puede recuperar de cada datagrama con la interfaz de programación de aplicaciones de red (API).
Pares de enchufes
Los enchufes locales y remotos de comunicación se denominan pares de conectores . Cada par de conectores se describe mediante una tupla única de 4 que consta de direcciones IP de origen y destino y números de puerto, es decir, direcciones de conectores locales y remotos. [10] [11] Como se discutió anteriormente, en el caso de TCP, un par de conectores está asociado en cada extremo de la conexión con una tupla única de 4.
Historia
El término socket data de la publicación de RFC 147 en 1971, cuando se usó en ARPANET. La mayoría de las implementaciones modernas de sockets se basan en los sockets de Berkeley (1983) y otras pilas como Winsock (1991). La API de sockets de Berkeley en Berkeley Software Distribution (BSD), se originó con el sistema operativo Unix 4.2BSD como API. Sin embargo, solo en 1989 UC Berkeley pudo lanzar versiones de su sistema operativo y biblioteca de redes libres de las restricciones de licencia del Unix protegido por derechos de autor de AT&T .
C ª. 1987, AT&T introdujo la Interfaz de capa de transporte (TLI) basada en STREAMS en UNIX System V Release 3 (SRV3). [12] y continuó en la Versión 4 (SVR4). [13]
Otras implementaciones tempranas fueron escritas para TOPS-20 , [14] MVS , [14] VM , [14] IBM-DOS (PCIP). [14] [15]
Tomas en equipos de red
El socket es principalmente un concepto utilizado en la capa de transporte del modelo de Internet o la capa de sesión del modelo OSI . Los equipos de red, como los enrutadores , que operan en la capa de Internet , y los conmutadores , que operan en la capa de enlace , no requieren implementaciones de la capa de transporte. Sin embargo, los firewalls de red con estado , los traductores de direcciones de red y los servidores proxy realizan un seguimiento de los pares de sockets activos. En conmutadores multicapa y soporte de calidad de servicio (QoS) en enrutadores, los flujos de paquetes pueden identificarse extrayendo información sobre los pares de conectores.
Los sockets sin procesar suelen estar disponibles en equipos de red y se utilizan para protocolos de enrutamiento como IGRP y OSPF , y en el Protocolo de mensajes de control de Internet (ICMP).
Ver también
- Lista de números de puerto TCP y UDP
- Tráfico promiscuo
- WebSocket
Referencias
- ^ Programa de Cisco Networking Academy, CCNA 1 y 2 Guía complementaria revisada tercera edición, P.480, ISBN 1-58713-150-1
- ^ Jack Wallen (22 de enero de 2019). "Introducción al comando ss" .
- ^ VS Bagad, IA Dhotre (2008), Computer Networks (5ª edición revisada, ed. 2010), Publicaciones técnicas Pune, p. 52
- ^ SO_BROADCAST , Microsoft , consultado el 12 de diciembre de 2019
- ^ Class DatagramSocket , Oracle , consultado el 12 de diciembre de 2019
- ^ Ian Griffiths para IanG on Tap. 12 de agosto de 2004. Raw Sockets Gone en XP SP2
- ^ "raw (7): sockets sin procesar IPv4 - página de manual de Linux" . die.net .
- ^ "Preguntas frecuentes sobre redes IP sin procesar" . faqs.org .
- ^ "www-306.ibm.com - Guía de AnyNet para sockets sobre SNA" . Archivado desde el original el 3 de mayo de 2008 . Consultado el 7 de septiembre de 2006 .
- ^ books.google.com - Programación de red UNIX: API de red de sockets
- ^ books.google.com - Designing BSD Rootkits: An Introduction to Kernel Hacking
- ↑ ( Goodheart 1994 , p. 11)
- ↑ ( Goodheart 1994 , p. 17)
- ^ a b c d historyofcomputercommunications.info - Libro: 9.8 TCP / IP y XNS 1981-1983
- ^ La computadora de escritorio como participante de la red.pdf 1985
Otras lecturas
- Jones, Anthony; Ohlund, Jim (2002). Programación de red para Microsoft Windows . ISBN 0-7356-1579-9.
enlaces externos
- Cómo funcionan los sockets - IBM Information Center
- Programación del servidor con sockets TCP / IP [ enlace muerto ]
- Guía de Beej para la programación de redes
- Tutoriales de Java: conceptos básicos de redes
- Net :: RawIP; módulo para aplicaciones Perl. Creado por Sergey Kolychev .
- SOCK_RAW Desmitificado: artículo que describe el funcionamiento interno de Raw Sockets
- Ejemplos en lenguaje C de sockets sin procesar de Linux para IPv4 e IPv6 - Ejemplos en lenguaje C de David Buchan de sockets sin procesar de IPv4 e IPv6 para Linux.