RPC(Remote Procedure Call Protocol)——遠端過程調用協定,它是一種通過網絡從遠端計算機程式上請求服務,而不需要了解底層網絡技術的協定。RPC協定假定某些傳輸協定的存在,如TCP或UDP,為通信程式之間攜帶資訊資料。在OSI網絡通信模型中,RPC跨越了傳輸層和應用層。RPC使得開發包括網絡分布式多程式在内的應用程式更加容易。
基本簡介
RPC采用客戶機/伺服器模式。請求程式就是一個客戶機,而服務提供程式就是一個伺服器。首先,客戶機調用程序發送一個有程序參數的調用資訊到服務程序,然後等待應答資訊。在伺服器端,程序保持睡眠狀态直到調用資訊的到達為止。當一個調用資訊到達,伺服器獲得程序參數,計算結果,發送答複資訊,然後等待下一個調用資訊,最後,用戶端調用程序接收答複資訊,獲得程序結果,然後調用執行繼續進行。
有多種 RPC模式和執行。最初由 Sun 公司提出。IETF ONC 憲章重新修訂了 Sun 版本,使得 ONC RPC 協定成為 IETF 标準協定。現在使用最普遍的模式和執行是開放式軟體基礎的分布式計算環境(DCE)
工作原理
運作時,一次客戶機對伺服器的RPC調用,其内部操作大緻有如下十步:
1.調用用戶端句柄;執行傳送參數
2.調用本地系統核心發送網絡消息
3.消息傳送到遠端主機
4.伺服器句柄得到消息并取得參數
5.執行遠端過程
6.執行的過程将結果傳回伺服器句柄
7.伺服器句柄傳回結果,調用遠端系統核心
8.消息傳回本地主機
9.客戶句柄由核心接收消息
10.客戶接收句柄傳回的資料
RPC OVER HTTP
Microsoft RPC-over-HTTP 部署(RPC over HTTP)允許RPC用戶端安全和有效地通過Internet 連接配接到RPC 伺服器程式并執行遠端過程調用。這是在一個名稱為RPC-over-HTTP 代理,或簡稱為RPC 代理的中間件的幫助下完成的。
RPC 代理運作在IIS計算機上。它接受來自Internet 的RPC 請求,在這些請求上執行認證,檢驗和通路檢查,如果請求通過所有的測試,RPC 代理将請求轉發給執行真正處理的RPC 伺服器。通過RPC over HTTP,RPC用戶端不和伺服器直接通信,它們使用RPC 代理作為中間件。
遠端過程調用(RPC)資訊協定由兩個不同結構組成:調用資訊和答複資訊。資訊流程如下所示:
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 };