Articulo de referencia

socket de red

Un socket de red es una estructura de software dentro de un nodo de red que sirve como punto final para enviar y recibir datos a través de la red. La estructura y las propiedade...

Un socket de red es una estructura de software dentro de un nodo de red 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 ú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 usa con mayor frecuencia en el contexto del conjunto de protocolos de Internet y, por lo tanto, también se le suele llamar socket de Internet . En este contexto, un socket se identifica externamente ante otros hosts mediante 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 referirse al punto final de software de la 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 hembra eléctrico , un dispositivo de hardware para la comunicación entre nodos interconectados mediante un cable eléctrico . De manera similar, el término puerto se refiere a los puntos finales físicos externos de un nodo o dispositivo.

La interfaz de programación de aplicaciones (API) de 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 la aplicación lo almacena para su uso en cada operación de lectura y escritura en el canal de comunicación.

Al crearse mediante 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 accesible 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 utilizados en Internet, el término socket de red suele referirse al uso con el Protocolo de Internet (IP). Por lo tanto, también se le suele llamar socket de Internet .

Direcciones de socket

Una aplicación puede comunicarse con un proceso remoto intercambiando datos mediante TCP/IP, conociendo 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 identificador de acceso a la red para el 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 aplicación la utilice.

Implementación

Una pila de protocolos , generalmente proporcionada por el sistema operativo (en lugar de ser una biblioteca independiente, por ejemplo), es un conjunto de servicios que permite a los procesos comunicarse 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 las cabeceras del protocolo IP y de transporte, y eliminando dichas cabeceras de los datos de la aplicación.

La interfaz de programación de aplicaciones (API) que los programas utilizan para comunicarse con la pila de protocolos, mediante sockets de red, se denomina API de sockets . El desarrollo de programas de aplicación que utilizan esta API se conoce como 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 este estándar, los sockets son un tipo de descriptor de archivo , debido a la filosofía de Unix de que "todo es un archivo" y a las analogías entre sockets y archivos. Ambos tienen funciones para leer, escribir, abrir y cerrar. En la práctica, las diferencias ponen a prueba 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 específica . Los sockets no necesitan tener una dirección de origen, por ejemplo, para solo 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 aplicación correspondiente .

El término socket suele referirse específicamente a un socket de Internet o socket TCP. Un socket de Internet se caracteriza, como mínimo, por lo siguiente:

  • dirección de socket local, que consta de la dirección IP local y (para TCP y UDP, pero no para 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), 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 un socket difieren entre autores. En la Solicitud de Comentarios de la IETF , en los 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 mediante 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 la RFC 147, [ 2 ] tal como se relacionaba con la red ARPA en 1971, "el socket se especifica como un número de 32 bits donde los sockets pares identifican los sockets receptores y los sockets impares identifican los sockets emisores". Sin embargo, hoy en día, las comunicaciones de socket son bidireccionales.

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

Herramientas

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

Ejemplo

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

paquete org.wikipedia.examples ;import java.io.IOException ; import java.io.PrintWriter ; import java.net.InetAddress ; import java.net.Socket ; import java.net.SocketException ;public class Main { public static void main ( String [] args ) { InetAddress address = InetAddress . getByName ( "203.0.113.0" );// IP = 203.0.113.0, puerto = 80 // El Socket se cierra automáticamente al final del bloque try // java.net.Socket usa TCP, mientras que java.net.DatagramSocket usa UDP try ( Socket socket = new Socket ( address , 80 )) { // escribe en el flujo de salida del socket, con vaciado automático habilitado PrintWriter socketOut = new PrintWriter ( socket . getOutputStream (), true ); socketOut . println ( "¡Hola, mundo!" ); } catch ( SocketException e ) { System . out . printf ( "Se produjo un error al acceder al socket: %s%n" , e . getMessage ()); e . printStackTrace (); } catch ( IOException e ) { System . out . printf ( "Se produjo un error al escribir en el socket: %s%n" , e . getMessage ()); e . printStackTrace (); } } }

El uso tradicional de sockets de Berkeley en C se vería así:

#include <stdio.h> #include <stdlib.h> #include <string.h>#include <arpa/inet.h> #include <unistd.h>int main () { char message [] = "¡Hola, mundo!" ;// Crear socket int sockfd = socket ( AF_INET , SOCK_STREAM , 0 ); if ( sockfd == -1 ) { fprintf ( stderr , "¡Error al crear el socket! \n " ); return 1 ; }// Establecer la dirección del servidor struct sockaddr_in server_addr = { . sin_family = AF_INET , // Familia de direcciones . sin_port = htons ( 80 ), // Número de puerto (convertido al orden de bytes de red) . sin_addr . s_addr = inet_addr ( "203.0.113.0" ), // Dirección IP };// Conectar con el servidor if ( connect ( sockfd , ( struct sockaddr * ) & server_addr , sizeof ( server_addr )) == -1 ) { fprintf ( stderr , "¡Error de conexión! \n " ); return 1 ; }// Enviar mensaje send ( sockfd , message , strlen ( message ), 0 ); printf ( "Mensaje enviado! \n " );// Cerrar socket close ( sockfd ); return 0 ; }

Tipos

Existen varios tipos de tomas de internet:

sockets 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 dirige y enruta individualmente. El orden y la fiabilidad no están garantizados con los sockets de datagramas, por lo que varios paquetes enviados de una máquina o proceso a otro pueden llegar en cualquier orden o no llegar en absoluto. Puede ser necesaria una configuración especial para enviar difusiones en un socket de datagramas. [ 5 ] Para recibir paquetes de difusión, un socket de datagramas 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 socket de datagramas está vinculado a una dirección específica. [ 6 ]
Sockets de transmisión
Los sockets orientados a la conexión utilizan el Protocolo de Control de Transmisión (TCP), el Protocolo de Control de Transmisión 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 forma fiable , en orden y con capacidades fuera de banda . En Internet, los sockets de flujo se implementan normalmente mediante 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 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 (p. ej., TCP, UDP), y el usuario del socket desconoce la existencia de las cabeceras de protocolo que se transmiten con la carga útil. Al leer desde un socket sin procesar, las cabeceras suelen estar incluidas. Al transmitir paquetes desde un socket sin procesar, la adición automática de una cabecera 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 procesar. Windows XP se lanzó en 2001 con soporte para sockets sin procesar implementado en la interfaz Winsock , pero tres años después, Microsoft limitó el soporte para sockets sin procesar de Winsock debido a problemas de seguridad. [ 7 ]
Los sockets sin procesar se utilizan en aplicaciones relacionadas con la seguridad, como Nmap . Un caso de uso para los sockets sin procesar es la implementación de nuevos protocolos de capa de transporte en el espacio de usuario . [ 8 ] 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 el Protocolo de ruta más corta abierta (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 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 a las aplicaciones se denominan servidores y, al iniciarse, crean sockets que se encuentran 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 dedicado único para cada conexión de cliente en un nuevo proceso hijo o hilo 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 conocido como sesión TCP , con el socket remoto, proporcionando 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 hijo, que a su vez 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 o el número de puerto del cliente) es diferente; es decir, porque tienen pares de sockets diferentes .

Los sockets UDP no tienen un estado establecido , ya que el protocolo no requiere conexión . Un proceso de servidor UDP gestiona 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 únicamente por la dirección local, aunque cada mensaje tiene una dirección remota asociada que se puede obtener de cada datagrama mediante la interfaz de programación de aplicaciones (API) de red.

pares de enchufes

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

Historia

El término socket se remonta a la publicación del 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 la distribución de software de Berkeley (BSD) se originó con el sistema operativo Unix 4.2BSD como una API. Sin embargo, no fue hasta 1989 que la UC Berkeley pudo lanzar versiones de su sistema operativo y biblioteca de red libres de las restricciones de licencia de Unix , protegido por derechos de autor de AT&T .

Hacia 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 se escribieron para TOPS-20 , [ 15 ] MVS , [ 15 ] VM , [ 15 ] IBM-DOS (PCIP) . [ 15 ] [ 16 ]

Tomas de corriente en equipos de red

El concepto de socket se utiliza principalmente en la capa de transporte del conjunto de protocolos de Internet o en 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 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 en la compatibilidad con la calidad de servicio (QoS) de los enrutadores, los flujos de paquetes pueden identificarse extrayendo información sobre los pares de sockets.

Los sockets sin formato suelen estar disponibles en los 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. Programa de la Academia de Redes de Cisco, Guía complementaria CCNA 1 y 2, 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" . Archivado del original el 5 de agosto de 2019. Consultado el 5 de agosto de 2019 .
  4. VS Bagad, IA Dhotre (2008), Redes de computadoras (5.ª edición revisada, ed. 2010), Publicaciones técnicas Pune, pág. 52  
  5. SO_BROADCAST , Microsoft , consultado el 12 de diciembre de 2019
  6. Clase DatagramSocket , Oracle , archivado del original el 12/12/2019 , recuperado el 12/12/2019
  7. Ian Griffiths para IanG on Tap. 12 de agosto de 2004. Los sockets sin procesar desaparecieron en XP SP2. Archivado el 9 de febrero de 2021 en Wayback Machine.
  8. "raw(7): IPv4 raw sockets - Linux man page" . die.net . Archivado del original el 07-09-2016 . Recuperado el 11-12-2017 .
  9. "Preguntas frecuentes sobre redes IP sin procesar" . faqs.org . Archivado del original el 19 de enero de 2012. Consultado el 11 de diciembre de 2017 .
  10. "www-306.ibm.com - Guía AnyNet para sockets sobre SNA" . Archivado del 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: Introducción al hacking del kernel
  13. ( Goodheart 1994 , p. 11) harv error: no target: CITEREFGoodheart1994 ( help ) 
  14. ( Goodheart 1994 , p. 17) harv error: no target: CITEREFGoodheart1994 ( help ) 
  15. 1 2 3 4 "historyofcomputercommunications.info - Libro: 9.8 TCP/IP y XNS 1981 - 1983" . Archivado del original el 17 de junio de 2018. Recuperado el 18 de febrero de 2011 .
  16. El ordenador de sobremesa como participante en una red.pdf 1985

Lecturas adicionales

  • Jones, Anthony; Ohlund, Jim (2002). Programación de redes para Microsoft Windows . Microsoft Press. ISBN 0-7356-1579-9.
  • Cómo funcionan los sockets. Archivado el 2 de mayo de 2023 en Wayback Machine - Documentación de IBM.
  • Programación de servidores con sockets TCP/IP
  • Guía de Beej para la programación de redes. Archivada el 10 de abril de 2011 en la Wayback Machine.
  • 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 sockets sin procesar. Archivado el 24/02/2021 en Wayback Machine.
  • 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 para IPv4 e IPv6 en Linux.
Obtenido de " https://en.wikipedia.org/w/index.php?title=Network_socket&oldid=1341705620 "