sockets - software - unix socket vs tcp
Ejemplo para explicar el socket de dominio Unix-AF_INET vs AF_UNIX (2)
Mientras leía lo que significa AF_INET
, aprendí que hay otra familia llamada UNIX domain socket
. Aquí está el enlace wiki que leí sobre esto.
No entiendo lo que esto significa:
Los sockets de dominio Unix usan el sistema de archivos como su espacio de nombre de dirección. Son referenciados por procesos como inodos en el sistema de archivos. Esto permite que dos procesos abran el mismo socket para comunicarse. Sin embargo, la comunicación ocurre enteramente dentro del núcleo del sistema operativo.
Si quiero hacer SSH or FTP
, ¿qué familia utilizo AF_INET or AF_UNIX
? Estoy realmente confundido aquí un poco.
Los zócalos AF_UNIX proporcionan una excelente comunicación entre procesos. Abra un par de sockets socket (...) "y vincúlelo a un nombre de archivo temporal. La escritura a uno de los pares llega a la otra. El kernel enruta los mensajes sin protocolo o sistema de archivos. .) para sincronizar hilos y procesos de manera FIFO. Me gusta el no bloqueo con el modo de selección y datagrama (puede obtener una longitud), pero puede elegir el suyo propio. Asegúrese de eliminar el archivo temporal al salir (tendrá cero bytes). pero todavía aparecerá en el directorio del sistema de archivos)
Si desea comunicarse con un host remoto, es probable que necesite un socket INET
.
La diferencia es que un socket INET
está enlazado a una tupla de puerto de dirección IP, mientras que un socket UNIX
está "enlazado" a un archivo especial en su sistema de archivos. En general, solo los procesos que se ejecutan en la misma máquina pueden comunicarse a través de esta última.
Entonces, ¿por qué uno usaría un socket UNIX
? Exactamente por la razón anterior: comunicación entre procesos en el mismo host, siendo una alternativa liviana a un socket INET
través de loopback.
De hecho, los zócalos INET
encuentran en la parte superior de una pila TCP / IP completa, con algoritmos de congestión de tráfico, backoffs y similares para manejar. Un socket UNIX
no tiene que lidiar con ninguno de esos problemas, ya que todo está diseñado para ser local a la máquina, por lo que su código es mucho más simple y la comunicación es más rápida. Concedido, probablemente notará la diferencia solo bajo una carga pesada, por ejemplo, cuando se procesa a la inversa un servidor de aplicaciones (Node.js, Tornado ...) detrás de Nginx, etc.