Annotation of OpenXM/doc/OpenXM-specs/start-session.tex, Revision 1.2
1.2 ! noro 1: %% $OpenXM: OpenXM/doc/OpenXM-specs/start-session.tex,v 1.1.1.1 2000/01/20 08:52:46 noro Exp $
1.1 noro 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
! 8: サーバの実装を容易にするために, サーバは, 起動時に file descriptor 3,
! 9: 4 がそれぞれクライアントからの入力, クライアントへの出力用に open され
! 10: ていると仮定する. すなわち, サーバ自体が通信を成立させるための socket
! 11: 操作を行う必要はない. 但し, OX message の効率よい送受信のために, data
! 12: のバッファリングを行うことはサーバ側の責任である. UNIX においては,
! 13: file descriptor へのbuffer の attach は {\tt fdopen()} で行うことがで
! 14: きる.
! 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
! 29: サーバは, クライアントから起動されるが, TCP/IP 接続のためには socket の
! 30: 生成から始まる一連の操作が必要である. 一方で, すでに述べたように, サーバ
! 31: 自体はそういう機能はもたない. launcher は, この両者の橋渡しをする application
! 32: である. launcher の働きは次の通りである.
! 33:
! 34: \begin{enumerate}
! 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 する.
! 42: \end{enumerate}
! 43:
! 44: 以上の操作のあと, launcher はコントロールサーバとなり, 自身が作った
! 45: したサーバの制御を行う.
! 46: */
! 47: /*&eg
! 48: Though there need several socket operations to establish a
! 49: connetion over TCP/IP, servers do not have any functionality for
! 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:
! 72: //&jp \subsection{byte order の決定}
! 73: //&eg \subsection{Negotiation of the byte order}
1.1 noro 74: /*&jp
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: おおきなボトルネックとなることがあることを了解しておくべきである.
1.2 ! noro 99: */
! 100: /*&eg
! 101: A client and a server exchanges one byte data soon after
! 102: the communication has started as follows.
! 103:
! 104: \begin{itemize}
! 105: \item The server writes one byte representing the preferable byte order
! 106: to the client,
! 107: then waits for one byte to come from the client.
! 108: \item After reading the byte, the client writes one byte representing the
! 109: preferable byte order to the server.
! 110: \end{itemize}
! 111:
! 112: The one byte data is {\tt 0}, {\tt 1} or {\tt 0xFF}.
! 113: {\tt 0} means that one wants to use the network byte order to
! 114: send 16 or 32bit quantities.
! 115: {\tt 1} means that one wants to use the little endian order.
! 116: {\tt 0xFF} means that one wants to use the little endian order.
! 117: On each side, if the preference coicides with each other then
! 118: the byte order is used. Otherwise the network byte order is used.
! 119:
! 120: If a system implements only the network byte order, then
! 121: it is sufficient to send always {\tt 0}.
! 122: However unnecessary byte order conversion may add large overhead
! 123: and it is often a bottle-neck on fast networks.
! 124: */
1.1 noro 125:
126: \begin{verbatim}
127: #define OX_BYTE_NETWORK_BYTE_ORDER 0
128: #define OX_BYTE_LITTLE_ENDIAN 1
129: #define OX_BYTE_BIG_ENDIAN 0xff
130: \end{verbatim}
131:
1.2 ! noro 132: //&jp \subsection{launcher の例 : {\tt ox}}
! 133: //&eg \subsection{An example of launcher : {\tt ox}}
! 134: /*&jp
1.1 noro 135: 注意: {\tt OpenXM/src/kxx} に含まれる, {\tt ox} (コントロールプロセス,
136: 計算プロセスをたちあげるローンチャ)は, 標準で One Time Password
137: の機能をもっています.
138: この機能を OFF にするには {\tt -insecure} option を使用して下さい.
139: One Time Password は 0 で終了するバイト列であり,
140: コントロール, 計算双方のプロセスをたちあげるまえに,
141: {\tt ox} はコントロール, 計算双方のプロセスに対応する,
142: ふたつのポートに
143: One Time Password バイト列を送出しています.
144:
145: {\tt ox} (ソースは {\tt oxmain.c}, {\tt kan96xx/plugin/oxmisc.c})においては
146: {\tt oxTellMyByteOrder()} が, サーバについての byte order 情報の
147: 送出, 読み込みをやっている.
148: クライアントについては,
149: {\tt oxSetByteOrder()} が, byte order 情報の読み込み, 送出をおこなっている.
150:
151: One time パスワードは安全な通信路で配送される必要があります.
152: また, 現在の {\rm ox} の実装では, One time パスワードを
153: サーバ, クライアントに login している人はすべて見ることが
154: できますので, サーバ, クライアントには悪意のある人はいないと
155: 仮定しないといけません.
156: One time パスワードを安全に配送し, リモートマシンの {\rm ox}
157: を立ち上げるには
158: たとえば
159: {\tt ssh} を {\tt -f } オプションを用いて使用します.
160:
161: 以下は {\rm sm1} での実装, 動作例です.
162: ここでは, {\tt yama} の {\tt sm1} より {\tt dc1} の {\tt ox}
163: を立ち上げています.
1.2 ! noro 164: */
! 165: /*&eg
! 166: \noindent
! 167: Remark: {\tt ox}, included in {\tt OpenXM/src/kxx},
! 168: is a launcher to invoke an engine. After invoking an
! 169: engine, it acts as a control server. By default {\tt ox} requires
! 170: a one time password. To skip it, use {\tt -insecure} option.
! 171: A one time password is a null-terminated byte sequence and
! 172: a client informs the both a control server and an engine of
! 173: byte sequences as one time passwords.
! 174:
! 175: {\tt ox} is created from {\tt oxmain.c} and {\tt
! 176: kan96xx/plugin/oxmisc.c}. In {\tt ox} {\tt oxTellMyByteOrder()}
! 177: executes the exchange of the byte order information. In a client it is
! 178: done in {\tt oxSetByteOrder()}.
! 179:
! 180: One time passwords should be sent via secure communication channels.
! 181: Note that in the current implementation of {\rm ox}, one time passwords
! 182: are visible to all users logging in machines on which the server
! 183: and the client run, assuming that there is no evil person in the users.
! 184: One may use {\tt ssh} with {\tt -f } option when one wants to send
! 185: a one time password securely to a remote machine.
! 186:
! 187: The following example shows invocation of an {\tt ox\_sm1}
! 188: server and the comminucation establishment on {\rm sm1}.
! 189: In this example {\tt ox} on the host {\tt ox} is invoked from
! 190: {\tt sm1} on the host {\tt yama}.
! 191: */
1.1 noro 192: {\footnotesize
193: \begin{verbatim}
194: yama% sm1
195: sm1>(ox.sm1) run ;
196: ox.sm1, --- open sm1 protocol module 10/1,1999 (C) N.Takayama. oxhelp for help
197: sm1>[(dc1.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set ;
198: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
199: Done the initialization. port =1024
200: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
201: Done the initialization. port =1025
202: [ 4 , 1025 , 3 , 1024 ]
203: Executing the command : ssh -f dc1.math.kobe-u.ac.jp -l taka
204: "/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon
205: -e /home/taka/OpenXM/bin/ox -reverse -ox /home/taka/OpenXM/bin/ox_sm1
206: -host yama.math.kobe-u.ac.jp -data 1025 -control 1024 -pass 518158401 "
207: [
208: taka@dc1.math.kobe-u.ac.jp's password:
209: Trying to accept... Accepted.
210: Trying to accept... Accepted.
211:
212: Control port 1024 : Connected.
213:
214: Stream port 1025 : Connected.
215: Byte order for control process is network byte order.
216: Byte order for engine process is network byte order.
217: \end{verbatim}
218: }
219:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>