Explicación simple de los sockets Unix

20

Puedo buscar y ya he visto la entrada de wikipedia y en otros lugares, pero aunque tengo algo de experiencia en programación, realmente no entiendo el concepto. ¿Puede tratarme como un niño de 10 años y darme una explicación clara sobre la comunicación de socket?

Elzo Valugi
fuente
Escriba algunas pequeñas aplicaciones de prueba usándolas. Ni siquiera necesita dos máquinas, solo dos pequeñas aplicaciones para comenzar. Bingo.
Patrick Hughes
La Guía de programación de redes de Beej parece ser un texto de introducción muy popular a los sockets de Unix, aunque no puedo decir que me guste.
Nemanja Trifunovic
Ya voté por la respuesta de @DanielPittman, si tuviera que escribir, habría escrito la misma respuesta; Sin embargo, si quieres más ayuda, te extendería. Edite su pregunta, ponga algunos antecedentes sobre lo que sabe y lo que no sabe y también, hágame saber si está buscando ayuda sobre cómo usarlo, cómo funcionan en su interior, o teórico (diseño de protocolo) o si está intentando evaluar para algún propósito?
Dipan Mehta
Aquí hay un libro: Unix Network Programming . Cualquiera en la tierra que respondiera a esta pregunta, habría aprendido de esta madre. Lea este libro, su pregunta en sí misma mejorará.
Dipan Mehta
¿Te refieres a los enchufes BSD? Los sockets Unix solo funcionan localmente.
imel96

Respuestas:

15

Déjame darte un ejemplo: di que quieres comunicarte / chatear con tu amigo, que no vive en tu dirección. Para que eso suceda, debe establecer un "canal de comunicación". Digamos que quieres hacer esta comunicación usando teléfonos. Usted sabe que hay una red de líneas telefónicas en la ciudad que se extiende a todas las casas.

Ahora, hay una toma de teléfono en su casa y una en la casa de sus amigos. Para que la comunicación tenga lugar, usted y su amigo tienen que conectarse a la red conectando su teléfono a la toma de corriente, en ambos extremos de la comunicación. Los enchufes en la programación son los mismos, conceptualmente, que los enchufes del teléfono.

En programación, tiene dos procesos (programas en ejecución) que desean comunicarse entre sí. Para eso, tienen que establecer un vínculo de comunicación entre ellos. Nuevamente, hay una red disponible, solo necesitan conectarse a esta red utilizando algún tipo de sockets. Los sockets Unix son uno de esos sockets que proporciona esta conectividad / capacidad de conexión a la red. Por lo tanto, en cada uno de los dos programas, tendrá un fragmento de código que hace el trabajo de conectarse a la red a través de sockets.

El resto son detalles.

Nazar Merza
fuente
2
Votaría en contra de esto si tuviera suficiente reputación. Su texto no explica cómo funciona el socket. Solo el mismo texto general que en Wikipedia. ¿Cómo escucha el zócalo ? ¿Cómo puede escuchar la conexión de su teléfono ?
Verde
21

Los zócalos Unix son un zócalo bidireccional, al igual que un zócalo basado en IP, con el que probablemente esté familiarizado, y algo similar a una tubería, con la que probablemente esté familiarizado.

Tienen un pequeño conjunto de propiedades interesantes:

  • Están en el dominio del "host local" solamente; no puede acceder a ellos a través de la red, solo en la máquina local.
  • Puede crearlos en modo "secuencia", donde simplemente pasan datos como una tubería como una secuencia de bytes.
  • Puede crearlos en modo "datagrama", donde retienen los límites entre las operaciones de envío. Esto le permite retener el encuadre sin construir su propio protocolo de encuadre encima de una secuencia de bytes.
  • Utilizan el sistema de archivos, o en Linux, un "espacio de nombres abstracto", como su "dirección"
  • Es posible que pueda hacerse pasar por el otro extremo, identificar de forma segura el software de conexión o pasar identificadores de archivo a través del zócalo, según su sistema operativo.

Esencialmente, son el equivalente de cualquier otro zócalo: tienen propiedades ligeramente más interesantes que las tuberías, pero de lo contrario no son radicalmente diferentes. Por lo general, tienen una latencia IPC más alta que una tubería y, a menudo, amortiguadores más grandes, aunque es posible que pueda ajustar eso, y depende de la plataforma.

La última propiedad interesante para recordar es que usan el sistema de archivos como su espacio de nombres, por lo que son como una tubería con nombre, en lugar de una tubería anónima, en ese software sin relación previa puede comunicarse. (Los sockets abstractos del espacio de nombres son los mismos, pero la ruta del "archivo" no tiene que existir).

No hay nada más profundo que eso: no tienen ninguna propiedad oculta súper secreta que los haga radicalmente diferentes de una tubería típica o una conexión TCP a localhost.

Daniel Pittman
fuente
3
Gracias pero todavía lo encuentro complicado y lleno de argot.
Elzo Valugi
2
Por favor, no se ofenda con este intento en una respuesta de una línea, para ver si eso ayuda mejor: "¿Sabe cómo funcionan los sockets TCP / IP y UDP / IP? Estos son los mismos, solo sin la parte IP".
Daniel Pittman
No me ofende, solo quiero entender. Gracias. Los estudiaré más en detalle.
Elzo Valugi
44
La definición de un término mediante el uso de ese término (es decir, "los sockets Unix son un socket bidireccional") no explica nada a alguien que no sabe para qué es un socket.
Bryan Oakley