답변:
Windows의 설계자들은 RPC를 통해 많은 것들을 서로 이야기하여 로컬이나 네트워크를 통해 이야기 할 수 있도록 결정했습니다.
여기에는 Active Directory, 대부분의 MMC 콘솔, 장치 관리자와 같은 일부 제어판 애플릿의 기능, 많은 관리 도구 및 내부 Windows 구성 요소가 포함됩니다.
compmgmt.msc
로컬 컴퓨터에 대한 내용을 보는 것처럼 MMC 콘솔에 액세스 할 때도 기본적으로 localhost에 대한 RPC입니다 (잘못 될 수 있습니다).
RPC는 많은 Windows 구성 요소에서 네트워크 수준이 낮은 (낮은 수준의) 네트워크 통신 프레임 워크로 사용되는 TCP / IP보다 한 수준 높은 것으로 생각하십시오. TCP / IP를 직접 사용하지 않는 이유는 무엇입니까? Windows NT가 엔지니어링 될 때 (1993 년에 출시 된 초기 버전), Netware (SPX / IPX), NetBIOS, AppleTalk와 같은 일반적인 용도로 TCP / IP 이외의 다른 네트워크 프로토콜이있었습니다. , 잘못 될 수 있습니다 ...) 등. 따라서 이것은 Windows 구성 요소가 로컬 컴퓨터 나 원격 컴퓨터의 다른 구성 요소와 통신 할 수있는 네트워크에 구애받지 않는 방법입니다.
진실은 다음과 같습니다. RPC는 LOCAL 시스템 에서 널리 사용 되지만 HOST-to-HOST 사용에는 주로 Microsoft에서 주로 사용하며 타사에서는 거의 사용하지 않습니다 .
레지스트리, Netlogon, 방화벽, 서비스 제어, SQL Server와 같은 원시 RPC 구성 요소 ... "HOST-to-HOST"섹션의 목록에서 일부를 볼 수 있습니다.
많은 DCOM 구성 요소 (C의 C ++ 래퍼와 같은 RPC 기반)에는 COM + 구성 요소가 포함됩니다.
dcomcnfg를 실행하여 컴퓨터의 DCOM 구성 요소 수를 확인할 수 있습니다.
Excel, Internet Explorer, Visual Studio 등은 DCOM 구성 요소이므로 자동화 할 수 있습니다.
탐색기의 파일 속성 대화 상자조차도 DCOM 구성 요소입니다. DCOMCNFG 실행 권한의 "제한 편집"에서 모든 ACL을 제거하면 관리 작업뿐만 아니라 탐색기에서도 파일 속성을 표시 할 수있는 거의 모든 작업을 수행 할 수 없습니다!
"컴퓨터 관리", "레지스트리 편집기"등의 원격 관리 항목을 원격 시스템에 연결할 수 있습니다! 밑줄은 RPC over SMB 프로토콜 (TCP 포트 445, 파일 공유라고 함)입니다.
rpcdump 또는 ifids 도구를 사용하여 원격 시스템에서 모든 RPC 인터페이스를 덤프 할 수 있습니다. 다음 결과를 참조하십시오. 많은 시스템 관리 인터페이스를 볼 수 있습니다 (물론 로컬에서도 사용할 수 있습니다).
[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.
RPC가 중요한 이유 모든 성숙한 시스템에는 프로세스 간 통신 메커니즘이 필요하기 때문에 객체를 포장 / 포장 해제하는 표준 인 스텁 / 프록시를 생성하는 도구 세트가 필요합니다. 모든 시스템에는 비슷한 것이 있습니다. Android를 알아야합니다. 바인더는 DCOM의 디자인과 매우 유사합니다.
실제로 HOST-to-HOST RPC는 445 또는 135 포트가 자주 차단되어 인터넷에 친숙하지 않기 때문에 복잡하고 불투명하기 때문에 널리 보급되지 않으며 인증 경험이 나쁩니다. 사람들은 원격 구성 요소를 호출하기 위해 HTTPS 서버를 선택하는 것을 선호합니다. 더 간단하고 제어 가능합니다.
RPC (원격 프로 시저 호출)는 한 프로그램이 네트워크 세부 정보를 이해하지 않고도 네트워크의 다른 컴퓨터에있는 프로그램에서 서비스를 요청하는 데 사용할 수있는 프로토콜입니다. 프로 시저 호출은 함수 호출 또는 서브 루틴 호출이라고도합니다. RPC는 클라이언트 / 서버 모델을 사용합니다. 요청 프로그램은 클라이언트이고 서비스 제공 프로그램은 서버입니다. 일반 또는 로컬 프로 시저 호출과 마찬가지로 RPC는 원격 프로 시저의 결과가 리턴 될 때까지 요청 프로그램을 일시 정지해야하는 동기 조작입니다. 그러나 동일한 주소 공간을 공유하는 간단한 프로세스 나 스레드를 사용하면 여러 RPC를 동시에 수행 할 수 있습니다.
RPC를 사용하는 프로그램 명령문이 실행 가능한 프로그램으로 컴파일 될 때 원격 프로 시저 코드의 대표 역할을하는 스텁이 컴파일 된 코드에 포함됩니다. 프로그램이 실행되고 프로 시저 호출이 발행되면 스텁은 요청을 수신하여 로컬 컴퓨터의 클라이언트 런타임 프로그램으로 전달합니다. 클라이언트 런타임 프로그램은 원격 컴퓨터 및 서버 응용 프로그램의 주소를 지정하는 방법에 대한 지식이 있으며 원격 프로 시저를 요청하는 네트워크를 통해 메시지를 보냅니다. 마찬가지로, 서버에는 원격 프로 시저 자체와 인터페이스하는 런타임 프로그램 및 스텁이 포함됩니다. 결과는 같은 방식으로 반환됩니다.
몇 가지 RPC 모델과 구현이 있습니다. 널리 사용되는 모델 및 구현은 Open Software Foundation의 DCE (Distributed Computing Environment)입니다. Institute of Electrical and Electronics Engineers는 1991 년 11 월 ISO 원격 절차 호출 사양, ISO / IEC CD 11578 N6561, ISO / IEC에서 RPC를 정의합니다.
RPC는 네트워크 통신의 OSI (Open Systems Interconnection) 모델에서 전송 계층과 응용 프로그램 계층에 걸쳐 있습니다. RPC를 사용하면 네트워크에 분산 된 여러 프로그램이 포함 된 응용 프로그램을보다 쉽게 개발할 수 있습니다.
클라이언트 / 서버 통신을위한 대체 방법으로는 메시지 큐잉과 IBM의 고급 프로그램 간 통신 (APPC)이 있습니다.
Microsoft에서 더 많은 정보 : http://msdn.microsoft.com/en-us/library/windows/desktop/aa378651(v=vs.85).aspx
목적
Microsoft RPC (원격 프로 시저 호출)는 분산 클라이언트 / 서버 프로그램을 만들기위한 강력한 기술을 정의합니다. RPC 런타임 스텁 및 라이브러리는 네트워크 프로토콜 및 통신과 관련된 대부분의 프로세스를 관리합니다. 이를 통해 네트워크의 세부 정보가 아닌 응용 프로그램의 세부 정보에 집중할 수 있습니다.
해당
하는 경우 Windows 운영 체제를 기반으로하는 모든 클라이언트 / 서버 응용 프로그램에서 RPC를 사용할 수 있습니다. 또한 Unix 및 Apple과 같은 운영 체제를 포함하는 이기종 네트워크 환경에 대한 클라이언트 및 서버 프로그램을 작성하는 데 사용될 수 있습니다.