sockets tcp localhost interprocess processing-efficiency

Al hacer IPC usando sockets TCP/IP usando la dirección de bucle invertido, ¿las pilas comunes de redes omiten encuadrar el mensaje en las PDU de nivel inferior?



localhost interprocess (3)

En algunos entornos, como Java, es natural usar sockets TCP / IP para pasar mensajes entre procesos en el mismo host utilizando la dirección ''localhost'' (127.0.0.1 en IPv4, o :: 1 en IPv6). (Debido a que Java tiende a no exponer otros mecanismos de IPC en su API).

Claramente, esto tiene el potencial de ser mucho más lento que IPC a través de mensajes que pasan por tuberías, o IPC utilizando memoria compartida.

Por otro lado, si la pila de red TCP / IP se dio cuenta de que ambos extremos de la conexión estaban en la interfaz de bucle invertido, podría hacer un poco de optimización para que la eficiencia no difiera mucho de la utilización de tuberías.

Pero, ¿los sistemas operativos comunes (Windows, Linux) implementan tales optimizaciones en sus pilas de TCP / IP?


Depende del sistema operativo y la configuración que se utiliza. La respuesta es sí si está pidiendo un comportamiento predeterminado.

Esta es la razón por la que no puede usar herramientas como wireshark para detectar escenarios de bucle de retorno local.


Específicamente, en Linux, cuando los paquetes se transmiten en la interfaz loopback, el kernel genera una interrupción de "software" para cada paquete. A partir de ese momento, la recepción del paquete es idéntica al flujo de recepción de paquetes para un dispositivo físico. Por lo tanto, tiene razón en su suposición de que la comunicación a través de la interfaz de bucle invertido sería mucho más lenta que los mecanismos de IPC alternativos, como los zócalos de Unix.

Supongo que la ruta del código del kernel puede optimizarse. Por ejemplo, podríamos llamar la ruta del código de recepción directamente desde la ruta del código de transmisión de la interfaz de bucle invertido.


Sí. Cuando se recibe un paquete / datos en una dirección Loopback (127.xxx), la capa IP de TCP / IP usa la ruta Loopback para enrutar el paquete a sí mismo.

Ruta Looback

Destino de red || Máscara de red || Gateway || Interfaz || Métrico

127.0.0.0 |||||||||||||||||||||| 255.0.0.0 || 127.0.0.1 || 127.0.0.1 || 1

Después de enrutarlo a itsef, en la capa TCP / UDP con la ayuda de bloques de control de protocolo (por estructura de datos de conexión) se identificará el socket correspondiente y su proceso propietario para entregar el paquete / datos.

En pocas palabras, se evitarán todas las tareas en capas de enlace de datos y capas físicas (del modelo OSI).