¿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ó?
networking
history
terminology
socket
chrisjlee
fuente
fuente
Respuestas:
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 .
fuente
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.
fuente
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 :)
fuente
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.
socket
tambié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 ...
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
memcpy
ay 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.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.
fuente
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:80
puerto80
deunix.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.
fuente
AF_INET
sockets IP ( ).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.
fuente