RPC 작동 방식

RPC 도구는 클라이언트가 원격 서버 프로그램에 있는 프로시저를 직접 호출하는 것처럼 사용자에게 표시됩니다. 클라이언트와 서버에는 각각 고유한 주소 공간이 있습니다. 즉, 각각에는 프로시저에서 사용하는 데이터에 할당된 자체 메모리 리소스가 있습니다. 다음 그림에서는 RPC 아키텍처를 보여 줍니다.

rpc 아키텍처

그림에서 알 수 있듯이 클라이언트 애플리케이션은 프로시저를 구현하는 실제 코드 대신 로컬 스텁 프로시저를 호출합니다. 스텁은 컴파일되고 클라이언트 애플리케이션과 연결됩니다. 원격 프로시저를 구현하는 실제 코드를 포함하는 대신 클라이언트 스텁 코드는 다음과 같습니다.

  • 클라이언트 주소 공간에서 필요한 매개 변수를 검색합니다.
  • 필요에 따라 매개 변수를 네트워크를 통해 전송하기 위한 표준 NDR 형식으로 변환합니다.
  • RPC 클라이언트 런타임 라이브러리의 함수를 호출하여 요청 및 해당 매개 변수를 서버로 보냅니다.

서버는 원격 프로시저를 호출하기 위해 다음 단계를 수행합니다.

  1. 서버 RPC 런타임 라이브러리 함수는 요청을 수락하고 서버 스텁 프로시저를 호출합니다.
  2. 서버 스텁은 네트워크 버퍼에서 매개 변수를 검색하고 네트워크 전송 형식에서 서버에 필요한 형식으로 변환합니다.
  3. 서버 스텁은 서버의 실제 프로시저를 호출합니다.

그런 다음 원격 프로시저가 실행되어 출력 매개 변수와 반환 값이 생성될 수 있습니다. 원격 프로시저가 완료되면 유사한 단계 시퀀스가 데이터를 클라이언트에 반환합니다.

  1. 원격 프로시저는 해당 데이터를 서버 스텁에 반환합니다.
  2. 서버 스텁은 출력 매개 변수를 네트워크를 통해 전송하는 데 필요한 형식으로 변환하고 RPC 런타임 라이브러리 함수로 반환합니다.
  3. 서버 RPC 런타임 라이브러리 함수는 네트워크의 데이터를 클라이언트 컴퓨터로 전송합니다.

클라이언트는 네트워크를 통해 데이터를 수락하고 호출 함수로 반환하여 프로세스를 완료합니다.

  1. 클라이언트 RPC 런타임 라이브러리는 원격 프로시저 반환 값을 수신하고 클라이언트 스텁에 반환합니다.
  2. 클라이언트 스텁은 데이터를 NDR에서 클라이언트 컴퓨터에서 사용하는 형식으로 변환합니다. 스텁은 클라이언트 메모리에 데이터를 쓰고 결과를 클라이언트의 호출 프로그램에 반환합니다.
  3. 호출 프로시저는 프로시저가 동일한 컴퓨터에서 호출된 것처럼 계속됩니다.

런타임 라이브러리는 애플리케이션과 연결된 가져오기 라이브러리와 DLL(동적 연결 라이브러리)로 구현되는 RPC 런타임 라이브러리의 두 부분으로 제공됩니다.

서버 애플리케이션에는 서버의 인터페이스를 등록하고 서버가 원격 프로시저 호출을 수락하도록 허용하는 서버 런타임 라이브러리 함수에 대한 호출이 포함되어 있습니다. 서버 애플리케이션에는 클라이언트 애플리케이션에서 호출하는 애플리케이션별 원격 프로시저도 포함됩니다.