Transport Layer Interface
Transport Layer Interface (TLI、トランスポート層インタフェース)とは、1987年にAT&Tの UNIX System V Release 3.0 で提供されたネットワーク用APIであり[1]、Release 4 (SVR4) でもサポートが継続された[2]。BSDのソケットに対抗した System V のAPIである。TLI は後に The Open Group が XTI (X/Open Transport Interface) として標準化した[3]。実装は下位に位置するキャラクタ型入出力機構であるSTREAMSと密接に関連している。
目次 |
概要 [編集]
当時、OSIプロトコルが TCP/IP に取って代わると予測されていたため、TLI は OSI参照モデルに準拠したプロトコルから独立した仕様になっており、OSI のトランスポート層に対応している[4]。XTI/TLIを使ったプログラムは、Transmission Control Protocol (TCP)、Xerox Network Systems (XNS)、Systems Network Architecture (SNA)、X.25、Asynchronous Transfer Mode (ATM) などOSI参照モデルの第4層の機能を提供する様々なトランスポート層プロバイダ上で動作可能である[5]。
APIとしてはソケットと同様の機能を提供しているが、ソケットがインターネット・プロトコル・スイートと密接に関連しているのに対し、XTI/TLIはプロトコルから独立している[6]。XTIは、連携するSTREAMSモジュール、ライブラリAPI、ヘッダファイル群、XTIプロセスの動作に関する規則や制限で構成されている[6]。
TLIとXTIは UNIX 98 まではPOSIXソケットAPIよりも好まれ、広く使われていた[7]。TLIとXTIは、SolarisなどSVR4から派生したOSやUNIXブランド (UNIX 95, UNIX 98, UNIX03 Single UNIX Specification) 準拠のOSでは今もサポートされている。また、Mac OS でも Open Transport という名称で使われた。UNIX 95 (XPG4) と UNIX 98 (XPG5.2) ではXTIがサポート推奨APIとなっていた[7][5]。その後 Single UNIX Specification においてSTREAMSを実装していないBSDやLinuxを考慮すべきだという議論が起き、UNIX 03 ではSTREAMSとXTIをオプションとし、POSIXソケットをサポート推奨APIとした。
プロトコル独立性 [編集]
XTI/TLIはプロトコルから独立している。しかし、どのプロトコルを使うかを指定する必要があるため、結局アプリケーションは使用するプロトコルについて知っている必要がある[8]。使用するプロトコルに関する知識もアプリケーションから排除するには、Network Selection Facilities を使用する。これはXTI/TLIライブラリ (libnsl) の一部となっている[9]。
XTI/TLI とソケットの比較 [編集]
XTI/TLIとBSDソケットは似ているが、完全に同じというわけではなく、同じ役割の関数が異なる振る舞いをすることも多い。UNIX SVR3[10] と SVR4[4] ではTLIとソケットがSTREAMSの Transport Service Interface の上に実装されている。
下記の表はPOSIXでのXTIとソケットのインタフェースを比較したものである。
| XTI/TLI インタフェース | ソケットインタフェース | 意味論的に同一か |
|---|---|---|
| t_open | socket | イエス。ただし t_open はオープン時に t_getinfo を実行可能 |
| - | socketpair | - |
| t_getinfo | - | - |
| t_getprotaddr | getsockname, getpeername | イエス。しかし t_getprotaddr は対応する2つの機能を1つで実行可能 |
| t_bind | bind, listen | イエス。ただし t_bind は対応する2つの機能を1回のコールで実施可能 |
| t_optmgmt | getsockopt, setsockopt | イエス。ただし t_optmgmt はデフォルト値と調停値を取得できるのに対し、getsockopt と setsockopt は現在値しか取得/更新できない。 |
| t_unbind | bind | イエス。ソケットの場合 AF_UNSPEC を指定することで unbind 相当になる。 |
| t_close | close | イエス。ただし、t_close では常にアボート的切断になるのに対し、close は終了を待ち合わせて解放することもある。 |
| t_getstate | - | - |
| t_sync | - | - |
| t_alloc | - | - |
| t_free | - | - |
| t_look | select, getsockopt | select と getsockopt(SO_ERROR) は t_lock の全機能をカバーしていない。 |
| t_error | perror | イエス。ただし XTI は通常のerrnoに追加的に t_errno を使用し、トランスポート層のエラーだけでなくUNIXシステムのエラーも示すことができる。 |
| t_strerror | strerror | イエス |
| t_connect | connect | t_connect の前に t_bind が必須である。 |
| t_rcvconnect | select | t_rcvconnect は、select で O_NONBLOCK を指定した場合と同等である。 |
| t_listen, t_accept, t_snddis | accept | accept は接続を拒否できないが、t_listen で受け付けた接続要求はその後の t_accept で始めて許可され、t_snddis を使えば拒否できる。 |
| t_snd, t_sndv | send, sendto, sendmsg | イエス。しかし t_snd と t_sndv はコネクションモードのトランスポートでのみ使用。 |
| t_rcv, t_rcvv | recv, recvfrom, recvmsg | イエス。ただし t_rcv と t_rcvv はコネクションモードのトランスポートでのみ使用。 |
| t_snddis | close, shutdown | t_snddis を発行後も接続要求を listen し続けることができ、t_connect で接続を再確立することもできる。close はソケットのファイル記述子を解放してしまう。通信を続ける場合、ソケットでは新たに接続を確立する準備をしなければならない。 |
| t_rcvdis | ENOTCONN, ECONNRESET, EPIPE, SIGPIPE | イエス。ただし、ソケットではエラーまたはシグナルで通知。 |
| t_sndrel, t_sndreldata | shutdown | イエス。しかし shutdown には通常解放時にデータを送信する機能はなく、t_sndreldata は通常解放時にデータを送信できる。t_sndrel は単にシャットダウンだけを行う。 |
| t_rcvrel, t_rcvreldata | - | - |
| t_sndudata, t_sndvudata | sendmsg | イエス。しかし t_sndudata と t_sndvudata はコネクションレス・モードでのみ使用。 |
| t_rcvudata, t_rcvvudata | recvmsg | イエス。しかし t_rcvudata と t_rcvvudata はコネクションレス・モードでのみ使用。 |
| t_rcvuderr | - | - |
| read, write | read, write | XTI/TLI では read/write を使用する前に tirdwr モジュールをSTREAMSにプッシュする必要がある。 |
ライブラリ関数には呼び出し順序の規定があるため、XTI/TLIは状態インジケータを使用しており、ソケットAPIにも同様の仕組みがある。ただし、ソケットのAPI関数は複数の状態で呼び出せることがあるのに対し、XTIのAPI関数は特定の状態でないと呼び出せないようになっている。
XTI/TLI 非同期モード [編集]
XTI/TLIには非同期モードがあり、リアルタイム性が要求されるアプリケーションで利用できる。非同期モードでない場合、データを待ち続けてずっとブロックされる可能性がある。初期化の際に O_NONBLOCK というパラメータを指定すると非同期モードになる。その場合、接続要求、新規データ到着、タイムアウトなどのイベントを非同期にアプリケーションに通知する。
XTIでの改良点 [編集]
XTIでTLIから改良した点として、エラーメッセージの追加、フロー制御のためのイベント追加、パラメータ指定の簡素化(オープンの際はデフォルトでリード・ライトとなるなど)がある。また、t_listen でずっとブロックしてしまうのを防ぐため qlen の値をチェックするようになった。さらに t_strerror() と t_getprotaddr() というインタフェースが追加された。
実装 [編集]
XTI/TLIは UNIX System V で実装されているが、Linux向けの OpenSS7 などの実装例もある。
脚注 [編集]
- ^ Goodheart 1994, p. 11
- ^ Goodheart 1994, p. 17
- ^ Stevens 1994, pp. 17–18
- ^ a b Goodheart 1994, pp. 519
- ^ a b XNS 5
- ^ a b Goodheart 1994, p. 523
- ^ a b XNS 5.2
- ^ Introduction to Networking Technologies IBM redbooks
- ^ Stevens 1990
- ^ Waite 1987, pp. 295–304
参考文献 [編集]
- Goodheart, Berny; James Cox (1994). The magic garden explained: the internals of UNIX System V Release 4, an open-systems design. Australia: Prentice Hall. ISBN 0-13-098138-9.
- Open Group (February 1997). Networking Services (XNS) Issue 5. CAE Specification. XNS (5th ed.). Berkshire, U.K.: The Open Group. ISBN 1-85912-165-9.
- Open Group (January 2000). Networking Services (XNS) Issue 5.2. CAE Specification. XNS (5.2th ed.). Berkshire, U.K.: The Open Group.
- Nuss, Branko (January 2000). RTFM!!! Issue 5.2. CAE Specification. 1 (1.0 ed.). Akron, OH: Addison-Wesley.
- Pajari, George (1992) [1991]. Writing UNIX Device Drivers (2nd Printing ed.). Reading, MA: Addison-Wesley. ISBN 0-201-52374-4.
- Santa Cruz Operation (1997). System V Application Binary Interface — Intel386 Architecture Processor Supplement (4th ed.). Santa Cruz, CA: The Santa Cruz Operation, Inc..
- Santa Cruz Operation (1997). System V Application Binary Interface (4.1th ed.). Santa Cruz, CA: The Santa Cruz Operation, Inc..
- Stevens, W. Richard (1990). UNIX Network Programming. Englewood Cliffs, N.J.: Prentice-Hall. ISBN 0-13-949876-1.
- Stevens, W. Richard (1993). Advanced Programming in the UNIX Environment (1st Edition, 15th Printing ed.). Reading, MA: Addison-Wesley. ISBN 0-201-56317-7.
- Stevens, W. Richard (1994). TCP/IP Illustrated: the protocols. Reading, Mass.: Addison-Wesley. ISBN 0-201-63346-9.
- Thomas, Rebecca; Lawrence R. Rogers, Jean L. Yates (1986). Advanced Programmers Guide to UNIX System V. Berkeley, CA: Osborne McGraw-Hill. ISBN 0-07-881211-9.
- UNIX System Laboratories (1995). System V Application Binary Interface (4th ed.). Englewood Cliffs, N.J.: UNIX System Laboratories.
- Waite Group (1987). Mitchel Waite. ed. UNIX Papers (2nd Printing ed.). Indianapolis, IN: Howard W. Sams & Company. ISBN 0-672-22578-6.
- Zucker, Steve; Kari Karhi (1995). System V Application Binary Interface—PowerPc Processor Supplement. Mountain View, CA: SunSoft.
関連項目 [編集]
- X/Open Protability Guide (XPG) - POSIXの前身
- コンピュータネットワーク