RPC 도구를 사용하면 클라이언트가 원격 서버 프로그램에 있는 프로시저를 직접 호출하는 것처럼 사용자에게 표시됩니다. 클라이언트와 서버에는 각각 고유한 주소 공간이 있습니다. 즉, 각 프로시저에는 프로시저에서 사용하는 데이터에 할당된 자체 메모리 리소스가 있습니다. 다음 그림에서는 RPC 아키텍처를 보여 줍니다.
그림에서 알 수 있듯이 클라이언트 애플리케이션은 프로시저를 구현하는 실제 코드 대신 로컬 스텁 프로시저를 호출합니다. 스텁은 클라이언트 애플리케이션과 컴파일되고 연결됩니다. 원격 프로시저를 구현하는 실제 코드를 포함하는 대신 클라이언트 스텁 코드는 다음과 같습니다.
- 클라이언트 주소 공간에서 필요한 매개 변수를 검색합니다.
- 필요에 따라 매개 변수를 네트워크를 통한 전송을 위한 표준 NDR 형식으로 변환합니다.
- RPC 클라이언트 런타임 라이브러리의 함수를 호출하여 요청 및 해당 매개 변수를 서버로 보냅니다.
서버는 원격 프로시저를 호출하기 위해 다음 단계를 수행합니다.
- 서버 RPC 런타임 라이브러리 함수는 요청을 수락하고 서버 스텁 프로시저를 호출합니다.
- 서버 스텁은 네트워크 버퍼에서 매개 변수를 검색하고 네트워크 전송 형식에서 서버가 필요로 하는 형식으로 변환합니다.
- 서버 스텁은 서버의 실제 프로시저를 호출합니다.
그런 다음 원격 프로시저가 실행되어 출력 매개 변수 및 반환 값을 생성할 수 있습니다. 원격 프로시저가 완료되면 비슷한 단계 시퀀스가 데이터를 클라이언트에 반환합니다.
- 원격 프로시저는 해당 데이터를 서버 스텁에 반환합니다.
- 서버 스텁은 출력 매개 변수를 네트워크를 통한 전송에 필요한 형식으로 변환하고 RPC 런타임 라이브러리 함수로 반환합니다.
- 서버 RPC 런타임 라이브러리 함수는 네트워크의 데이터를 클라이언트 컴퓨터로 전송합니다.
클라이언트는 네트워크를 통해 데이터를 수락하고 호출 함수로 반환하여 프로세스를 완료합니다.
- 클라이언트 RPC 런타임 라이브러리는 원격 프로시저 반환 값을 수신하고 클라이언트 스텁에 반환합니다.
- 클라이언트 스텁은 데이터를 NDR에서 클라이언트 컴퓨터에서 사용하는 형식으로 변환합니다. 스텁은 클라이언트 메모리에 데이터를 쓰고 결과를 클라이언트의 호출 프로그램에 반환합니다.
- 호출 프로시저는 프로시저가 동일한 컴퓨터에서 호출된 것처럼 계속됩니다.
런타임 라이브러리는 애플리케이션과 연결된 가져오기 라이브러리와 DLL(동적 연결 라이브러리)으로 구현되는 RPC 런타임 라이브러리의 두 부분으로 제공됩니다.
서버 애플리케이션에는 서버의 인터페이스를 등록하고 서버가 원격 프로시저 호출을 수락할 수 있도록 하는 서버 런타임 라이브러리 함수에 대한 호출이 포함됩니다. 서버 애플리케이션에는 클라이언트 애플리케이션에서 호출하는 애플리케이션별 원격 프로시저도 포함되어 있습니다.