¿Qué es un zócalo?


48

¿Podría alguien explicarme qué es un enchufe? Lo veo en muchos acrónimos en el contexto de SSL, etc.

Además, ¿por qué se llama un zócalo? ¿Es simplemente porque fue el nombre que inventaron? ¿O fue el primer nombre que se les ocurrió?


99
En términos simples: un enchufe es un teléfono. Es lo que tienes en la mano lo que te permite tener una conversación con otro teléfono. La analogía se rompe un poco: la mayoría de las conversaciones telefónicas son entre pares. Las conexiones de socket son cliente a servidor. El cliente (como, entre otros, el software de la estación de trabajo como los navegadores) se conecta a un servidor (como un servidor web, servidor de archivos, servidor de autenticación u otro). Otra falla en la analogía: cuando cierra una conexión de socket, el socket se destruye y debe crear un nuevo socket antes de poder establecer una nueva conexión.
G-Man dice 'Reincorporar a Monica' el

No es tan malo para una analogía. Un servidor es solo un centro de llamadas y puede tener cientos de llamadas activas al mismo tiempo.
MSalters

Respuestas:


42

Un socket es solo un punto final lógico para la comunicación. Existen en la capa de transporte. Puede enviar y recibir cosas en un socket, puede vincular y escuchar un socket. Un socket es específico de un protocolo, máquina y puerto, y se direcciona como tal en el encabezado de un paquete.

Las guías de Beej para la programación de redes y la comunicación entre procesos tienen buena información sobre cómo usar sockets e incluso responden esta pregunta exacta .


65

En los términos más simples, un socket es un pseudoarchivo que representa una conexión de red. Una vez que se ha creado un socket (utilizando las primitivas adecuadas y los parámetros adecuados para identificar al otro host), las escrituras en el socket se convierten en paquetes de red que se envían, y los datos recibidos de la red se pueden leer desde el socket.

En un aspecto, los sockets son muy similares a las tuberías: se parecen a los archivos de los programas que los usan, pero no resultan en lectura o escritura en un disco; más bien, permiten comunicarse con otro programa (local en el caso de tuberías, y posiblemente remoto en el caso de enchufes). También ofrecen, como usted menciona, comunicación bidireccional (al igual que un par de tuberías conectadas correctamente).

Finalmente, es común que los programas en una sola máquina se comuniquen utilizando protocolos de red estándar, como TCP; sería un desperdicio ir hasta el hardware de la red (si es que lo hay), calcular sumas de verificación, etc., solo para volver al mismo host: ahí es donde entran los sockets de dominios Unix. Son muy parecidos a los sockets normales, excepto conectan procesos en el mismo host en lugar de procesos remotos, y no intentan utilizar ningún recurso de red. De esta manera, son un medio de comunicación entre procesos.

Como se mencionó en tripleee, en el curso de la historia de BSD, las tuberías se introdujeron antes que los enchufes, y se volvieron a implementar usando enchufes una vez que existieron. La misma referencia, The Design and Implementation of the FreeBSD Operating System , menciona que las tuberías se volvieron a una implementación sin socket por razones de rendimiento: esto ciertamente subraya el hecho de que las tuberías comparten similitudes.


3
Tal vez también mencione que las tuberías son anteriores a los zócalos, pero una vez que se agregó la interfaz del zócalo a Unix, tenía mucho sentido reimplementar las tuberías utilizando zócalos locales.
tripleee

@tripleee: Ese es un gran punto histórico. ¿Te importa proporcionar una referencia?
dhag el

La búsqueda rápida en Google aparece en la página 40 de Diseño e implementación del sistema operativo FreeBSD ; el texto menciona este cambio en 4.2BSD pero también aclara que ya no es así, por razones de rendimiento.
tripleee

Excelente, agregaré esto a mi respuesta.
dhag

La mejor respuesta tecno de todos
chaosguru

7

Un zócalo una abstracción. Proporciona una interfaz para que las aplicaciones utilicen un recurso del sistema (en este caso, la conexión de red) de manera que el sistema operativo pueda mediar y organizar el uso de un recurso limitado por cualquier número de aplicaciones.

Si los datos que se envían a través del socket podrían considerarse como sobres de correo, entonces el socket sería su casilla de correo. Adjunta un buzón (socket) a su casa (programa) y coloca su correo saliente (datos) en él. A una hora programada, el cartero (sistema operativo) aparece y recoge su correo saliente y deja el correo entrante en el mismo buzón. Su correo saliente se transmite en su nombre al destinatario a través del camión del cartero (conexión de red) junto con el correo de todos sus vecinos. Esto le permite mantener correspondencia con personas lejanas sin la necesidad del gasto, el tiempo, la dificultad, etc. de entregar la carta usted mismo.

En cuanto a por qué se les llama 'enchufes', la noción de que los inventores pueden llamarlo como quieran probablemente juega un papel importante allí. Sin embargo, no es un mal nombre en mi opinión :)


7

Ahora que es

Un zócalo o "zócalo" puede ser varias cosas:

En primer lugar, es un modelo de pensamiento y una interfaz de programación de aplicaciones (API) . Eso significa que tiene un conjunto de reglas que debe seguir y un conjunto de funciones que puede usar para escribir programas que hacen algo, de acuerdo con un contrato especificado con precisión. En este caso particular, algo significa intercambiar datos con otro programa.

La API de sockets abstrae ampliamente los detalles de la "comunicación" en general. Encapsula con quién habla y cómo, a través de una forma de cortador de galletas (casi) consistente e idéntica.
Puede crear sockets en diferentes "dominios" (como, por ejemplo, un "socket de Unix" o un "socket de Internet") y de diferentes tipos de comunicación (por ejemplo, un socket de "datagrama" o un socket de "flujo") y hablar con diferentes destinatarios , y todo funciona exactamente igual (bueno, 99%, obviamente hay pequeñas diferencias que tendrá que tener en cuenta).

No necesita saber (¡y ni siquiera quiere saber!) Si habla con otro programa en la misma computadora o en una computadora diferente, o si hay una red IPv4 o IPv6 entre esas computadoras, o tal vez alguna otra protocolo del que nunca has oído hablar.

sockettambién es el nombre de la función de biblioteca (o syscall) que crea "el socket ", que es un tipo especial de archivo (todo en Unix es un archivo).

¿Cómo se compara con ...

los enchufes caen en la misma categoría que las tuberías y las tuberías con nombre

Una tubería es un medio de comunicación unidireccional entre un lector y un escritor (ambos son programas) en la misma computadora. Simula una secuencia de datos (como, por ejemplo, TCP).
Es decir, no existen "mensajes" o "bloques de datos" individuales desde el punto de vista de la tubería. Puede copiar cualquier cantidad de datos en "un extremo", y alguien más puede leer cualquier cantidad de datos (no necesariamente lo mismo, y no necesariamente de una vez) en el "otro extremo" en el mismo orden de bytes que usted lo empujó

Una tubería con nombre es, bueno, simplemente una tubería que posee un nombre en el sistema de archivos . Es decir, es algo que se ve y se comporta como un archivo, aparece en el listado del directorio y puede abrirlo, escribir en él, etc. Tenga en cuenta que también puede crear archivos especiales de socket (que sería un socket con nombre) .

Un zócalo, por otro lado, es un medio de comunicación bidireccional ("dúplex"), lo que significa que puede escribir y leer desde el mismo zócalo, y no necesita dos zócalos separados para una comunicación bidireccional.
Además, un socket puede actuar como un flujo (idéntico a una tubería), o puede enviar mensajes discretos y poco confiables, o puede enviar mensajes discretos y ordenados (los dos primeros funcionan en cualquier dominio, el último solo en "dominio unix" ) Puede enviar mensajes (o simular una transmisión) a alguien en una computadora completamente diferente. Un socket puede incluso hacer una forma de comunicación uno a muchos (multidifusión) en algunas condiciones.

Con eso en mente, está claro que los enchufes hacen algo mucho más complicado y generalmente tienen más sobrecarga que las tuberías (¡que básicamente no son más que un simple memcpyay desde un búfer!), Pero si creas enchufes locales (es decir, en el mismo computadora), el sistema operativo generalmente aplica una ruta rápida muy optimizada, por lo que realmente no hay mucha diferencia.

comunicación entre procesos a veces mencionada con respecto a las redes

Sí, los sockets son una forma posible de comunicación entre procesos (la memoria compartida y las canalizaciones son ejemplos de alternativas). Todos al mismo tiempo, se están utilizando para "redes", como se explicó anteriormente.


1

Para udp o tcp sobre IP,

Una dirección de socket es la combinación de una dirección IP y un número de puerto.

Una dirección IP es la dirección de una máquina en Internet, p. Ej. unix.stackexchange.com has address 198.252.206.140

Sin embargo, cada máquina debe poder proporcionar más de un servicio, por lo que la mayoría de las máquinas proporcionarán http (páginas web) en el puerto 80 y ssh en el puerto 22, etc.

Entonces el unix.stackexchange.com:80puerto 80de unix.stackexchange.com(un socket) es el punto de acceso de este sitio web.

Sin embargo, hay otros tipos de enchufes, vea los comentarios a continuación.


55
tcp / ip es solo un tipo de socket. Hay otros que no tienen nada que ver con tcp / ip.
psusi

¿Cuántos tipos diferentes de enchufes hay?
Abdul Al Hazred

1
@AbdulAlHazred, conozco cuatro tipos comunes que se usan con las redes IP, lo mismo con ip6, dos con Unix y dos con IPX. No he mirado a ax25, atm o appletalk. Hay otros protocolos compatibles con Linux, y hay protocolos que Linux no admite. En la mayoría de los casos, cada protocolo tiene sockets de flujo (tcp) y datagrama (udp). Los sockets sin formato también son comunes, e imcp también puede tener una interfaz de sockets.
hildred 01 de

El punto es que esta respuesta es incompleta porque solo cubre un tipo de socket, y es engañoso porque representa sockets en general como si siempre fueran sockets de red, y específicamente AF_INETsockets IP ( ).
tripleee

0

Creo que preguntaste sobre las redes. Por lo tanto, los servicios TCP usan sockets como punto de comunicación y están formados por una dirección IP, protocolo y número de puerto.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.