1. 程式人生 > >遠端過程呼叫協議RPC

遠端過程呼叫協議RPC

RPC:遠端過程呼叫協議(RPC:Remote Procedure Call protocol)

 遠端過程呼叫(RPC)是一種從遠端計算機程式上請求一個伺服器,而不需要了解上層網路技術的協議。RPC 協議假定某些傳輸協議的存在,如 TCP 或 UDP,使得通訊程式之間能傳輸資訊資料。在 ISO 網路通訊模式中 RPC 跨越了傳輸層和應用層。RPC 使得生成應用程式包括分散式複用程式更加容易。

  RPC 使用的是客戶機/伺服器模式。請求程式就是一個客戶機,而服務程式就是一個伺服器。首先,呼叫過程傳送一個呼叫資訊到服務過程,然後等待應答資訊。呼叫過程包括過程引數,應答資訊包括過程結果。在伺服器端,過程保持睡眠狀態到呼叫資訊的到達。當一個呼叫資訊到達,伺服器獲得過程引數,計算結果,傳送應答資訊,然後等待下一個呼叫資訊。最後,呼叫過程接收應答資訊,獲得過程結果,然後呼叫執行繼續進行。

  目前,有多種 RPC 模式和執行。最初由 Sun 微系統提出 RFC。IETF ONC 憲章重新修訂了 Sun 版本,使得 ONC PRC 協議成為 IETF 標準協議。現在使用最普遍的模式和執行是開放式軟體基礎的分散式計算環境(DCE)。

  協議結構



  遠端過程呼叫(RPC)資訊協議由兩個不同結構組成:呼叫資訊和答覆資訊。資訊流程如下所示:

  

  RPC 呼叫資訊:每條遠端過程呼叫資訊包括以下無符號整數字段,以獨立識別遠端過程:

  程式號(Program number)

  程式版本號(Program version number)

  過程號(Procedure number)

  RPC 呼叫資訊主體形式如下:

  struct call_body {

  unsigned int rpcvers;

  unsigned int prog;

  unsigned int vers;

  unsigned int proc;

  opaque_auth cred;

  opaque_auth verf;

  1 parameter

  2 parameter . . .

  };

  RPC 答覆資訊:RPC 協議的答覆資訊的改變取決於網路伺服器對呼叫資訊是接收還是拒絕。答覆資訊請求包括區別以下情形的各種資訊:

  RPC 成功執行呼叫資訊。.

  RPC 的遠端實現不是協議第二版,返回 RPC 支援的最低和最高版本號。

  在遠端系統中,遠端程式不可用。

  遠端程式不支援被請求的版本號。返回遠端程式所支援的最低和最高版本號。

  請求的過程號不存在。通常是呼叫方協議或程式差錯。

  RPC答覆資訊形式如下:

  enum reply_stat stat {

  MSG_ACCEPTED = 0,

  MSG_DENIED

  = 1

  };