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


Es de esta respuesta:

https://stackoverflow.com/questions/2482411/is-this-pdo-bug-fixed-now/2482424#2482424


81
2018-03-20 09:13


origen




Respuestas:


UNA Zócalo UNIX es un mecanismo de comunicación entre procesos que permite el intercambio de datos bidireccionales entre procesos que se ejecutan en la misma máquina.

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 los procesos que se ejecutan en la misma computadora (mediante 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 livianos que los sockets IP. Entonces, si planea comunicarse con los procesos en el mismo host, esta es una mejor opción que los sockets IP.

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


144
2018-03-20 09:39



Tal vez agregue que los sockets de dominio UNIX están sujetos a permisos del sistema de archivos, mientras que los sockets de 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 a un socket TCP. - Nils Toedtmann
@pQd, Dude, ¿puedes llamarlo Unix IPC en lugar de Unix Sockets? - Pacerier
Los sockets @Pacerier Unix son simplemente una forma de lograr unix IPC (memoria compartida de Interprocess entre otros), por lo que no sería correcto llamar sockets unix IPC. - fyquah95
Los sockets TCP son manejados por Unix también? ¿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 responder a su consulta. Si necesita más información, envíe una nueva pregunta. - Peter Green


Puede listar sus propios sockets unix locales de máquina con el siguiente comando:

netstat -a -p --unix

¡Que te diviertas!


21
2018-03-20 13:49



Los sockets de Unix no existen en Windows. netstat Sin embargo, funciona en Windows. - Mark Tomlin
@apache, cosa similar en Windows llamada "tuberías con nombre". - expert
Las tuberías con nombre también están presentes en Linux. - Sahil Singh
@expert, las canalizaciones con nombre en Windows es igual a las tuberías con nombre en Unix. Los sockets IPC en Unix no tienen equivalencia en Windows - Pacerier
Una de las diferencias es que las canalizaciones con nombre solo pueden tener un cliente conectado a la vez (2 procesos que comunican el total). Los sockets UNIX, como los sockets IP, pueden tener varios clientes conectados a la vez, y cada uno obtiene respuestas por separado. - peterflynn


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

Un socket TCP / IP se utiliza 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 que escucha se identifica mediante un puerto local y posiblemente una dirección IP local. AIUI al menos en linux TCP / IP sockets siempre resulta en la generación y decodificación de paquetes TCP / IP, incluso si el cliente y el servidor están en la misma máquina.

Un socket de dominio Unix (a veces acortado a socket Unix) por otra parte opera en una sola máquina. Los sockets de escucha se encuentran en la jerarquía del sistema de archivos y el acceso a ellos se puede controlar 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 son manejados por Unix también?

Por supuesto

TCP sockets es parte de la especificación del protocolo TCP

Las especificaciones del protocolo de Internet solo tienden a afectar a lo que sucede en el cable, la especificación de 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 introducida por BSD, pero luego se copió en todo el lugar y se incluyó como parte del estándar posix. Las cosas básicas para los sockets TCP y UDP tienden a ser muy parecidas en diferentes plataformas, pero las cosas más avanzadas que interactúan con otras partes del sistema operativo varían, por ejemplo, en los sistemas similares a Unix, un conector identifica un socket y puede ser leído / escrito por el archivo API, este no es el caso en Windows.

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

¿O algún protocolo podría usar IP Sockets?

Cuando una aplicación crea explícitamente un socket utilizando la función "socket" (los sockets también son creados por la función de aceptación) 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 comunicación, las principales son datagramas y flujo, pero también hay otros tipos más especializados.
  • protocolo selecciona el protocolo a usar, si se establece en 0, se usará un protocolo predeterminado para la combinación de Dominio y tipo.

3
2017-09-13 17:32