¿Alguien podría explicarme qué es un socket? Lo veo en muchos acrónimos en el contexto de SSL, etc.
Además, ¿por qué se llama socket? ¿Es simplemente porque fue el nombre que inventaron? ¿O fue el primer nombre que se les ocurrió?
Comentarios
- En términos simples ‘ s: un enchufe es un teléfono. Es ‘ lo que tienes en la mano y 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 de 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, un servidor de archivos, un servidor de autenticación u otro). Otro defecto 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.
- It ‘ 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.
Responder
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 enlazar 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 Network La programación y la comunicación entre procesos tienen buena información sobre cómo usar sockets, e incluso responde esta pregunta exacta .
Respuesta
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 el 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 ven como archivos para 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 po sible remoto en el caso de enchufes). También ofrecen, como mencionas, comunicación bidireccional (al igual que un par de tuberías correctamente conectadas).
Por último, es común que los programas en una sola máquina se comuniquen mediante protocolos de red estándar, como TCP ; Sería un desperdicio ir hasta el hardware de la red (¡si lo hay!), sumas de comprobación de cómputo, etc., solo para volver al mismo host: ahí es donde entran los sockets de dominios Unix. Son muy parecidos a los sockets normales , excepto que conectan procesos en el mismo host en lugar de procesos remotos, y no intentan utilizar ningún recurso de red en absoluto. De esta manera, son un medio de comunicación entre procesos.
Como mencionó tripleee , en el curso de la historia de BSD, las tuberías se introdujeron antes que los sockets, y se reimplementaron usando sockets una vez que existieron. La misma referencia, El diseño e implementación del sistema operativo FreeBSD , menciona que las tuberías luego fueron revertidos a una implementación sin socket por razones de rendimiento: esto ciertamente subraya el hecho de que las tuberías comparten similitudes.
Comentarios
- Tal vez también mencione que Las tuberías son anteriores a los sockets, pero una vez que se agregó la interfaz del socket a Unix, tuvo mucho sentido t o reimplementar las tuberías usando enchufes locales.
- @tripleee: Ese ‘ es un gran punto histórico. ¿Quiere proporcionar una referencia?
- La búsqueda rápida en Google aparece en la página 40 en El diseño y la implementación del sistema operativo FreeBSD ; el texto menciona este cambio en 4.2BSD pero también aclara que esto ya no es como ‘ se hace, por razones de rendimiento.
- Excelente, I ‘ Agregaré esto a mi respuesta.
- La mejor respuesta tecnológica de todas
Respuesta
Ahora, ¿qué es?
Un socket o «socket» puede ser varias cosas:
En primer lugar, es un pensamiento modelo 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 utilizar para escribir programas que hagan 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, todo a través de una forma de cortador de galletas (casi) consistente e idéntica.
Puede crear sockets en diferentes «dominios» (como p. Ej.un «conector unix» o un «conector de Internet») y de diferentes tipos de comunicación (por ejemplo, un conector de «datagrama» o un conector 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 algún otro protocolo del que nunca haya oído hablar.
socket
es también 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 sockets caen en la misma categoría que las tuberías y tubería de nombre
Una tubería es un medio de o Una forma de comunicación entre un lector y un escritor (ambos son programas) en la misma computadora. Simula un flujo de datos (como, por ejemplo, TCP).
Es decir, no existen «mensajes» ni «bloques de datos» individuales desde el punto de vista de la tubería. Puede copiar cualquier cantidad de datos en «un extremo», y otra persona puede leer cualquier cantidad de datos (no necesariamente los mismos, y no necesariamente de una sola vez) en el «otro extremo» en el mismo orden de bytes en el que los introdujo .
Una tubería nombrada 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 la lista de directorios y puede abrirlo, escribir en él, etc., etc. Tenga en cuenta que también puede crear archivos especiales de socket (que serían un nombre socket).
Un socket, por otro lado, es un medio de 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 zócalo puede actuar como un flujo (idéntico a una tubería ), o puede enviar mensajes discretos, no confiables, o puede enviar mensajes discretos, 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) bajo algunas condiciones.
Con eso en mente, está claro que los sockets hacen algo mucho más complicado y generalmente tienen más gastos generales que las tuberías (que básicamente no son más que un simple memcpy
hacia y desde un búfer), pero si crea sockets locales (es decir, en la misma computadora), el sistema operativo generalmente aplica una ruta rápida altamente optimizada, por lo que realmente no hay mucha diferencia.
comunicación entre procesos a veces se menciona con respecto a las redes
Sí, los sockets son una forma posible de comunicación entre procesos (la memoria compartida y las tuberías son ejemplos de alternativas). Todos al mismo tiempo, se utilizan para «redes», como se explicó anteriormente.
Respuesta
Un conector y una abstracción . Proporciona una interfaz para que las aplicaciones utilicen un recurso del sistema (en este caso, la conexión de red) de una manera que permite al sistema operativo 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 zócalo pudieran considerarse como sobres de correo, entonces el zócalo sería su casilla de correo. Adjunta un buzón (enchufe) a su casa (programa) y coloca su correo saliente (datos) en él. A una hora programada, el cartero (sistema operativo) llega y recoge su correo saliente y deja cualquier 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 que están lejos sin la necesidad de gastar tiempo, dificultad, etc. de entregar la carta usted mismo.
En cuanto a por qué «se les llama» sockets «, bueno, la noción de que los inventores pueden llamarlo como quieran probablemente juega un papel importante allí. Aunque, en mi opinión, no es un mal nombre 🙂
Respuesta
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, por ejemplo 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 unix.stackexchange.com:80
puerto 80
de unix.stackexchange.com
(un enchufe) es el punto de acceso de este sitio web.
Sin embargo, hay otros tipos de conectores, consulte los comentarios a continuación.
Comentarios
- tcp / ip es solo un tipo de enchufe. Hay otros que no tienen nada que ver con tcp / ip.
- ¿Cuántos tipos diferentes de sockets hay?
- @AbdulAlHazred, conozco cuatro tipos comunes que se usan con redes IP, lo mismo con ip6, dos con unix y dos con IPX. No he mirado 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 socket.
- El punto es que esta respuesta es incompleta porque solo cubre un tipo de socket, y es engañosa porque representa los sockets en general como si fueran siempre sockets de red, y específicamente IP (
AF_INET
) sockets.
Respuesta
Creo que preguntaste sobre redes. Por tanto, los servicios TCP utilizan sockets como punto de comunicación y se componen de una dirección IP, un protocolo y un número de puerto.