¿Qué es RPC y por qué es tan importante?

15

Desde el principio, escuché que nunca desactivaste el servicio de Llamada a procedimiento remoto en Windows. Hacerlo lleva a cosas horribles que solían ser difíciles de anular (creo que ya no es fácil de hacer, pero ahora es mucho más fácil de arreglar). Sin embargo, no tengo idea de qué hace o por qué es tan importante básicamente para todo el sistema operativo.

¿Es posible resumir el propósito del servicio RPC y por qué tantos otros servicios / aplicaciones / operaciones dependen de él para ejecutarse?

redknightalex
fuente

Respuestas:

24

Los diseñadores de Windows decidieron hacer que muchas cosas se comuniquen entre sí a través de RPC, para que puedan hablar localmente o en una red.

Esto incluye cosas como Active Directory, la mayoría de las consolas MMC, la funcionalidad de algunos applets del panel de control como Device Manager, muchas de las cosas en Herramientas administrativas y posiblemente componentes internos de Windows.

Creo que incluso cuando está accediendo a una consola MMC, como compmgmt.mscver cosas sobre la máquina local, es básicamente RPC'ing a localhost (aunque podría estar equivocado).

Piense en RPC como algo un nivel por encima de TCP / IP que muchos componentes de Windows usan como un marco de comunicaciones de red de bajo nivel (e inseguro). ¿Por qué no usar TCP / IP directamente? En el momento en que se diseñó Windows NT (versión inicial lanzada en 1993), tenía otros protocolos de red además de TCP / IP de uso común, como Netware (SPX / IPX), NetBIOS, AppleTalk (creo que Windows admitió esto en el día , podría estar equivocado ...) y tal. Entonces, esta es una forma independiente de la red para que los componentes de Windows puedan comunicarse con otros componentes en la máquina local o remota.

LawrenceC
fuente
2
¿Seriamente? No hay votos a favor? Esta es una gran respuesta +1
Dave
6

La verdad es que: RPC se usa ampliamente en máquinas LOCALES , pero para el uso de HOST a HOST , Microsoft lo usa principalmente internamente, rara vez lo usan terceros .


Uso principal de RPC LOCAL :

  • Componente RPC sin procesar, como Registro, Netlogon, Firewall, Control de servicios, SQL Server ... Puede ver algunos de ellos en la lista en la sección "HOST-to-HOST".

  • muchos componentes DCOM (basados ​​en RPC, como un contenedor C ++ de C), incluyen componentes COM +.

Puede ejecutar dcomcnfg para ver cuántos componentes DCOM hay en su máquina:

Excel, Internet Explorer, Visual Studio ... se pueden automatizar porque son componentes DCOM:

ingrese la descripción de la imagen aquí

Incluso el cuadro de diálogo Propiedades del archivo del explorador también es componente DCOM, ¿divertido? Si elimina todas las ACL de "Editar límites" de los permisos de lanzamiento de DCOMCNFG, no podrá hacer casi nada, ¡no solo las tareas de administración !, ¡incluso mostrar la propiedad del archivo en el explorador!

ingrese la descripción de la imagen aquí


Uso principal de RPC de HOST a HOST :

  • Cosas de administración remota, como cuando "Administración de computadora", "Editor del registro", ¡puede dejar que se conecte a una máquina remota! Lo que sucede subrayado es el protocolo RPC sobre SMB (puerto TCP 445, conocido como File Sharing).

    ingrese la descripción de la imagen aquí

Puede usar la herramienta rpcdump o ifids para volcar todas las interfaces RPC en la máquina remota, vea los siguientes resultados, puede ver muchas interfaces de administración del sistema (también se pueden usar localmente, por supuesto):

[MS-RSP]: Remote Shutdown Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-TSCH]: Task Scheduler Service Remoting Protocol 
[MS-EVEN6]: EventLog Remoting Protocol 
Adh APIs
AppInfo
Base Firewall Engine API
DHCP Client LRPC Endpoint
DHCPv6 Client LRPC Endpoint
DfsDs service
EFSK RPC Interface
Event log TCPIP
Fw APIs
Group Policy RPC Interface
IP Transition Configuration endpoint
IdSegSrv service
Impl friendly name
KeyIso
LicenseManager
NRP server endpoint
NSI server endpoint
NetSetup API
Ngc Pop Key Service
Proxy Manager client server endpoint
Proxy Manager provider server endpoint
Secure Desktop LRPC interface
Security Center
UserMgrCli
WM_WindowManagerRPC\Server
WinHttp Auto-Proxy Service
Witness Client Test Interface
Witness Client Upcall Server
XactSrv service
...

Received 499 endpoints.

¿Por qué es importante RPC? Solo porque cada sistema maduro necesita un mecanismo de comunicación entre procesos, un conjunto de herramientas para generar stub / proxy, un estándar para empacar / desempaquetar objetos. Todos los sistemas tienen cosas similares. Debes conocer Android, su Binder es muy similar al diseño de DCOM.

De hecho, el RPC HOST-to-HOST no está muy extendido, principalmente porque son complicados y opacos, no son amigables con Internet debido a que los puertos 445 o 135 a menudo están bloqueados, y la experiencia de autenticación es mala. La gente prefiere elegir un servidor HTTPS para invocar un componente remoto, es más sencillo y controlable.

osexp2003
fuente
2

Llamada a procedimiento remoto (RPC)

fuente: http://searchsoa.techtarget.com/definition/Remote-Procedure-Call

La llamada a procedimiento remoto (RPC) es un protocolo que un programa puede usar para solicitar un servicio de un programa ubicado en otra computadora en una red sin tener que comprender los detalles de la red. (Una llamada de procedimiento también se conoce a veces como llamada de función o llamada de subrutina). RPC usa el modelo cliente / servidor. El programa solicitante es un cliente y el programa proveedor de servicios es el servidor. Al igual que una llamada a procedimiento regular o local, un RPC es una operación síncrona que requiere que se suspenda el programa solicitante hasta que se devuelvan los resultados del procedimiento remoto. Sin embargo, el uso de procesos o subprocesos livianos que comparten el mismo espacio de direcciones permite que se realicen múltiples RPC simultáneamente.

Cuando las declaraciones de programa que usan RPC se compilan en un programa ejecutable, se incluye un código auxiliar en el código compilado que actúa como representante del código de procedimiento remoto. Cuando se ejecuta el programa y se emite la llamada al procedimiento, el código auxiliar recibe la solicitud y la reenvía a un programa de tiempo de ejecución del cliente en la computadora local. El programa de tiempo de ejecución del cliente tiene el conocimiento de cómo abordar la computadora remota y la aplicación del servidor y envía el mensaje a través de la red que solicita el procedimiento remoto. Del mismo modo, el servidor incluye un programa de tiempo de ejecución y un stub que interactúa con el procedimiento remoto en sí. Los resultados se devuelven de la misma manera.

Existen varios modelos e implementaciones de RPC. Un modelo y una implementación populares es el entorno de computación distribuida (DCE) de la Open Software Foundation. El Instituto de Ingenieros Eléctricos y Electrónicos define RPC en su Especificación de Llamada a Procedimiento Remoto ISO, ISO / IEC CD 11578 N6561, ISO / IEC, noviembre de 1991.

RPC abarca la capa de transporte y la capa de aplicación en el modelo de comunicación de red de interconexión de sistemas abiertos (OSI). RPC facilita el desarrollo de una aplicación que incluye múltiples programas distribuidos en una red.

Los métodos alternativos para la comunicación cliente / servidor incluyen la puesta en cola de mensajes y la comunicación avanzada de programa a programa (APPC) de IBM.


Aquí más de Microsoft: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651(v=vs.85).aspx

Propósito
La llamada a procedimiento remoto (RPC) de Microsoft define una tecnología poderosa para crear programas distribuidos de cliente / servidor. Los apéndices y bibliotecas de tiempo de ejecución de RPC administran la mayoría de los procesos relacionados con los protocolos de red y la comunicación. Esto le permite centrarse en los detalles de la aplicación en lugar de los detalles de la red.
Cuando corresponda,
RPC se puede usar en todas las aplicaciones cliente / servidor basadas en sistemas operativos Windows. También se puede usar para crear programas de cliente y servidor para entornos de red heterogéneos que incluyen sistemas operativos como Unix y Apple.

Devid
fuente