rpc:remote procedure call protocol specification

22
RPC:Remote Procedure RPC:Remote Procedure Call Protocol Specif Call Protocol Specif ication ication 分分分分分分分分 分分分分分分 分分分分 分 分分分分分分分 分分 分分

Upload: aideen

Post on 05-Jan-2016

32 views

Category:

Documents


1 download

DESCRIPTION

分散システム特論. RPC:Remote Procedure Call Protocol Specification. 情報工学専攻 修士課程一年 谷口秀夫研究室 石井 陽介. 発表手順. (1)参照RFCについて. (2)RFC1050の構成. (3)RPCとは. (4)RPCプログラム作成の流れ. (5)RPCの利用例(NFS). (6)まとめ. 参照RFCについて. ・ RFC1050 (RPC) ・RFC1057 (RPC:Version2) ・RFC1831 (RPC:Version2)Standard Track ・RFC1014 (XDR) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: RPC:Remote Procedure Call Protocol Specification

RPC:Remote Procedure Call RPC:Remote Procedure Call Protocol SpecificationProtocol Specification

分散システム特論

情報工学専攻 修士課程一年 谷口秀夫研究室石井 陽介

Page 2: RPC:Remote Procedure Call Protocol Specification

 No.2

発表手順発表手順

(1)参照RFCについて

(6)まとめ

(5)RPCの利用例(NFS)

(4)RPCプログラム作成の流れ

(3)RPCとは

(2)RFC1050の構成

Page 3: RPC:Remote Procedure Call Protocol Specification

 No.3

参照RFCについて参照RFCについて

・RFC1050 (RPC)

・RFC1057 (RPC:Version2)

・RFC1831 (RPC:Version2)Standard Track

・RFC1014 (XDR)

・RFC1832 (XDR)Standard Track

Page 4: RPC:Remote Procedure Call Protocol Specification

 No.4

RFC1050の構成RFC1050の構成 1. Introduction 2. Terminology 3. The RPC Model 4. Transports and Semantics 5. Binding and Rendezvous Independence 6. Authentication 7. RPC Protocol Requirements 8. The RPC Message Protocol 9. Authentication Protocols10. Record Marking Standard11. The RPC LanguageAppendix: Port Mapper Program Protocol

Page 5: RPC:Remote Procedure Call Protocol Specification

 No.5

RPCとはRPCとはRPC(Remote Procedure Call)(遠隔手続き呼び出し)  ・処理要求全体を一つの手続き呼び出しとみなして実行する   「プロセス間通信」の方法の一つ  ・NFS、NISなどで利用  ・代表的な実装(SunRPC、DCE RPC、CORBA etc.)

RPCの特徴  (1)クライアント・サーバモデル  (2)普通の手続き(関数)呼び出しと似た方法で通信可能  (3)コネクションが作られない  (4)同期式通信(非同期も可)

RPCにおける「遠隔(remote)」の概念  「別のコンピュータ」      「別のアドレス空間」

Page 6: RPC:Remote Procedure Call Protocol Specification

 No.6

RPCの動作RPCの動作

クライアント側プログラム

クライアント側スタブ

ネットワークインタフェース(TCP / IP,UDP / IP etc.)

サーバ側プログラム

サーバ側スタブ

ネットワークインタフェース(TCP / IP,UDP / IP etc.)

クライアント サーバ

Page 7: RPC:Remote Procedure Call Protocol Specification

 No.7

RPC実現のためにはRPC実現のためには

(1)RPCサービスの特定

(2)RPC利用時に必要な情報

(3)データ交換形式

(4)セキュリティ機能

(5)RPCメッセージの形式

(6)RPCで利用する手続きの定義

Page 8: RPC:Remote Procedure Call Protocol Specification

 No.8

RPCサービスの特定RPCサービスの特定

(1)プログラム番号:(2)バージョン番号:(3)プロシージャ番号:

提供サービスを識別サービス毎のバージョンを識別実行可能な手続きを識別

三つの番号によりサービスを特定

プログラム番号の割当て 0x0 - 0x1fffffff Sunが定義 0x20000000 - 0x3fffffff ユーザが独自に利用可能 0x40000000 - 0x5fffffff APが動的に利用可能 0x60000000 - 0x7fffffff reserved 0x80000000 - 0x9fffffff reserved 0xa0000000 - 0xbfffffff reserved 0xc0000000 - 0xdfffffff reserved 0xe0000000 - 0xffffffff reserved

Page 9: RPC:Remote Procedure Call Protocol Specification

 No.9

 RPC利用時に必要な情報 RPC利用時に必要な情報・RPC利用時に必要な情報  (1)プログラム番号  (2)バージョン番号  (3)プロシージャ番号・通信に必要な情報  (4)サーバマシンのIPアドレス  (5)サーバプログラム(利用サービス)のポート番号      ・動作ホスト上で動的にポート番号を割当てる

     サーバプログラム           ポート番号

対応関係を管理するサービス

portmap

Page 10: RPC:Remote Procedure Call Protocol Specification

 No.10

portmapサービスportmapサービスportmapサービスの特徴  (1)プログラム番号 100000 を持つ  (2)ポート番号が固定されている     ・TCP / IP、UDP / IPのポート111番portmapサービスの機能  (1) PMAPPROC_SET :      サーバプログラムに対応するポートの登録  (2) PMAPPROC_UNSET :      サーバプログラムに対応するポートの登録解除  (3) PMAPPROC_GETPORT :      サーバプログラムに対応するポート番号の獲得  (4) PMAPPROC_DUMP:      portmapが持つ情報一覧の獲得  (5) PMAPPROC_CALLIT:      手続き呼び出し(ブロードキャスト時に利用)

Page 11: RPC:Remote Procedure Call Protocol Specification

 No.11

portmapを利用したRPCportmapを利用したRPCの様子の様子

(port  111 )portmap

サーバプログラム

ポートの登録要求

利用可能ポートの登録

RPCサービス起動時

(port  111 )portmap

(port XXX)サーバプログラム

クライアントプログラム

( 1 )ポート番号問い合わせ

( 2 )ポート番号返答

( 3 )RPC呼び出し

( 4 )RPC実行結果

RPCサービス呼び出し時

Page 12: RPC:Remote Procedure Call Protocol Specification

 No.12

データ交換形式データ交換形式

異なるマシン間でのデータのやり取り   ・エンディアン問題を解決する必要がある

RPCにおける解決法   ・XDR(External Data Representation Standard)    というデータ交換形式を利用(ref.RFC1014 RFC1832)

マシンAにおけるデータ形式

マシンBにおけるデータ形式

XDR

marshalingunmarshaling

Page 13: RPC:Remote Procedure Call Protocol Specification

 No.13

セキュリティ機能セキュリティ機能RPCで提供される認証方式(ユーザ認証方式)  RPCメッセージのヘッダ部内に登録   (1)AUTH _ NONE     ・無認証(誰でもサービスが利用可能)   (2)AUTH _ UNIX(AUTH _ SYS)     ・UNIXにおけるユーザ情報を利用した認証      (ユーザID、グループID、ホスト名 etc.)   (3)AUTH _ DES     ・DES暗号方式を利用した認証      (公開鍵暗号、秘密鍵暗号)   ・ ・ ・認証方式はRPC実行前にクライアント側で設定   ・認証方式の変更:      クライアントプログラムの変更   ・新たな認証方式の採用: サーバプログラムも変更

Page 14: RPC:Remote Procedure Call Protocol Specification

 No.14

RPCメッセージの形式(呼び出RPCメッセージの形式(呼び出し時)し時)

xid

progvers

mtype

proc

bodyauth _flavour

auth _flavour

body

cred

verf

トランザクション識別子

メッセージタイプ(CALL / REPLY)

プログラム番号バージョン番号プロシージャ番号認証方式認証情報認証方式認証情報

サービス固有の引数・・・

クライアント側(credential)

サーバ側(verifier)

rpcvers RPCバージョン番号(=2)

Page 15: RPC:Remote Procedure Call Protocol Specification

 No.15

RPCメッセージの形式(RPCメッセージの形式( acceptaccept返答時)返答時)

xid

reply _ stat

accept _ stat

mtype

auth _flavour

bodyverf

トランザクション識別子

メッセージタイプ(CALL / REPLY)返答状態( ACCEPTED/DENIED)

受け付け状態( SUCCESS/ PROG_MISMATCH/... )

認証方式認証情報

サービス固有の処理結果・・・

サーバ側(verifier)

Page 16: RPC:Remote Procedure Call Protocol Specification

 No.16

RPCで利用する手続きの定義RPCで利用する手続きの定義・RPC言語を用いて利用する手続きのインタフェースを定義     XDRを拡張したもの・手続き本体(クライアント / サーバ)は別に記述・定義例(portmap)

program PMAP_PROG { version PMAP_VERS { void PMAPPROC_NULL(void) = 0; bool PMAPPROC_SET(mapping) = 1; bool PMAPPROC_UNSET(mapping) = 2; unsigned int PMAPPROC_GETPORT(mapping) = 3; pmaplist PMAPPROC_DUMP(void) = 4; call_result PMAPPROC_CALLIT(call_args) = 5; } = 2;} = 100000;

プログラム番号バージョン番号 プロシージャ番号

手続きの引数の型

手続きの戻り値の型

Page 17: RPC:Remote Procedure Call Protocol Specification

 No.17

RPCプログラムの作成RPCプログラムの作成ユーザが作成するもの  (1)クライアント側メインプログラム( XYZ_client.c )  (2)サーバ側で呼び出されるプログラム( XYZ_server.c )  (3)RPC言語による定義( XYZ.x )

自動生成されるもの( % rpcgen XYZ.x  により生成)  (4)RPCプログラムで利用するヘッダファイル( XYZ.h )  (5)クライアント側スタブプログラム( XYZ_clnt.c )  (6)XDRを利用するための手続き( XYZ_xdr.c )  (7)サーバ側メインプログラムとディスパッチ手続き( XYZ_svc.c )

(1)~(7)のファイルよりロードモジュールを作成  (A) XYZ_client  (B) XYZ_server

Page 18: RPC:Remote Procedure Call Protocol Specification

 No.18

RPCプログラム作成の流れRPCプログラム作成の流れ

XYZ_client.c XYZ.x XYZ_server.c

XYZ.hXYZ_clnt.c XYZ_svc.cXYZ_xdr.c

XYZ_clnt.oXYZ_client.o XYZ_svc.oXYZ_xdr.o XYZ_server.o

XYZ_client XYZ_server

rpcgenにより生成

ユーザが作成

ロードモジュール

Page 19: RPC:Remote Procedure Call Protocol Specification

 No.19

RPCの利用例RPCの利用例NFS(Version.3)  ・FreeBSD4.3‐RELEASEのソースコードを参照 ($SRC = http://www.jp.FreeBSD.org/cgi/cvsweb.cgi/src/)

・RPC言語によるNFSのためのインタフェース定義   : /usr/include/rpcsvc/nfs_prot.x ($SRC/include/rpcsvc/nfs_prot.x?rev=1.7)・カーネル内に手続き本体(クライアント / サーバ)を記述   : $SYS/nfs/krpc_subr.c ($SRC/sys/nfs/Attic/krpc_subr.c?rev=1.13.2.1) : $SYS/nfs/nfs_serv.c ($SRC/sys/nfs/Attic/nfs_serv.c?rev=1.93) etc.

Page 20: RPC:Remote Procedure Call Protocol Specification

 No.20

RPCを利用したNFSサービスRPCを利用したNFSサービスの流れの流れ

NFSクライアント NFSサーバ

VFSインタフェース

UFS NFSクライアント

RPC

システムコールインタフェース

NFSクライアント

RPC

UFS

VFSインタフェース

システムコールインタフェース

DK DK

カー

ユー

ザA

Page 21: RPC:Remote Procedure Call Protocol Specification

 No.21

NFSで利用する手続きの定義NFSで利用する手続きの定義

const NFS_PORT = 2049;...program NFS3_PROGRAM { version NFS_V3 { void NFSPROC3_NULL(void)           = 0; GETATTR3res NFSPROC3_GETATTR(GETATTR3args) = 1; SETATTR3res NFSPROC3_SETATTR(SETATTR3args) = 2; LOOKUP3res NFSPROC3_LOOKUP(LOOKUP3args) = 3; ACCESS3res NFSPROC3_ACCESS(ACCESS3args) = 4; ... COMMIT3res NFSPROC3_COMMIT(COMMIT3args) = 21; } = 3;} = 100003;

・NFS(Ver.3)で定義されている手続きの数は 22個・NFSのポート番号は 2049 番とあらかじめ決められている

nfs_prot.x 内の記述(抜粋)

Page 22: RPC:Remote Procedure Call Protocol Specification

 No.22

まとめまとめ

(1)参照RFCについて

(5)RPCの利用例(NFS)

(4)RPCプログラム作成の流れ

(3)RPCとは

(2)RFC1050の構成