Annotation of OpenXM/doc/OpenXM-specs/start-session.tex, Revision 1.9
1.9 ! takayama 1: %% $OpenXM: OpenXM/doc/OpenXM-specs/start-session.tex,v 1.8 2005/03/04 03:49:47 takayama Exp $
! 2: //&jp \section{TCP/IP でのセッションのスタート}
1.2 noro 3: //&eg \section{How to start a session on TCP/IP}
1.1 noro 4:
1.2 noro 5: \subsection{Standard I/O on OX servers}
6:
7: /*&jp
1.9 ! takayama 8: サーバの実装を容易にするために, サーバは, 起動時に file descriptor 3,
! 9: 4 がそれぞれクライアントからの入力, クライアントへの出力用に open され
! 10: ていると仮定する. すなわち, サーバ自体が通信を成立させるための socket
! 11: 操作を行う必要はない. 但し, OX message の効率よい送受信のために, data
! 12: のバッファリングを行うことはサーバ側の責任である. UNIX においては,
! 13: file descriptor へのbuffer の attach は {\tt fdopen()} で行うことがで
! 14: きる.
1.2 noro 15: */
16:
17: /*&eg
18: In order to make it easy to implement servers, one can assume that
19: any server has two opened socket descriptors 3 and 4,
20: which are for input from a client and for output to a client respectively.
21: That is, servers do not have to do socket operations to establish
22: connections. However servers are responsible for buffering data
23: to exchange OX messages efficiently. Note that associating a buffered stream
24: with a descriptor can be done by {\tt fdopen()}.
25: */
26:
27: \subsection{Launcher}
28: /*&jp
1.9 ! takayama 29: サーバは, クライアントから起動されるが, TCP/IP 接続のためには socket の
! 30: 生成から始まる一連の操作が必要である. 一方で, すでに述べたように, サーバ
! 31: 自体はそういう機能はもたない. launcher は, この両者の橋渡しをする application
! 32: である. launcher の働きは次の通りである.
1.2 noro 33:
34: \begin{enumerate}
1.9 ! takayama 35: \item launcher はクライアントが起動する. launcher には使用する port 番号,
! 36: サーバ application のファイル名が伝えられる.
! 37: \item client はまず launcher と通信を成立させる. この際, one time password
! 38: が用いられる場合もある.
! 39: \item launcher は新しいプロセスを起動し, そのプロセスにおいて client と通信
! 40: を成立させる. そして, その通信路が file descriptor の 3, 4 となるように
! 41: セットし, サーバを exec する.
1.2 noro 42: \end{enumerate}
43:
1.9 ! takayama 44: 以上の操作のあと, launcher はコントロールサーバとなり, 自身が作った
! 45: したサーバの制御を行う.
1.2 noro 46: */
47: /*&eg
48: Though there need several socket operations to establish a
1.3 noro 49: connection over TCP/IP, servers do not have any functionality for
1.2 noro 50: connection establishment.
51: An application called {\it launcher} is provided to start servers
52: and to establish connections as follows.
53:
54: \begin{enumerate}
55: \item A launcher is invoked from a client.
56: When the launcher is invoked, the client
57: informs the launcher of a port number for TCP/IP connection
58: and the name of a server.
59: \item The launcher and the client establish a connection with the
60: specified port number. One time password may be used to prevent
61: launcher spoofing.
62: \item The launcher creates a process and establishes a connection
63: to the client. Then the launcher arranges for the newly created descriptors
64: to be 3 and 4, and executes the specified server.
65: \end{enumerate}
66:
67: After finishing the above task as a launcher, the launcher process
68: acts as a control server and controls the server process created by
69: itself.
70: */
71:
1.9 ! takayama 72: //&jp \subsection{byte order の決定} \label{subsection:byteorder}
1.6 takayama 73: //&eg \subsection{Negotiation of the byte order} \label{subsection:byteorder}
1.1 noro 74: /*&jp
1.9 ! takayama 75: コントロールプロセス, 計算プロセス
! 76: ともに, 起動直後に
! 77: 1 byte のデータを書き出し flush する.
! 78: そのあと, 1 byte のデータを読み込む.
! 79: クライアントはコントロールプロセス, 計算プロセス
! 80: につながるファイルディスクリプタの両方から
! 81: まず 1 byte のデータを読む.
! 82: そのあと
! 83: 1 byte のデータを書き出し flush する.
! 84: 1 byte のデータは,
! 85: {\tt 0}, {\tt 1}, {\tt FF} のどれかであり,
! 86: {\tt 0} は以下の通信において {\tt int32} をおくるのに,
! 87: network byte order を使用したい,
! 88: {\tt 1} は以下の通信において {\tt int32} をおくるのに,
! 89: little endian を使用したい,
! 90: {\tt FF} は以下の通信において {\tt int32} をおくるのに,
! 91: big endian を使用したい,
! 92: という意味である.
! 93: 両者の希望が一致しない場合はつねに {\tt 0} (network byte order)
! 94: を使用する.
! 95: Network byte order しか実装していないシステムでは,
! 96: {\tt 0} をおくればよい.
! 97: ただし効率が問題となる通信において, network byte order への変換は
! 98: おおきなボトルネックとなることがあることを了解しておくべきである.
! 99:
! 100: 64 bit machine double および 128 bit machine double (浮動小数点数)
! 101: のやりとりに際しても,
! 102: 上と同様な方法をもちいるものとする.
! 103: すなわち {\tt double64 *} を {\tt int32 *} にキャストしてから,
! 104: 中身を {\tt int32} と同様の処理方法で送受信する.
! 105: 例については {\tt CMO\_64BIT\_MACHINE\_DOUBLE} を見よ.
1.2 noro 106: */
107: /*&eg
1.4 noro 108: A client and a server exchange one byte data soon after
1.2 noro 109: the communication has started as follows.
110:
111: \begin{itemize}
112: \item The server writes one byte representing the preferable byte order
113: to the client,
114: then waits for one byte to come from the client.
115: \item After reading the byte, the client writes one byte representing the
116: preferable byte order to the server.
117: \end{itemize}
118:
119: The one byte data is {\tt 0}, {\tt 1} or {\tt 0xFF}.
120: {\tt 0} means that one wants to use the network byte order to
121: send 16 or 32bit quantities.
122: {\tt 1} means that one wants to use the little endian order.
1.3 noro 123: {\tt 0xFF} means that one wants to use the big endian order.
124: On each side, if the preference coincides with each other then
1.2 noro 125: the byte order is used. Otherwise the network byte order is used.
126:
127: If a system implements only the network byte order, then
128: it is sufficient to send always {\tt 0}.
129: However unnecessary byte order conversion may add large overhead
130: and it is often a bottle-neck on fast networks.
1.8 takayama 131:
132: In order to send and receive 64 bit machine double (floating point number)
133: and 128 bit machine double,
134: we use the same byte order.
135: In other words, we cast {\tt double64 *} to {\tt int32 *} and
136: send the array of 4 bytes by the same method with sending {\tt int32}.
137: As to examples, see the section on {\tt CMO\_64BIT\_MACHINE\_DOUBLE}.
1.2 noro 138: */
1.1 noro 139:
140: \begin{verbatim}
141: #define OX_BYTE_NETWORK_BYTE_ORDER 0
142: #define OX_BYTE_LITTLE_ENDIAN 1
143: #define OX_BYTE_BIG_ENDIAN 0xff
144: \end{verbatim}
145:
1.9 ! takayama 146: //&jp \subsection{launcher の例 : {\tt ox}}
1.2 noro 147: //&eg \subsection{An example of launcher : {\tt ox}}
148: /*&jp
1.9 ! takayama 149: 注意: {\tt OpenXM/src/kxx} に含まれる, {\tt ox} (コントロールプロセス,
! 150: 計算プロセスをたちあげるローンチャ)は, 標準で One Time Password
! 151: の機能をもっています.
! 152: この機能を OFF にするには {\tt -insecure} option を使用して下さい.
! 153: One Time Password は 0 で終了するバイト列であり,
! 154: コントロール, 計算双方のプロセスをたちあげるまえに,
! 155: {\tt ox} はコントロール, 計算双方のプロセスに対応する,
! 156: ふたつのポートに
! 157: One Time Password バイト列を送出しています.
! 158:
! 159: {\tt ox} (ソースは {\tt oxmain.c}, {\tt kan96xx/plugin/oxmisc.c})においては
! 160: {\tt oxTellMyByteOrder()} が, サーバについての byte order 情報の
! 161: 送出, 読み込みをやっている.
! 162: クライアントについては,
! 163: {\tt oxSetByteOrder()} が, byte order 情報の読み込み, 送出をおこなっている.
! 164:
! 165: One time パスワードは安全な通信路で配送される必要があります.
! 166: また, 現在の {\rm ox} の実装では, One time パスワードを
! 167: サーバ, クライアントに login している人はすべて見ることが
! 168: できますので, サーバ, クライアントには悪意のある人はいないと
! 169: 仮定しないといけません.
! 170: One time パスワードを安全に配送し, リモートマシンの {\rm ox}
! 171: を立ち上げるには
! 172: たとえば
! 173: {\tt ssh} を {\tt -f } オプションを用いて使用します.
! 174:
! 175: 以下は {\rm sm1} での実装, 動作例です.
! 176: ここでは, {\tt yama} の {\tt sm1} より {\tt dc1} の {\tt ox}
! 177: を立ち上げています.
1.2 noro 178: */
179: /*&eg
180: \noindent
1.4 noro 181: {\tt ox}, included in {\tt OpenXM/src/kxx},
1.2 noro 182: is a launcher to invoke an engine. After invoking an
183: engine, it acts as a control server. By default {\tt ox} requires
184: a one time password. To skip it, use {\tt -insecure} option.
185: A one time password is a null-terminated byte sequence and
1.4 noro 186: a client informs both a control server and an engine of
1.2 noro 187: byte sequences as one time passwords.
188:
189: {\tt ox} is created from {\tt oxmain.c} and {\tt
1.3 noro 190: kan96xx/plugin/oxmisc.c}. In {\tt ox} \\
191: {\tt oxTellMyByteOrder()}
1.2 noro 192: executes the exchange of the byte order information. In a client it is
193: done in {\tt oxSetByteOrder()}.
194:
195: One time passwords should be sent via secure communication channels.
1.3 noro 196: Note that in the current implementation of {\tt ox}, one time passwords
1.2 noro 197: are visible to all users logging in machines on which the server
1.3 noro 198: and the client run, assuming that there is no evil person among the users.
1.2 noro 199: One may use {\tt ssh} with {\tt -f } option when one wants to send
200: a one time password securely to a remote machine.
201:
202: The following example shows invocation of an {\tt ox\_sm1}
1.3 noro 203: server and the communication establishment on {\rm sm1}.
204: In this example {\tt ox} on the host {\tt dc1} is invoked from
1.2 noro 205: {\tt sm1} on the host {\tt yama}.
206: */
1.1 noro 207: {\footnotesize
208: \begin{verbatim}
209: yama% sm1
210: sm1>(ox.sm1) run ;
211: ox.sm1, --- open sm1 protocol module 10/1,1999 (C) N.Takayama. oxhelp for help
212: sm1>[(dc1.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set ;
213: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
214: Done the initialization. port =1024
215: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
216: Done the initialization. port =1025
217: [ 4 , 1025 , 3 , 1024 ]
218: Executing the command : ssh -f dc1.math.kobe-u.ac.jp -l taka
219: "/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon
220: -e /home/taka/OpenXM/bin/ox -reverse -ox /home/taka/OpenXM/bin/ox_sm1
221: -host yama.math.kobe-u.ac.jp -data 1025 -control 1024 -pass 518158401 "
222: [
223: taka@dc1.math.kobe-u.ac.jp's password:
224: Trying to accept... Accepted.
225: Trying to accept... Accepted.
226:
227: Control port 1024 : Connected.
228:
229: Stream port 1025 : Connected.
230: Byte order for control process is network byte order.
231: Byte order for engine process is network byte order.
232: \end{verbatim}
233: }
234:
1.9 ! takayama 235: //&jp \subsection{OX サーバの利用例}
1.5 takayama 236: //&eg \subsection{Example of using OX servers}
237:
238: /*&jp
1.9 ! takayama 239: ox サーバを TCP/IP で $C$ より利用する例は
! 240: {\tt OpenXM/doc/oxlib/test1-tcp.c} にある.
1.5 takayama 241: */
242: /*&eg
1.7 takayama 243: An sample C source code to use ox servers by TCP/IP can be found
1.5 takayama 244: in {\tt OpenXM/doc/oxlib/test1-tcp.c}.
245: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>