O que é RPC e por que é tão importante?

15

Desde o início, ouvi dizer que você nunca desabilita o serviço Chamada de procedimento remoto no Windows. Fazer isso leva a coisas horríveis que costumavam ser difíceis de derrubar (acredito que não é mais fácil de fazer, mas agora é muito mais fácil de corrigir). No entanto, não tenho idéia do que faz ou por que é tão importante para basicamente todo o sistema operacional.

É possível resumir o objetivo do serviço RPC e por que tantos outros serviços / aplicativos / operações dependem dele para executar?

redknightalex
fonte

Respostas:

24

Os designers do Windows decidiram fazer muitas coisas se comunicarem por meio de RPC - para que eles pudessem conversar localmente ou por uma rede.

Isso inclui coisas como o Active Directory, a maioria dos consoles MMC, a funcionalidade de alguns miniaplicativos do painel de controle, como o Gerenciador de dispositivos, muitas das ferramentas administrativas, e possivelmente componentes internos do Windows.

Acredito que mesmo quando você está acessando um console MMC, gostaria compmgmt.mscde ver coisas sobre a máquina local, é basicamente fazer RPC para o host local (eu poderia estar errado).

Pense no RPC como algo um nível acima do TCP / IP usado como uma estrutura de comunicação em rede de baixo nível (e insegura) por muitos componentes do Windows. Por que não usar TCP / IP diretamente? Na época em que o Windows NT foi projetado (versão inicial lançada em 1993), você tinha outros protocolos de rede além do TCP / IP em uso comum, como Netware (SPX / IPX), NetBIOS, AppleTalk (acho que o Windows suportava isso de volta nos dias de hoje). , pode estar errado ...) e tal. Portanto, essa é uma maneira independente de rede para que os componentes do Windows possam conversar com outros componentes na máquina local ou remota.

LawrenceC
fonte
2
Seriamente? Sem votos positivos? Esta é uma ótima resposta +1
Dave
6

A verdade é: o RPC é amplamente usado em máquinas LOCAL , mas, para uso de HOST a HOST , é usado principalmente pela Microsoft internamente, raramente usado por terceiros .


Uso principal do RPC LOCAL :

  • Componente RPC bruto, como Registro, Netlogon, Firewall, Controle de Serviço, SQL Server ... Você pode vê-los na lista na seção "HOST-to-HOST".

  • muitos componentes DCOM (baseados em RPC, como um wrapper C ++ de C), incluem componentes COM +.

Você pode executar o dcomcnfg para ver quantos componentes DCOM em sua máquina:

Excel, Internet Explorer, Visual Studio ... podem ser automatizados porque são componentes do DCOM:

insira a descrição da imagem aqui

Até a caixa de diálogo Propriedades do arquivo do Explorer também é componente do DCOM, engraçado? Se você remover todas as ACLs de "Editar limites" das permissões de inicialização do DCOMCNFG, não poderá fazer quase nada, além de apenas o gerenciamento funcionar !, até mesmo mostrar a propriedade do arquivo no explorer!

insira a descrição da imagem aqui


Uso principal de RPC HOST-to-HOST :

  • Coisas de Gerenciamento Remoto, como quando "Gerenciamento do Computador", "Editor do Registro", você pode conectar a uma máquina remota! O que acontece sublinhado é o protocolo RPC sobre SMB (porta TCP 445, conhecida como Compartilhamento de Arquivos).

    insira a descrição da imagem aqui

Você pode usar a ferramenta rpcdump ou ifids para despejar todas as interfaces internas de RPC na máquina remota; veja os seguintes resultados; você pode ver muitas interfaces de gerenciamento do sistema (elas também podem ser usadas localmente, é claro):

[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 que o RPC é importante? Só porque todo sistema maduro precisa de um mecanismo de comunicação entre processos, um conjunto de ferramentas para gerar stub / proxy, um padrão para empacotar / descompactar objetos. Todo sistema tem coisas semelhantes. Você deve conhecer o Android, seu Binder é muito semelhante ao design do DCOM.

De fato, o RPC de HOST para HOST não é amplamente difundido, principalmente porque são complicados e opacos, não são amigáveis ​​à Internet devido ao bloqueio das portas 445 ou 135, e a experiência de autenticação é ruim. As pessoas preferem escolher um servidor HTTPS para chamar um componente remoto, é mais direto e controlável.

osexp2003
fonte
2

Chamada de procedimento remoto (RPC)

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

A Chamada de Procedimento Remoto (RPC) é um protocolo que um programa pode usar para solicitar um serviço de um programa localizado em outro computador em uma rede sem precisar entender os detalhes da rede. (Uma chamada de procedimento também é conhecida como chamada de função ou chamada de sub-rotina.) O RPC usa o modelo de cliente / servidor. O programa solicitante é um cliente e o programa fornecedor de serviços é o servidor. Como uma chamada de procedimento regular ou local, uma RPC é uma operação síncrona que exige que o programa solicitante seja suspenso até que os resultados do procedimento remoto sejam retornados. No entanto, o uso de processos ou encadeamentos leves que compartilham o mesmo espaço de endereço permite que vários RPCs sejam executados simultaneamente.

Quando instruções de programa que usam RPC são compiladas em um programa executável, um stub é incluído no código compilado que atua como o representante do código de procedimento remoto. Quando o programa é executado e a chamada de procedimento é emitida, o stub recebe a solicitação e a encaminha para um programa de tempo de execução do cliente no computador local. O programa de tempo de execução do cliente tem o conhecimento de como endereçar o computador remoto e o aplicativo do servidor e envia a mensagem pela rede que solicita o procedimento remoto. Da mesma forma, o servidor inclui um programa de tempo de execução e stub que faz interface com o próprio procedimento remoto. Os resultados são retornados da mesma maneira.

Existem vários modelos e implementações de RPC. Um modelo e implementação populares são o Ambiente de Computação Distribuída (DCE) da Open Software Foundation. O Institute of Electrical and Electronics Engineers define RPC em sua Especificação de chamada de procedimento remoto ISO, CD ISO / IEC 11578 N6561, ISO / IEC, novembro de 1991.

O RPC abrange a camada de Transporte e a camada de Aplicativo no modelo de comunicação de rede OSI (Open Systems Interconnection). O RPC facilita o desenvolvimento de um aplicativo que inclui vários programas distribuídos em uma rede.

Métodos alternativos para comunicação cliente / servidor incluem o enfileiramento de mensagens e a Comunicação Avançada de Programa para Programa (APPC) da IBM.


Mais informações da Microsoft: http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651(v=vs.85).aspx

Finalidade
A chamada de procedimento remoto da Microsoft (RPC) define uma tecnologia poderosa para a criação de programas cliente / servidor distribuídos. Os stubs e bibliotecas de tempo de execução RPC gerenciam a maioria dos processos relacionados a protocolos e comunicação de rede. Isso permite que você se concentre nos detalhes do aplicativo e não nos detalhes da rede.
Onde aplicável, o
RPC pode ser usado em todos os aplicativos cliente / servidor com base nos sistemas operacionais Windows. Também pode ser usado para criar programas de clientes e servidores para ambientes de rede heterogêneos que incluem sistemas operacionais como Unix e Apple.

Devid
fonte