stringtranslate.com

Toma de red

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 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 socket de red se utiliza más comúnmente en el contexto del conjunto de protocolos de Internet y, por lo tanto, a menudo también se lo denomina 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 del software de comunicación entre procesos (IPC) interna del nodo, 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 conocido como descriptor de socket . En sistemas operativos tipo 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 socket 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 servicios 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 con el Protocolo de Internet (IP). Por eso a menudo también se le llama enchufe 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 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 use 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 del 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 redes . 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 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 manera muy 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 se puede usar para recibir datos enviados a esa dirección. Según esta dirección, los sockets de Internet entregan los paquetes de datos entrantes al proceso de aplicación correspondiente .

Socket a menudo se refiere específicamente a un socket de Internet o un socket TCP. Una toma de internet se caracteriza mínimamente por lo siguiente:

Definición

Las distinciones entre un socket (representación interna), un descriptor de socket (identificador abstracto) y una 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 socket difieren entre los autores. En la Solicitud de comentarios del 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, [2] en relación con la red ARPA en 1971, "el socket se especifica como un número de 32 bits con sockets pares que identifican los sockets receptores y sockets impares que identifican los sockets emisores". Hoy en día, 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 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 "¡Hola, mundo!" vía TCP al puerto 80 del host con dirección 203.0.113.0. Ilustra la creación de un socket (getSocket), conectándolo al host remoto, enviando la cadena y finalmente cerrando el socket:

Socket misocket = getSocket(tipo = "TCP")conectar(mysocket, dirección = "203.0.113.0", puerto = "80")enviar(mysocket, "¡Hola mundo!")cerrar (misocket)

Tipos

Están disponibles varios tipos de toma de Internet:

Conectores 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 datagrama se direcciona y enruta individualmente. 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 no llegar en absoluto. Es posible que se requiera una configuración especial para enviar transmisiones en un socket de datagrama. [5] Para recibir paquetes de difusión, un socket de datagrama no debe estar vinculado a una dirección específica, aunque en algunas implementaciones, los paquetes de transmisión también se pueden recibir cuando un socket de datagrama está vinculado a una dirección específica. [6]
Tomas de corriente
Sockets orientados a 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 registros, 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 transmisión generalmente se implementan utilizando TCP para que las aplicaciones puedan ejecutarse en cualquier red utilizando el protocolo TCP/IP.
Enchufes crudos
Permita el envío y 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 según 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, los encabezados generalmente se incluyen. 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 Berkeley , admiten sockets sin formato. Windows XP se lanzó en 2001 con soporte de socket sin formato implementado en la interfaz de Winsock , pero tres años después, Microsoft limitó el soporte de socket 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 sockets sin formato es la implementación de nuevos protocolos de capa de transporte en el espacio del 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 Abrir primero la ruta más corta (OSPF), y en el Protocolo de mensajes de control de Internet (ICMP), entre otros. cosas, por la utilidad ping . [9]

Otros tipos de sockets se implementan sobre otros protocolos de transporte, como Systems Network Architecture [10] 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 al inicio que se encuentran en estado de escucha . Estos sockets están esperando iniciativas de los programas clientes .

Un servidor TCP puede servir a varios clientes simultáneamente creando un socket dedicado único para cada conexión de cliente en un nuevo proceso hijo o subproceso de procesamiento para cada cliente. Estos están en el estado establecido cuando se establece una conexión virtual o circuito virtual (VC) de socket a socket , también conocido 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 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, porque 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 forma 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 red.

Pares de enchufes

Los sockets locales y remotos que se comunican se denominan pares de sockets . Cada par de sockets 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 socket locales y remotas. [11] [12] Como se analizó anteriormente, en el caso de TCP, un par de sockets está asociado en cada extremo de la conexión con una única tupla de 4.

Historia

El término socket data de la publicación del RFC 147 en 1971, cuando se utilizaba en ARPANET. La mayoría de las implementaciones modernas de sockets se basan en 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, sólo en 1989 la 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 (SVR3). [13] y continuó en la Versión 4 (SVR4). [14]

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

Enchufes en equipos de red.

El socket es principalmente un concepto utilizado en la capa de transporte del conjunto de protocolos de Internet o 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 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).

Ver también

Referencias

  1. ^ Programa Cisco Networking Academy, guía complementaria CCNA 1 y 2 revisada, tercera edición, P.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 de computadoras (quinta edición revisada, edición de 2010), Publicaciones técnicas Pune, p. 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 de barril. 12 de agosto de 2004. Los sockets sin formato desaparecieron en XP SP2
  8. ^ "raw(7): sockets IPv4 sin formato - página de manual de Linux". die.net .
  9. ^ "Preguntas frecuentes sobre redes IP sin formato". preguntas frecuentes.org .
  10. ^ "www-306.ibm.com - Guía AnyNet para sockets sobre 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 red UNIX: API de red de sockets
  12. ^ books.google.com - Diseño de rootkits BSD: introducción al pirateo del kernel
  13. ^ (Buen corazón 1994, pag.11)
  14. ^ (Buen corazón 1994, pag.17)
  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. ^ La computadora de escritorio como participante de la red.pdf 1985

Otras lecturas

enlaces externos