¿Cuál es la diferencia entre el socket Unix y el socket TCP / IP?

Respuestas:

191

Un socket UNIX es un mecanismo de comunicación entre procesos que permite el intercambio bidireccional de datos entre procesos que se ejecutan en la misma máquina.

Los sockets IP (especialmente los sockets TCP / IP) son un mecanismo que permite la comunicación entre procesos a través de la red. En algunos casos, puede usar sockets TCP / IP para hablar con procesos que se ejecutan en la misma computadora (mediante el uso de la interfaz de bucle invertido).

Los sockets de dominio UNIX saben que se están ejecutando en el mismo sistema, por lo que pueden evitar algunas comprobaciones y operaciones (como el enrutamiento); lo que los hace más rápidos y ligeros que los zócalos IP. Entonces, si planea comunicarse con procesos en el mismo host, esta es una mejor opción que los sockets IP.

Editar: según el comentario de Nils Toedtmann : los sockets de dominio UNIX están sujetos a los permisos del sistema de archivos, mientras que los sockets TCP solo se pueden controlar en el nivel del filtro de paquetes.

pQd
fuente
12
Quizás agregue que los sockets de dominio UNIX están sujetos a los permisos del sistema de archivos, mientras que los sockets TCP no lo están. Como resultado, es mucho más fácil regular qué usuarios tienen acceso a un socket de dominio UNIX que para un socket TCP.
Nils Toedtmann
@pQd, Amigo, ¿puedes llamarlo Unix IPC en lugar de Unix Sockets?
Pacerier
44
@Pacerier Unix sockets es simplemente una forma de lograr unix IPC (memoria Interprocess compartida entre otras), por lo que no sería correcto llamar a unix sockets unix IPC.
fyquah95
¿Los sockets TCP también son manejados por Unix? ¿Los sockets TCP son parte de la especificación del protocolo TCP o cualquier protocolo podría usar Sockets IP?
Federico
@Federico Publiqué una respuesta que intenta abordar su consulta, si necesita más profundidad, publique una nueva pregunta.
Peter Green el
28

Puede enumerar los sockets locales de Unix de su propia máquina con el siguiente comando:

netstat -a -p --unix

¡Que te diviertas!

El conserje de Unix
fuente
99
Los sockets Unix no existen en Windows. netstatSin embargo, funciona en Windows.
Mark Tomlin
44
@apache, algo similar en Windows llamado "Canalizaciones con nombre".
experto el
55
Las canalizaciones con nombre también están presentes en Linux.
Sahil Singh
99
@expert, las canalizaciones con nombre en Windows son iguales a las canalizaciones con nombre en Unix. Los sockets IPC en Unix no tienen equivalencia en Windows
Pacerier
2
Windows 10 tiene soporte para sockets Unix. Existen algunas limitaciones, pero está disponible: blogs.msdn.microsoft.com/commandline/2017/12/19/…
Tyson
12

¿Cuál es la diferencia entre el socket Unix y el socket TCP / IP?

Se utiliza un socket TCP / IP para la comunicación a través de redes TCP / IP. Un socket TCP conectado se identifica mediante la combinación de IP local, puerto local, IP remota y puerto remoto. Un puerto TCP de escucha se identifica por el puerto local y posiblemente por la IP local. AIUI, al menos en sockets TCP / IP de Linux, siempre genera y decodifica paquetes TCP / IP, incluso si el cliente y el servidor están en la misma máquina.

Por otro lado, un socket de dominio de Unix (a veces acortado a socket de Unix) opera en una sola máquina. Los zócalos de escucha viven en la jerarquía del sistema de archivos y el acceso a ellos puede controlarse mediante permisos del sistema de archivos.

Además, un proceso que acepta una conexión en un socket Unix puede determinar la ID de usuario del proceso que se conecta. Esto puede evitar la necesidad de un paso de autenticación. En lugar de generar una contraseña para su servidor de base de datos e incluir una copia en el código de su aplicación web, puede decirle al servidor de la base de datos que el usuario que ejecuta la aplicación web tiene acceso a la cuenta de usuario correspondiente en la base de datos.


¿Los sockets TCP también son manejados por Unix?

Por supuesto

Los sockets TCP son parte de la especificación del protocolo TCP

Las especificaciones del protocolo de Internet solo tienden a referirse a lo que sucede en el cable, la especificación TCP contiene una definición de Socket, pero esa definición no es la misma que la "API de sockets" utiliza el término.

La "API de sockets", tal como la conocemos, fue presentada por BSD, pero luego se copió por todas partes y se incluye como parte del estándar posix. Las cosas básicas para los sockets TCP y UDP tienden a ser muy similares en diferentes plataformas, pero las cosas más avanzadas que interactúan con otras partes del sistema operativo varían, por ejemplo, en sistemas tipo Unix, un socket se identifica mediante un identificador de archivo y puede ser leído / escrito por las API de archivo, este no es el caso en Windows.

Algunas extensiones de la API de sockets se han documentado en rfcs, pero esas RFC son solo "informativas".

o cualquier protocolo podría usar Sockets IP?

Cuando una aplicación crea explícitamente un socket utilizando la función "socket" (los sockets también son creados por la función accept), pasa tres parámetros, "dominio", "tipo" y "protocolo". Entre ellos, estos tres parámetros se pueden utilizar para seleccionar muchos tipos diferentes de socket.

  • El dominio selecciona la familia de protocolos / direcciones en uso, por ejemplo, AF_INET para ipv4, AF_INET6 para ipv6, AF_Unix para rutas de sistema de archivos Unix, etc.
  • type selecciona la semántica de la comunicación, las principales son datagramas y flujos, pero también hay otros tipos más especializados.
  • protocol selecciona el protocolo que se utilizará; si se establece en 0, se utilizará un protocolo predeterminado para la combinación de Dominio y tipo.
Peter Green
fuente
"Los sockets de escucha viven en la jerarquía del sistema de archivos y el acceso a ellos puede controlarse mediante permisos del sistema de archivos". ¿Significa esto que dos servidores que tienen acceso al mismo sistema de archivos podrían comunicarse a través de un socket?
user5359531
AIUI lamentablemente no. superuser.com/questions/352263/…
Peter Green