[BACK]Return to start-session.tex CVS log [TXT][DIR] Up to [local] / OpenXM / doc / OpenXM-specs

Annotation of OpenXM/doc/OpenXM-specs/start-session.tex, Revision 1.7

1.7     ! takayama    1: %% $OpenXM: OpenXM/doc/OpenXM-specs/start-session.tex,v 1.6 2000/09/09 21:59:13 takayama 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
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.6       takayama   72: //&jp \subsection{byte order の決定} \label{subsection:byteorder}
                     73: //&eg \subsection{Negotiation of the byte order} \label{subsection:byteorder}
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
1.4       noro      101: A client and a server exchange one byte data soon after
1.2       noro      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.
1.3       noro      116: {\tt 0xFF} means that one wants to use the big endian order.
                    117: On each side, if the preference coincides with each other then
1.2       noro      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
1.4       noro      167: {\tt ox}, included in {\tt OpenXM/src/kxx},
1.2       noro      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
1.4       noro      172: a client informs both a control server and an engine of
1.2       noro      173: byte sequences as one time passwords.
                    174:
                    175: {\tt ox} is created from {\tt oxmain.c} and {\tt
1.3       noro      176: kan96xx/plugin/oxmisc.c}.  In {\tt ox} \\
                    177: {\tt oxTellMyByteOrder()}
1.2       noro      178: executes the exchange of the byte order information. In a client it is
                    179: done in {\tt oxSetByteOrder()}.
                    180:
                    181: One time passwords should be sent via secure communication channels.
1.3       noro      182: Note that in the current implementation of {\tt ox}, one time passwords
1.2       noro      183: are visible to all users logging in machines on which the server
1.3       noro      184: and the client run, assuming that there is no evil person among the users.
1.2       noro      185: One may use {\tt ssh} with {\tt -f } option when one wants to send
                    186: a one time password securely to a remote machine.
                    187:
                    188: The following example shows invocation of an {\tt ox\_sm1}
1.3       noro      189: server and the communication establishment on {\rm sm1}.
                    190: In this example {\tt ox} on the host {\tt dc1} is invoked from
1.2       noro      191: {\tt sm1} on the host {\tt yama}.
                    192: */
1.1       noro      193: {\footnotesize
                    194: \begin{verbatim}
                    195: yama% sm1
                    196: sm1>(ox.sm1) run ;
                    197: ox.sm1, --- open sm1 protocol module 10/1,1999  (C) N.Takayama. oxhelp for help
                    198: sm1>[(dc1.math.kobe-u.ac.jp) (taka)] sm1connectr-ssh /ox.ccc set ;
                    199: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
                    200: Done the initialization. port =1024
                    201: Hello from open. serverName is yama.math.kobe-u.ac.jp and portnumber is 0
                    202: Done the initialization. port =1025
                    203: [    4 , 1025 , 3 , 1024 ]
                    204: Executing the command : ssh -f dc1.math.kobe-u.ac.jp -l taka
                    205: "/home/taka/OpenXM/bin/oxlog /usr/X11R6/bin/xterm -icon
                    206: -e /home/taka/OpenXM/bin/ox -reverse -ox /home/taka/OpenXM/bin/ox_sm1
                    207: -host yama.math.kobe-u.ac.jp -data 1025 -control 1024 -pass 518158401   "
                    208: [
                    209: taka@dc1.math.kobe-u.ac.jp's password:
                    210: Trying to accept... Accepted.
                    211: Trying to accept... Accepted.
                    212:
                    213: Control port 1024 : Connected.
                    214:
                    215: Stream port 1025 : Connected.
                    216: Byte order for control process is network byte order.
                    217: Byte order for engine process is network byte order.
                    218: \end{verbatim}
                    219: }
                    220:
1.5       takayama  221: //&jp \subsection{OX サーバの利用例}
                    222: //&eg \subsection{Example of using OX servers}
                    223:
                    224: /*&jp
                    225: ox サーバを TCP/IP で $C$ より利用する例は
                    226: {\tt OpenXM/doc/oxlib/test1-tcp.c} にある.
                    227: */
                    228: /*&eg
1.7     ! takayama  229: An sample C source code to use ox servers by TCP/IP can be found
1.5       takayama  230: in {\tt OpenXM/doc/oxlib/test1-tcp.c}.
                    231: */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>