RPC
RPC(遠程過程調(diào)用協(xié)議)是一種通過網(wǎng)絡(luò)從遠程計算機程序上請求服務(wù),而不需要了解底層網(wǎng)絡(luò)技術(shù)的協(xié)議。RPC協(xié)議假定某些傳輸協(xié)議的存在,如TCP或UDP等,為通信程序之間攜帶信息數(shù)據(jù),在OSI網(wǎng)絡(luò)通信模型中RPC跨越了傳輸層和應(yīng)用層,RPC使得開發(fā)包括網(wǎng)絡(luò)分布式多程序在內(nèi)的應(yīng)用程序更加容易。
RPC簡介[ ]
- RPC采用客戶機/服務(wù)器模式,請求程序就是一個客戶機,而服務(wù)提供程序就是一個服務(wù)器。首先客戶機調(diào)用進程發(fā)送一個有進程參數(shù)的調(diào)用信息到服務(wù)進程,然后等待應(yīng)答信息,在服務(wù)器端進程保持睡眠狀態(tài)直到調(diào)用信息的到達為止。
- 當一個調(diào)用信息到達服務(wù)器獲得進程參數(shù),計算結(jié)果并發(fā)送答復信息,然后等待下一個調(diào)用信息,最后客戶端調(diào)用進程接收答復信息,獲得進程結(jié)果然后調(diào)用執(zhí)行繼續(xù)進行。
- 目前有多種RPC模式和執(zhí)行,最初由Sun公司提出,IETF ONC憲章重新修訂了Sun版本,使得ONC RPC協(xié)議成為IETF標準協(xié)議,現(xiàn)在使用最普遍的模式和執(zhí)行是開放式軟件基礎(chǔ)的分布式計算環(huán)境(DCE)。
RPC協(xié)議結(jié)構(gòu)[ ]
- 遠程過程調(diào)用(RPC)信息協(xié)議由兩個不同結(jié)構(gòu)組成:調(diào)用信息和答復信息,信息流程如下所示:
RPC:遠程過程調(diào)用流程,RPC調(diào)用信息:每條遠程過程調(diào)用信息包括以下無符號整數(shù)字段,以獨立識別遠程過程:程序號(Program number),程序版本號(Program version number),過程號(Procedure number)
RPC 調(diào)用信息主體形式如下:
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協(xié)議的答復信息的改變?nèi)Q于網(wǎng)絡(luò)服務(wù)器對調(diào)用信息是接收還是拒絕。答復信息請求包括區(qū)別以下情形的各種信息,RPC成功執(zhí)行調(diào)用信息,RPC的遠程實現(xiàn)不是協(xié)議第二版,返回RPC支持的最低和最高版本號。
- 在遠程系統(tǒng)中,遠程程序不可用,遠程程序不支持被請求的版本號,返回遠程程序所支持的最低和最高版本號,請求的過程號不存在。通常是呼叫方協(xié)議或程序差錯,RPC答復信息形式如下:
enum reply_stat stat
{MSG_ACCEPTED = 0,
MSG_DENIED = 1 };
RPC工作原理[ ]
運行時一次客戶機對服務(wù)器的RPC調(diào)用,其內(nèi)部操作大致有如下十步:
- 調(diào)用客戶端句柄;執(zhí)行傳送參數(shù)
- 調(diào)用本地系統(tǒng)內(nèi)核發(fā)送網(wǎng)絡(luò)消息
- 消息傳送到遠程主機
- 服務(wù)器句柄得到消息并取得參數(shù)
- 執(zhí)行遠程過程
- 執(zhí)行的過程將結(jié)果返回服務(wù)器句柄
- 服務(wù)器句柄返回結(jié)果,調(diào)用遠程系統(tǒng)內(nèi)核
- 消息傳回本地主機
- 客戶句柄由內(nèi)核接收消息
- 客戶接收句柄返回的數(shù)據(jù)
RPC OVER HTTP[ ]
Microsoft RPC-over-HTTP部署(RPC over HTTP)允許RPC 客戶端安全和有效地通過Internet連接到RPC服務(wù)器程序并執(zhí)行遠程過程調(diào)用,這是在一個名稱為RPC-over-HTTP 代理,或簡稱為RPC 代理的中間件的幫助下完成的。
- RPC代理運行在IIS計算機上,它接受來自Internet 的RPC請求,在這些請求上執(zhí)行認證,檢驗和訪問檢查,如果請求通過所有的測試,RPC代理將請求轉(zhuǎn)發(fā)給執(zhí)行真正處理的RPC服務(wù)器,通過RPC over HTTP,RPC客戶端不和服務(wù)器直接通信,它們使用RPC代理作為中間件。