Toma de red

Punto final de comunicaciones de red basado en software

Un socket 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 están definidas por una interfaz de programación de aplicaciones (API) para la arquitectura de red. Los sockets se crean únicamente 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 socket de red se utiliza con mayor frecuencia en el contexto del conjunto de protocolos de Internet y, por lo tanto, también se lo suele denominar socket de Internet . En este contexto, un socket se identifica externamente ante otros hosts por su dirección de socket , que es la tríada de protocolo de transporte , dirección IP y número de puerto .

El término socket también se utiliza para el punto final de software de la comunicación entre procesos internos del nodo (IPC), que a menudo utiliza la misma API que un socket de red.

Usar

El uso del término socket 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 utiliza 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 denominado descriptor de socket . En los sistemas operativos tipo Unix , este descriptor es un tipo de descriptor de archivo . El proceso de aplicación lo almacena para usarlo 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 socket de red se vincula 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 a conexiones persistentes para la comunicación entre dos nodos, o pueden participar en comunicaciones sin conexión y de multidifusión .

En la práctica, debido a la proliferación de los protocolos TCP/IP que se utilizan en Internet, el término socket de red suele referirse al uso del protocolo de Internet (IP). Por ello, también se suele denominar socket de Internet .

Direcciones de socket

Una aplicación puede comunicarse con un proceso remoto intercambiando datos con TCP/IP conociendo la combinación de tipo de protocolo, dirección IP y número de puerto. Esta combinación se conoce a menudo como dirección de socket . Es el identificador de acceso de cara a la red al socket de red. El proceso remoto establece un socket 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 socket para que la utilice la aplicación.

Implementación

Una pila de protocolos , que normalmente la proporciona el sistema operativo (en lugar de una biblioteca independiente, por ejemplo), es un conjunto de servicios que permite 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 e 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 suelen basarse en el estándar de sockets de Berkeley . En el estándar de sockets de Berkeley, los sockets son una forma de descriptor de archivos , 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 socket. En la comunicación entre procesos , cada extremo generalmente tiene su propio socket.

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 , de forma similar a como un extremo de una conexión telefónica es la combinación de un número de teléfono y una extensión 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. En función de esta dirección, los sockets de Internet entregan los paquetes de datos entrantes al proceso de aplicación apropiado .

El término socket suele hacer referencia específicamente a un socket de Internet o a un socket TCP. Un socket 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 formato. Esto significa que los puntos finales (locales o remotos) con puerto TCP 53 y puerto UDP 53 son sockets distintos, mientras que IP no tiene puertos.
  • Un socket que se ha conectado a otro socket, por ejemplo, durante el establecimiento de una conexión TCP, también tiene una dirección de socket remota.

Definición

Las distinciones entre un 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 cotidiano. Además, las definiciones específicas de un socket difieren entre autores. En IETF Request for Comments , Internet Standards , 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, [2] tal como estaba relacionada con la red ARPA en 1971, "el socket se especifica como un número de 32 bits con sockets pares que identifican sockets receptores y sockets impares que identifican sockets emisores". Hoy, sin embargo, las comunicaciones por socket son bidireccionales.

Dentro del sistema operativo y la aplicación que creó un socket, a un socket se le hace referencia mediante un valor entero único llamado descriptor de socket .

Herramientas

En sistemas operativos tipo Unix y Microsoft Windows , las herramientas de línea de comandos netstat o ss [3] se utilizan para enumerar los sockets establecidos y la información relacionada.

Ejemplo

Este ejemplo, modelado según la interfaz de socket de Berkeley, envía la cadena "Hello, world!" a través de TCP al puerto 80 del host con dirección 203.0.113.0. Ilustra la creación de un socket (getSocket), su conexión al host remoto, el envío de la cadena y, finalmente, el cierre del socket:

Zócalo mysocket = getSocket(tipo = "TCP")conectar(mysocket, dirección = "203.0.113.0", puerto = "80")send(mysocket, "¡Hola, mundo!")cerrar(mysocket)

Tipos

Existen varios tipos de tomas de Internet disponibles:

Zócalos de datagramas
Sockets sin conexión , que utilizan el Protocolo de datagramas de usuario (UDP). [4] Cada paquete enviado o recibido en un socket de datagramas se direcciona y enruta de forma individual. El orden y la confiabilidad no están garantizados con los sockets de datagramas, por lo que múltiples paquetes enviados desde una máquina o proceso a otro pueden llegar en cualquier orden o pueden no llegar en absoluto. Puede ser necesaria una configuración especial para enviar transmisiones en un socket de datagramas. [5] Para recibir paquetes de transmisión, un socket de datagramas no debe estar vinculado a una dirección específica, aunque en algunas implementaciones, los paquetes de transmisión también pueden recibirse cuando un socket de datagramas está vinculado a una dirección específica. [6]
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 e informar errores. Un socket de flujo transmite datos de manera confiable , en orden y con capacidades fuera de banda . En Internet, los sockets de flujo generalmente se implementan utilizando TCP para que las aplicaciones puedan ejecutarse en cualquier red que utilice el protocolo TCP/IP.
Zócalos sin procesar
Permite 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. Al leer desde un socket sin procesar, los encabezados generalmente se incluyen. Al transmitir paquetes desde un socket sin procesar, 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 Berkeley, admiten sockets sin formato. Windows XP se lanzó en 2001 con compatibilidad con sockets sin formato implementada en la interfaz Winsock , pero tres años después, Microsoft limitó la compatibilidad con sockets sin formato de Winsock debido a problemas de seguridad. [7]
Los sockets sin formato se utilizan en aplicaciones relacionadas con la seguridad, como Nmap . Un caso de uso de los sockets sin formato es la implementación de nuevos protocolos de capa de transporte en el espacio de usuario . [8] Los sockets sin formato 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 otras cosas, por la utilidad ping . [9]

Otros tipos de sockets se implementan sobre otros protocolos de transporte, como la Arquitectura de Red de Sistemas [10] y los 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 aplicación se denominan servidores y crean sockets al iniciarse que están en estado de escucha . Estos sockets esperan iniciativas de los programas cliente .

Un servidor TCP puede atender a varios clientes simultáneamente creando un socket exclusivo y dedicado para cada conexión de cliente en un nuevo proceso secundario o subproceso de procesamiento para cada cliente. Estos se encuentran en estado establecido cuando se establece una conexión virtual de socket a socket o circuito virtual (VC), también conocida como sesión TCP , con el socket 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 secundario del servidor, que atiende 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 diferentes tuplas de pares de sockets.

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 de manera secuencial 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 (API) de redes.

Pares de conectores

Los sockets locales y remotos que se comunican se denominan pares de sockets . Cada par de sockets se describe mediante una tupla de 4 única que consta de direcciones IP de origen y destino y números de puerto, es decir, direcciones de socket locales y remotos. [11] [12] Como se mencionó anteriormente, en el caso TCP, un par de sockets está asociado en cada extremo de la conexión con una tupla de 4 única.

Historia

El término socket se remonta a la publicación de RFC 147 en 1971, cuando se utilizó 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 una API. Sin embargo, recién 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 .

En 1987, AT&T introdujo la interfaz de capa de transporte (TLI) basada en STREAMS en UNIX System V Release 3 (SVR3) [13] y continuó en Release 4 (SVR4) [14] .

Otras implementaciones tempranas fueron escritas para TOPS-20 , [15] MVS , [15] VM , [15] IBM-DOS (PCIP). [15] [16]

Tomas de corriente en equipos de red

El socket es principalmente un concepto utilizado en la capa de transporte del conjunto de protocolos de Internet o la capa de sesión del modelo OSI . Los equipos de red como los enrutadores , que funcionan en la capa de Internet , y los conmutadores , que funcionan en la capa de enlace , no requieren implementaciones de la capa de transporte. Sin embargo, los cortafuegos de red con estado , los traductores de direcciones de red y los servidores proxy realizan un seguimiento de los pares de sockets activos. En los conmutadores multicapa y el soporte de calidad de servicio (QoS) en los enrutadores, los flujos de paquetes se pueden identificar extrayendo información sobre los pares de sockets.

Los sockets sin formato suelen estar disponibles en equipos de red y se utilizan para protocolos de enrutamiento como IGRP y OSPF , y para el Protocolo de mensajes de control de Internet (ICMP).

Véase también

Referencias

  1. ^ Guía complementaria de CCNA 1 y 2 del programa Cisco Networking Academy, tercera edición revisada, pág. 480, ISBN  1-58713-150-1
  2. ^ RFC  147
  3. ^ Jack Wallen (22 de enero de 2019). "Introducción al Comando SS".
  4. ^ VS Bagad, IA Dhotre (2008), Redes informáticas (quinta edición revisada, edición de 2010), Technical Publications Pune, pág. 52
  5. ^ SO_BROADCAST, Microsoft , consultado el 12 de diciembre de 2019
  6. ^ Clase DatagramSocket, Oracle , consultado el 12 de diciembre de 2019
  7. ^ Ian Griffiths para IanG on Tap. 12 de agosto de 2004. Los sockets sin formato desaparecieron en XP SP2
  8. ^ "raw(7): sockets IPv4 sin procesar - Página del manual de Linux". die.net .
  9. ^ "Preguntas frecuentes sobre redes IP sin procesar". faqs.org .
  10. ^ "www-306.ibm.com - Guía de AnyNet sobre sockets a través de SNA". Archivado desde el original el 3 de mayo de 2008. Consultado el 7 de septiembre de 2006 .
  11. ^ books.google.com - Programación de redes UNIX: La API de redes de sockets
  12. ^ books.google.com - Diseño de rootkits BSD: una introducción al hackeo del kernel
  13. ^ (Buen corazón 1994, pág. 11) harv error: no target: CITEREFGoodheart1994 (help)
  14. ^ (Goodheart 1994, pág. 17) harv error: no target: CITEREFGoodheart1994 (help)
  15. ^ abcd "historyofcomputercommunications.info - Libro: 9.8 TCP/IP y XNS 1981 - 1983". Archivado desde el original el 17 de junio de 2018. Consultado el 18 de febrero de 2011 .
  16. ^ El ordenador de escritorio como participante de una red.pdf 1985

Lectura adicional

  • Jones, Anthony; Ohlund, Jim (2002). Programación de redes para Microsoft Windows . Microsoft Press. ISBN 0-7356-1579-9.
  • Cómo funcionan los sockets - Documentación de IBM
  • Programación de servidores con sockets TCP/IP [ enlace roto ]
  • Guía de programación de redes de Beej
  • 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 los Raw Sockets
  • Ejemplos en lenguaje C de sockets sin procesar de Linux para IPv4 e IPv6: ejemplos en lenguaje C de sockets sin procesar de IPv4 e IPv6 para Linux de David Buchan.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Network_socket&oldid=1249154752#Stream_socket"