2009-04-23 7 views
7

Al usar un socket en el dominio UNIX, es aconsejable usar el nombre de ruta para el directorio directorio montado en el disco local. El dominio UNIX solo permite la comunicación entre procesos para el proceso de trabajo en la misma máquina.Dominio AF_UNIX: ¿por qué usar solo nombres de archivos locales?

¿Puede explicarnos la línea anterior? Se trata de un socket en el dominio UNIX.

Gracias!

Respuesta

12

Un socket de dominio Unix o socket IPC (socket de comunicación entre procesos) es un punto final de comunicaciones de datos que es similar a una toma de Internet, pero no utiliza un protocolo de red para la comunicación. Se usa en los sistemas operativos POSIX para la comunicación entre procesos. El término estándar correcto de POSIX es POSIX Local IPC Sockets.

Las conexiones de dominio Unix aparecen como secuencias de bytes, al igual que las conexiones de red, pero todos los datos permanecen dentro de la computadora local. Los sockets de dominio UNIX usan el sistema de archivos como espacio de nombres de direcciones, es decir, los procesos los utilizan como inodos en el sistema de archivos. Esto permite que dos procesos distintos abran el mismo socket para comunicarse. Sin embargo, la comunicación real (el intercambio de datos) no utiliza el sistema de archivos, sino búferes en la memoria del kernel.

Además de enviar datos, los procesos pueden enviar descripciones de archivos a través de una conexión de socket de dominio Unix utilizando las llamadas al sistema sendmsg() y recvmsg().

+0

gracias por la respuesta, por lo que el socket de dominio unix es para la comunicación entre procesos entre dos procesos en el mismo sistema, al igual que cualquier otro mecanismo de ipc como sharedmemory.Al usar el dominio de Unix no podemos hacer la comunicación entre dos máquinas. – mawia

+1

@mawia - eso es correcto. Por ejemplo, puede hablar con el servidor de ventana X local sobre un socket de dominio Unix configurando su variable de entorno DISPLAY a ": 0.0" o sobre un socket TCP/IP configurándolo en "localhost: 0.0". –

+0

Busque AF_INET para que los enchufes IP se comuniquen entre diferentes hosts. – user39113

4

Los puntos finales de los sockets de dominio UNIX están representados por archivos en el sistema de archivos (en lugar de por host/puerto).

Sin embargo, la comunicación entre procesos se realiza dentro del sistema local y no da como resultado que un archivo buscable se almacene en ningún lugar.

La ventaja de utilizar el sistema de archivos como espacio de nombres para los puntos finales es que se pueden aplicar los permisos de archivo normales y las ACL; si no puede abrir el punto final, no puede conectarse. Los enchufes IP no tienen tal mecanismo.

+0

/* Las ACL se pueden aplicar; si no puede abrir el punto final, no puede conectarse. */ por favor explique las líneas anteriores de las suyas. – mawia

+1

significa que (por ejemplo) si el nombre de archivo UNIX es chmod 0700, solo el propietario del archivo (o raíz) puede abrir el socket. Por lo tanto, se aplica un nivel adicional de seguridad antes de que el socket se pueda abrir. – Alnitak

+0

Gracias Alnitak !! – mawia

4

Significa que si crea un socket AF_UNIX en un disco NFS compartido entre dos máquinas A y B, no puede tener un proceso en A escribiendo datos en el socket Unix y un proceso en B leyendo datos desde ese socket .

La comunicación se realiza a nivel de kernel, y solo puede transferir datos entre procesos que se encuentran en el mismo kernel.

+0

Ojalá NFS tuviera la opción de proxy. Encuentro que los permisos de montaje (denegación predeterminada) son más convenientes que netfilter (permitir por defecto). – Tobu

Cuestiones relacionadas