what socket que programming networking tcp network-programming

networking - socket - ¿Cuál es la diferencia entre tuberías y enchufes?



tcp socket (2)

¿Cuáles son las diferencias entre las tuberías y los enchufes, y cuándo / cómo debe elegir uno sobre el otro?

Tanto las tomas como los enchufes manejan flujos de bytes, pero lo hacen de diferentes maneras ...

  • las tuberías solo existen dentro de un host específico, y se refieren al almacenamiento en memoria intermedia entre archivos virtuales, o al conectar la salida / entrada de procesos dentro de ese host. No hay conceptos de paquetes dentro de las tuberías.
  • los zócalos empaquetan paquetes de comunicación utilizando IPv4 o IPv6; esa comunicación puede extenderse más allá de localhost. Tenga en cuenta que diferentes puntos finales de un socket pueden compartir la misma dirección IP; sin embargo, deben escuchar en diferentes puertos TCP / UDP para hacerlo.

Uso :

  • Use tubos:
    • cuando desee leer / escribir datos como un archivo dentro de un servidor específico. Si está utilizando C, read() y write() en una tubería.
    • cuando desee conectar la salida de un proceso a la entrada de otro proceso ... vea popen()
  • Use sockets para enviar datos entre diferentes puntos finales IPv4 / IPv6. Muy a menudo, esto sucede entre diferentes hosts, pero los sockets se pueden usar dentro del mismo host

Por cierto, puede usar netcat o socat para unir un enchufe a una tubería.

Encontré un par de respuestas, pero parecen estar relacionadas específicamente con las máquinas con Windows. Entonces mi pregunta es ¿cuáles son las diferencias entre las tuberías y los enchufes, y cuándo / cómo debería elegir uno sobre el otro?


Para completar la respuesta dada por Mike, es importante mencionar la existencia de sockets de dominio UNIX, que están disponibles en cualquier sistema operativo compatible con POSIX. Aunque son muy similares a los zócalos de internet "normales" en términos de semántica de uso, son puramente locales para la máquina (por supuesto, los zócalos de internet también pueden funcionar localmente), y por lo tanto casi se comportan como una cañería. Casi, porque una tubería UNIX es por definición unidireccional:

Las tuberías y los FIFO (también conocidos como conductos con nombre) proporcionan un canal de comunicación interproceso unidireccional. Una tubería tiene un final de lectura y un final de escritura. Los datos escritos en el extremo de escritura de una tubería se pueden leer desde el extremo de lectura de la tubería. (extracto del tubo de la página man (7) )

Los sockets de dominio UNIX también tienen una característica muy inusual, ya que además de los datos, también permiten el envío de descriptores de archivos : de esta manera, un proceso sin privilegios puede acceder a cualquier archivo cuyo descriptor se haya enviado a través del socket. Esta técnica, según Wikipedia, es utilizada por el daemon de detección antivirus ClamAV.