PRO · Protocolo 5 · Sesión (Aplicación)

30.RPC

Técnica que permite a un programa ejecutar una función en otro equipo como si fuera local; la base de gRPC, NFS y muchos servicios de Windows.

¿Qué es?

RPC (Remote Procedure Call, llamada a procedimiento remoto) es una forma de programar en la que un equipo ejecuta una función que vive en otro equipo, como si fuera una función más de su propio programa.

Es como pedir comida por teléfono: tú solo dices «quiero una pizza grande» y esperas. No te importa cómo la preparan ni quién la lleva; recibes el resultado. RPC hace lo mismo con las funciones: llamas a sumar(7, 5) y la respuesta llega desde otro servidor.

En términos técnicos

  • Se ubica en la capa 5 (Sesión) en esta tabla, porque organiza el diálogo de pregunta y respuesta entre dos programas; en TCP/IP es parte de la capa de aplicación.
  • Esconde la red detrás de unos intermediarios llamados stubs: el del cliente empaqueta la llamada y el del servidor la desempaqueta y ejecuta la función.
  • Los argumentos y resultados se serializan (se convierten a bytes) con un formato acordado: XDR, XML, JSON o Protocol Buffers.
  • Viaja sobre TCP, UDP o HTTP, según la implementación.

¿Dónde lo vas a encontrar?

En NFS (carpetas compartidas en Linux), en muchos servicios de Windows (administración remota, Active Directory), en microservicios que se comunican con gRPC y en la API de algunas cadenas de bloques que usan JSON-RPC.

¿Cómo funciona?

Una llamada, paso a paso

Paso Dónde Qué pasa
1 Cliente El programa llama a sumar(7, 5) como si fuera local
2 Stub del cliente Empaqueta el nombre de la función y los argumentos (serialización)
3 Red Envía el mensaje al servidor
4 Stub del servidor Desempaqueta el mensaje y llama a la función real
5 Servidor Ejecuta sumar y obtiene 12
6 Red y stubs El resultado regresa por el mismo camino y el programa del cliente lo recibe

Implementaciones conocidas

Implementación Transporte y formato Dónde se usa
ONC RPC (Sun RPC) TCP/UDP, XDR; servicio rpcbind en el puerto 111 NFS en Linux y Unix
DCE/RPC · MS-RPC TCP; asignador de puertos en el 135 Servicios de Windows y Active Directory
XML-RPC HTTP + XML Sistemas antiguos, WordPress
JSON-RPC 2.0 HTTP o WebSocket + JSON APIs ligeras, blockchain
gRPC HTTP/2 + Protocol Buffers Microservicios modernos

Un ejemplo con Python (XML-RPC, sin librerías externas)

Servidor:

from xmlrpc.server import SimpleXMLRPCServer

def sumar(a, b):
    return a + b

with SimpleXMLRPCServer(("127.0.0.1", 8000)) as servidor:
    servidor.register_function(sumar)
    print("Servidor RPC en el puerto 8000…")
    servidor.serve_forever()

Cliente:

import xmlrpc.client

servidor = xmlrpc.client.ServerProxy("http://127.0.0.1:8000")
print(servidor.sumar(7, 5))   # muestra 12

Un mensaje JSON-RPC por dentro

{"jsonrpc": "2.0", "method": "sumar", "params": [7, 5], "id": 1}
{"jsonrpc": "2.0", "result": 12, "id": 1}

Verificación y diagnóstico

Comando Qué debes ver
rpcinfo -p localhost (Linux) Los servicios ONC RPC registrados (portmapper, nfs, mountd) y sus puertos
ss -tlnp | grep -E ':111|:2049' (Linux) Que rpcbind y NFS estén escuchando
Get-Service RpcSs (PowerShell) Que el servicio «Llamada a procedimiento remoto (RPC)» esté en ejecución
Wireshark, filtros rpc, dcerpc, grpc Las llamadas y sus respuestas

Para tomar en cuenta

  • Define tiempos de espera en cada llamada: sin ellos, un servidor lento bloquea al cliente.
  • Versiona la interfaz: si cambias los parámetros de una función, los clientes viejos fallan.
  • RPC frente a REST: RPC piensa en acciones (crearAlumno); REST piensa en recursos (POST /alumnos). Las dos ideas conviven.
  • gRPC necesita HTTP/2 y es binario: es muy eficiente, pero no se puede leer a simple vista ni probar desde el navegador sin herramientas.
  • Cifra el canal: XML-RPC y JSON-RPC sobre HTTP simple viajan en claro; usa HTTPS o TLS.

Material descargable

Aún no hay material descargable para este tema. Pronto habrá cuadernillos, manuales o laboratorios.

Referencias (RFC / estándar)

Antes conviene ver…

© solutions_ · Redes informáticas · 30 RPC