Transport Layer Interface (TLI)
Transport Layer Interface(TLI)は、1987年に
AT&Tの
UNIX System V Release 3.0において導入されたネットワーク用の
アプリケーションプログラミングインタフェース(API)です。TLIは、その後の
UNIX System V Release 4でもサポートされており、特にBSDソケットと対抗するために開発されました。TLIは、
The Open GroupによってXTI(X/
Open Transport Interface)として標準化され、広く使用されています。
概要
TLIは、
OSI参照モデルに沿った設計であり、OSIの
トランスポート層に適合しています。これにより、
Transmission Control Protocol (TCP)、Xerox Network Systems (XNS)、
Systems Network Architecture (SNA)、X.25、および
Asynchronous Transfer Mode (ATM)などの複数のトランスポートプロバイダで動作することが可能です。APIとしてのTLIは、ソケットに似た機能を提供しますが、ソケットがインターネットプロトコルスイートに依存しているのに対し、TLIはプロトコルから独立しています。
XTIは、TLIの機能を拡張した
ライブラリAPI、ヘッダファイル群、そして関連する
STREAMSモジュールから成り、システムの動作規則や制限が設定されています。TLIおよびXTIは、
UNIX98までは
POSIXソケットAPIよりも広く利用されていました。特に
SolarisなどのSVR4から派生した
オペレーティングシステム(OS)や
UNIXブランドのOS(
UNIX 95や
UNIX 98準拠のOSなど)では、今でもサポートされています。また、Mac OSでも
Open Transportという名称で用いられています。
プロトコル独立性
TLIおよびXTIは、プロトコルに依存しない設計が特徴ですが、アプリケーションは使用するプロトコルを指定する必要があります。プロトコル知識を排除するためには、Network Selection Facilitiesを利用することが推奨されます。これは、XTI/TLI
ライブラリの一部として実装されています。
XTI/TLIとソケットの比較
XTI/TLIとBSDソケットは似た機能を持っていますが、互換性がない場合もあります。特に、
ライブラリ関数における呼び出し順序の規定があり、状態インジケータを使用している点が異なります。ソケットAPIの関数は複数の状態で呼び出せることがありますが、XTIのAPI関数は特定の状態でしか呼び出せない設計になっています。
非同期モード
XTI/TLIには非同期モードが存在し、リアルタイム性を必要とするアプリケーションに適しています。非同期モードを利用しない場合、データの待機中にブロックされる可能性がありますが、初期化時にO_NONBLOCKパラメータを指定することで非同期モードを有効にできます。この場合、接続要求や新規データの到着、タイムアウトなどのイベントが非同期に通知されます。
XTIでの改善点
XTIではTLIからの改良点がいくつかあり、エラーメッセージの充実やフロー制御のための新たなイベントの追加、パラメータ指定の簡素化が行われました。さらに、特定の条件下でのブロックを防ぐために、qlenの値をチェックするなどの改善もなされました。さらに、t_strerror()やt_getprotaddr()といった新しいインターフェースが追加されました。
実装
XTI/TLIは主に
UNIX System Vでの実装が行われていますが、
Linux向けのOpenSS7といった他の実装例も存在します。
参考文献
- - Goodheart, Berny; James Cox (1994). The magic garden explained: the internals of UNIX System V Release 4, an open-systems design. Prentice Hall.
- - Open Group (2000). Networking Services (XNS) Issue 5.2. The Open Group.
TLIは、歴史の中で重要な位置を占めるネットワークAPIであり、そのプロトコル独立性や拡張性により、多彩な環境での使用が可能です。