Download presentation
Presentation is loading. Please wait.
1
RPC:Remote Procedure Call Protocol Specification
分散システム特論 RPC:Remote Procedure Call Protocol Specification 情報工学専攻 修士課程一年 谷口秀夫研究室 石井 陽介
2
発表手順 (1)参照RFCについて (2)RFC1050の構成 (3)RPCとは (4)RPCプログラム作成の流れ
(5)RPCの利用例(NFS) (6)まとめ
3
参照RFCについて ・RFC1050 (RPC) ・RFC1057 (RPC:Version2)
・RFC1050 (RPC) ・RFC1057 (RPC:Version2) ・RFC1831 (RPC:Version2)Standard Track ・RFC1014 (XDR) ・RFC1832 (XDR)Standard Track
4
RFC1050の構成 1. Introduction 2. Terminology 3. The RPC Model
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 Protocols 10. Record Marking Standard 11. The RPC Language Appendix: Port Mapper Program Protocol
5
RPCとは RPC(Remote Procedure Call)(遠隔手続き呼び出し)
RPC(Remote Procedure Call)(遠隔手続き呼び出し) ・処理要求全体を一つの手続き呼び出しとみなして実行する 「プロセス間通信」の方法の一つ ・NFS、NISなどで利用 ・代表的な実装(SunRPC、DCE RPC、CORBA etc.) RPCの特徴 (1)クライアント・サーバモデル (2)普通の手続き(関数)呼び出しと似た方法で通信可能 (3)コネクションが作られない (4)同期式通信(非同期も可) RPCにおける「遠隔(remote)」の概念 「別のコンピュータ」 「別のアドレス空間」
6
RPCの動作 クライアント サーバ クライアント側プログラム サーバ側プログラム クライアント側スタブ サーバ側スタブ
ネットワークインタフェース (TCP/IP,UDP/IP etc.) ネットワークインタフェース (TCP/IP,UDP/IP etc.)
7
RPC実現のためには (1)RPCサービスの特定 (2)RPC利用時に必要な情報 (3)データ交換形式 (4)セキュリティ機能
(5)RPCメッセージの形式 (6)RPCで利用する手続きの定義
8
RPCサービスの特定 三つの番号によりサービスを特定 (1)プログラム番号: (2)バージョン番号: (3)プロシージャ番号:
提供サービスを識別 サービス毎のバージョンを識別 実行可能な手続きを識別 プログラム番号の割当て 0x0 - 0x1fffffff Sunが定義 0x x3fffffff ユーザが独自に利用可能 0x x5fffffff APが動的に利用可能 0x x7fffffff reserved 0x x9fffffff reserved 0xa xbfffffff reserved 0xc xdfffffff reserved 0xe xffffffff reserved
9
RPC利用時に必要な情報 ・RPC利用時に必要な情報 (1)プログラム番号 (2)バージョン番号 (3)プロシージャ番号 ・通信に必要な情報
RPC利用時に必要な情報 ・RPC利用時に必要な情報 (1)プログラム番号 (2)バージョン番号 (3)プロシージャ番号 ・通信に必要な情報 (4)サーバマシンのIPアドレス (5)サーバプログラム(利用サービス)のポート番号 ・動作ホスト上で動的にポート番号を割当てる サーバプログラム ポート番号 対応関係を管理するサービス portmap
10
portmapサービス portmapサービスの特徴 (1)プログラム番号100000を持つ (2)ポート番号が固定されている
(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: 手続き呼び出し(ブロードキャスト時に利用)
11
portmapを利用したRPCの様子 RPCサービス起動時 RPCサービス呼び出し時 (port 111) portmap
(port 111) portmap (port XXX) サーバプログラム (port 111) portmap (1)ポート番号 問い合わせ (3)RPC 呼び出し ポートの 登録要求 利用可能ポートの 登録 (4)RPC 実行結果 (2)ポート番号 返答 サーバプログラム クライアントプログラム
12
データ交換形式 異なるマシン間でのデータのやり取り ・エンディアン問題を解決する必要がある RPCにおける解決法
・エンディアン問題を解決する必要がある RPCにおける解決法 ・XDR(External Data Representation Standard) というデータ交換形式を利用(ref.RFC1014 RFC1832) マシンAにおける データ形式 マシンBにおける データ形式 XDR marshaling unmarshaling
13
セキュリティ機能 RPCで提供される認証方式(ユーザ認証方式) RPCメッセージのヘッダ部内に登録 (1)AUTH_NONE
RPCメッセージのヘッダ部内に登録 (1)AUTH_NONE ・無認証(誰でもサービスが利用可能) (2)AUTH_UNIX(AUTH_SYS) ・UNIXにおけるユーザ情報を利用した認証 (ユーザID、グループID、ホスト名 etc.) (3)AUTH_DES ・DES暗号方式を利用した認証 (公開鍵暗号、秘密鍵暗号) ・ ・ ・ 認証方式はRPC実行前にクライアント側で設定 ・認証方式の変更: クライアントプログラムの変更 ・新たな認証方式の採用: サーバプログラムも変更
14
RPCメッセージの形式(呼び出し時) xid トランザクション識別子 mtype メッセージタイプ(CALL/REPLY) rpcvers
RPCバージョン番号(=2) prog プログラム番号 vers バージョン番号 proc プロシージャ番号 auth_flavour 認証方式 cred クライアント側(credential) body 認証情報 auth_flavour 認証方式 verf サーバ側(verifier) body 認証情報 ・ サービス固有の引数
15
RPCメッセージの形式(accept返答時)
xid トランザクション識別子 mtype メッセージタイプ(CALL/REPLY) reply_stat 返答状態(ACCEPTED/DENIED) auth_flavour 認証方式 verf サーバ側(verifier) body 認証情報 accept_stat 受け付け状態(SUCCESS/ PROG_MISMATCH/...) ・ サービス固有の処理結果
16
RPCで利用する手続きの定義 ・RPC言語を用いて利用する手続きのインタフェースを定義 XDRを拡張したもの
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; } = ; 手続きの 戻り値の型 バージョン番号 プロシージャ番号 プログラム番号
17
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
18
RPCプログラム作成の流れ ユーザが 作成 XYZ_client.c XYZ.x XYZ_server.c rpcgen により生成
XYZ_clnt.c XYZ.h XYZ_xdr.c XYZ_svc.c XYZ_client.o XYZ_clnt.o XYZ_xdr.o XYZ_svc.o XYZ_server.o ロードモジュール XYZ_client XYZ_server
19
RPCの利用例 NFS(Version.3) ・FreeBSD4.3‐RELEASEのソースコードを参照
・FreeBSD4.3‐RELEASEのソースコードを参照 ($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= ) : $SYS/nfs/nfs_serv.c ($SRC/sys/nfs/Attic/nfs_serv.c?rev=1.93) etc.
20
RPCを利用したNFSサービスの流れ NFSクライアント NFSサーバ ユーザAP システムコールインタフェース
カーネル VFSインタフェース VFSインタフェース UFS NFSクライアント NFSクライアント UFS RPC RPC DK DK
21
NFSで利用する手続きの定義 ・NFS(Ver.3)で定義されている手続きの数は22個
・NFSのポート番号は2049番とあらかじめ決められている nfs_prot.x 内の記述(抜粋) const NFS_PORT = ; ... 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; } = ;
22
まとめ (1)参照RFCについて (2)RFC1050の構成 (3)RPCとは (4)RPCプログラム作成の流れ
(5)RPCの利用例(NFS)
Similar presentations
© 2024 slidesplayer.net Inc.
All rights reserved.