¿El protocolo gRPC oculta las conexiones locales?
Estoy jugando con ejemplos de python
que vienen con grpc
en el directorio de ejemplos \python*, por ejemplo, helloworld. Noté algo interesante: cuando inicio el servidor (en localhost puerto 50051) y luego el cliente, no veo una conexión TCP establecida (con ss -tnep
), sin embargo, sí veo el intercambio de paquetes con tcpdump.
Por otro lado, si simplemente hago telnet localhost 50051
, el comando ss muestra la conexión. ¿Acaso grpc
de alguna manera oculta la conexión cuando se hace a través de localhost, tal vez algún tipo de optimización? ¿O es esto una característica específica de Linux que es explícitamente habilitada por grpc?
Agradecería algunos comentarios que me ayuden a entender esto mejor, ¡gracias!
davy.ai
Es posible que
grpc
esté utilizando un socket de dominio Unix para la comunicación cuando tanto el cliente como el servidor se están ejecutando en la misma máquina local. Los sockets de dominio Unix son una forma de comunicación entre procesos (IPC, por sus siglas en inglés) que permite a los procesos comunicarse entre sí localmente sin la sobrecarga de TCP/IP. Esto podría explicar por qué no ves una conexión TCP utilizandoss -tnep
, pero sí ves intercambio de paquetes contcpdump
.También es posible que
grpc
esté utilizando la interfaz de bucle TCP (127.0.0.1), que es una dirección IP especial que se refiere al host local. Esto explicaría por qué puedes ver la conexión TCP utilizandotelnet localhost 50051
, pero no conss -tnep
(ya quess
solo muestra conexiones TCP en direcciones que no son de bucle).En general, el mecanismo exacto que
grpc
utiliza para la comunicación local puede depender de las opciones de configuración específicas utilizadas al configurar el servidor y el cliente. También es posible quegrpc
esté utilizando una combinación de sockets de dominio Unix y conexiones TCP de bucle, dependiendo de los detalles del patrón de comunicación.