[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.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>