1    ネットワーク・プログラミング環境の概要

ネットワーク・プログラミング環境には,アプリケーション,カーネル,およびドライバの開発者が,ネットワーク・アプリケーションを作成したり,ネットワーク・プロトコルをインプリメントするためのプログラミング・インタフェースが含まれます。 さらに,アプリケーションがデータの処理および伝送に必要とする,カーネル・レベルのリソースも含まれます。 これには,ライブラリ,データ構造体,ヘッダ・ファイル,トランスポート・プロトコルなどがあります。

この章では,ネットワーク・プログラミング環境の概要を説明します。 特に,データ・リンク・インタフェースおよびアプリケーション・プログラミング・インタフェースが,ユーザ空間のアプリケーションから,カーネル空間のネットワーク層を介して,ネットワークとデータのやりとりをする方法について詳しく説明します。

インタフェースをサポートするカーネルのリソースについては,後の章で説明します。 各章では,それぞれのインタフェースについて,特定のシステム・コール,ライブラリ・コール,データ構造体,およびその他のプログラミング上の留意点を説明します。

表 1-1 に,ネットワーク・プログラミング環境の主な構成要素をまとめます。

表 1-1:  ネットワーク・プログラミング環境の構成要素

構成要素 インタフェース 説明
データ・リンク・インタフェース データ・リンク・インタフェース (DLI) プログラムがデータ・リンク層にアクセスして,他のシステム上の DLI プログラムと通信できるようにする。 DLI は,ULTRIX との互換性のために,Tru64 UNIX で提供されている。 付録 F を参照。
  dlb インタフェース STREAMS プロトコル・モジュールをターゲットとするカーネル・レベルのインタフェース。 データ・リンク・サービスを使用または提供する。 dlb STREAMS 擬似ドライバはデータ・リンク・プロバイダ・インタフェース (DLPI) のサブセットをインプリメントする。 第 2 章,および /usr/share/doclib/dlpi ディレクトリにあるデータ・リンク・プロバイダ仕様 (dlpi.ps) を参照。 DLPI 仕様にオンラインでアクセスするには,OSFPGMRnnn サブセットがインストールされていなければならない。
アプリケーション・プログラミング・インタフェース ソケット 事実上の業界標準のプログラミグ・インタフェース。 Tru64 UNIX では,4.3BSD,4.4BSD,XNS4.0,および POSIX 1003.1g Draft 6.6 ソケット・インタフェースをインプリメントする。 TCP,UDP,IP,ARP,ICMP,およびSLIPからなるインターネット・プロトコル群がソケット上にインプリメントされる。 RFC 1200: 『IAB Protocol Standardsおよび第 4 章を参照。
  STREAMS デバイス・ドライバおよびネットワーキング・プロトコル・スタックのインプリメンテーションをサポートするカーネル機能。 STREAMS フレームワークは,カーネル・レベルとユーザ・レベル間,およびカーネル内の文字入出力用のインタフェース標準を定義する。 Tru64 UNIX オペレーティング・システムは,AT&T System V Release 4.0 の STREAMS 互換バージョンを提供する。 第 5 章を参照。
  XTI/TLI プロトコルに依存しないトランスポート層アプリケーション・インタフェース。 関数の集まりから構成される。 XTI は,トランスポート層インタフェース (TLI),および開放型システム間相互接続 (OSI) モデルのトランスポート・サービス定義に基づく。 第 3 章を参照。
  eSNMP MIB (Management Information Bases) を作成することによって SNMP エージェント・プロセスの拡張を可能にするルーチン群。 第 6 章を参照
  RSVP 拡張サービス品質 (QoS) を要求するアプリケーションを利用可能にする,業界標準のプロトコルおよびルーチン群。 第 7 章を参照。
STREAMS とソケット間の通信ブリッジ ifnet STREAMS モジュール STREAMS ベースのネットワーク・デバイス・ドライバが, Tru64 UNIX が提供するソケット・ベースの TCP/IP プロトコル・スタックにアクセスできるようにする。 第 8 章を参照。
  dlb 擬似ドライバ STREAMS ベースのプロトコル・スタックを使用するアプリケーションが, BSD ベースのドライバにアクセスできるようにする。 dlb 擬似ドライバは DLPI 仕様のサブセットをインプリメントする。 第 8 章を参照。

ネットワーク・プログラミング環境を理解するには,各構成要素を調べるのが最もわかりやすい方法です。 以降の各節で,ネットワーク・プログラミング環境の構成要素について 1 つずつ紹介します。 ネットワークに最も関連のある構成要素から始めて,次第にレベルを上げていきます。

1.1    データ・リンク・インタフェース

ネットワーク・プログラミング環境では, データ・リンク・インタフェース (DLI) およびデータ・リンク・プロバイダ・インタフェース (DLPI) の両方をサポートします。 DLI を使用すると,ULTRIX システムで実行されるプログラムを Tru64 UNIX システムにポートできます。 DLI についての詳細は,付録 F を参照してください。

DLPI は,OSI 参照モデルのデータ・リンク層にマップするカーネル・レベルのインタフェースです。 DLPI を使用すると,ユーザはデータ・リンク・プロバイダの特性について特別な知識を持つ必要がなくなるため,特定の通信媒体に依存することなくこれらの特性をインプリメントできます。 第 2 章では,DLPI,Tru64 UNIX の dlb 擬似ドライバ,およびサポートするプリミティブについてさらに詳しく説明します。

1.2    ソケット・フレームワークおよび STREAMS フレームワーク

Tru64 UNIX オペレーティグ・システムは,ネットワーキング・アプリケーションの作成とカーネル・レベルのネットワーク入出力 (I/O) のために,AT&T System V Release 4 STREAMS フレームワークおよび BSD ソケット・フレームワークをサポートします。 フレームワークは,特定のプログラミング・インタフェース,およびシステムがデータを送受信するために必要なカーネル・レベルのリソースから構成されます。

ソケットは,ネットワーキング・アプリケーションを作成するための,事実上の業界標準インタフェースです。 ソケット・フレームワークは,BSD に基づいており,一連のシステム・コールとライブラリ・コール,ヘッダ・ファイルおよびデータ構造体からなります。 アプリケーションは,ソケット・システム・コールを通じて,インターネット・プロトコル群などの,カーネル常駐ネットワーキング・プロトコルにアクセスできます。 アプリケーションはまた,ソケット・ライブラリ・コールを使用して,ネットワーク情報を操作できます。 たとえば,サービス名をサービス番号にマップしたり,着信データのバイト順を,ローカル・システムのアーキテクチャに適したものに変換することができます。

STREAMS フレームワークは,ソケットの代替機能を提供します。 STREAMS インタフェースは,AT&T によって開発されました。 システム・コール,カーネル・ルーチン,およびカーネル・ユーティリティから構成され,これらは,ネットワーキング・プロトコル群からデバイス・ドライバまで,あらゆるものをインプリメントするために使用されます。 ユーザ空間のアプリケーションは,opencloseputmsggetmsg,および ioctl などのシステム・コールを使用して,STREAMS フレームワークのカーネル部分にアクセスします。 図 1-1 は,STREAMS フレームワークおよびソケット・フレームワークを示しています。

図 1-1:  ソケット・フレームワークおよび STREAMS フレームワーク

注意

Tru64 UNIX では,STREAMS ベースのトランスポート・プロバイダをサポートはしていますが,提供していません (図 1-1 の点線の部分)。

ソケット・フレームワークでは,ユーザ空間のアプリケーションは,データを適切なソケット・システム・コールに引き渡します。 次に,ソケット・システム・コールが,データをネットワーク層に引き渡します。 最後に,ネットワーク層が ifnet 層を通して,BSD ドライバにデータを引き渡します。 BSD ドライバはネットワークとデータのやりとりをします。

STREAMS フレームワークでは,ユーザ空間のアプリケーションは,データをストリーム・ヘッドに引き渡します。 次に,ストリーム・ヘッドは,データを処理するために,ストリームにプッシュされている任意の STREAMS モジュールにデータを引き渡します。 各モジュールは,STREAMS ドライバに到達するまで,次のモジュールにデータを引き渡します。 STREAMS ドライバはネットワークとデータのやりとりをします。

1.3    X/Open トランスポート・インタフェース

X/Open トランスポート・インタフェース (XTI) は,トランスポート・プロバイダに依存しない,トランスポート層アプリケーション・インタフェースを定義します。 つまり,XTI に合わせて作成されたプログラムは,伝送制御プロトコル (TCP) やユーザ・データグラム・プロトコル (UDP) などの,さまざまなトランスポート・プロバイダで実行できます。 アプリケーションが,使用するトランスポート・プロバイダを指定します。

図 1-2 は,XTIと,STREAMS フレームワークおよびソケット・フレームワークとのやりとりを示しています。

図 1-2:  XTI,STREAMS,およびソケット間のやりとり

アプリケーションによって指定されたトランスポート・プロバイダに応じて,データは,次の 2 つのパスのうち,どちらか 1 つを通ることができます。

  1. STREAMS ベースのトランスポート・プロバイダが指定された場合

    データは,STREAMS 上で実行するように作成されたアプリケーションの場合と同じ経路をたどります。 データは,最初にストリーム・ヘッドをとおり,次にアプリケーションがストリーム上にプッシュした任意のモジュールを通って,最後に STREAMS ドライバに引き渡されます。 STREAMS ドライバはネットワークとデータのやりとりをします。

    注意

    Tru64 UNIX では,STREAMS ベースのトランスポート・プロバイダを提供していません。

  2. ソケット・ベースのトランスポート・プロバイダ (TCP または UDP) が指定された場合

    データは timod および xtiso を通じて引き渡されます。 該当するソケット層ルーチンが呼び出され,データはインターネット・プロトコルおよび ifnet 層を通じて,BSD ベースのドライバに引き渡されます。 BSD ベースのドライバはネットワークとデータのやりとりをします。

1.4    eSNMP

Tru64 UNIX SNMP エージェントは,eSNMP と呼ばれる拡張のためのフレームワークを提供します。 SNMP デーモンは,拡張マスタ・エージェントとして機能し,eSNMP プロトコルによってさまざまなサブエージェントと通信を行います。 マスタ・エージェントはシステム全体の代表として SNMP をインプリメントし, サブエージェントは,実際の MIB インストルメンテーションを提供します。 eSNMP サブエージェント開発ツールおよび API は,マスタ・エージェントと通信し MIB を拡張するようなサブエージェントを開発するためのメカニズムをユーザに提供します。

1.5    RSVP アプリケーション・プログラミング・インタフェース

Tru64 UNIX での RSVP (Resource ReSerVation Protocol) の実装により,RSVP アプリケーション・プログラミング・インタフェース (RAPI) を使用して,特定のアプリケーションのデータ・ストリームやフローに対して拡張 QoS (サービス品質) を要求することができます。 アプリケーションはこの要求を rsvpd デーモンに対して行います。 このデーモンはその後,RSVP を使用して,ネットワークを通して RSVP メッセージを送受信します。 rsvpd デーモンは,Traffic Control サブシステムとも通信し,指定されたネットワーク・インタフェース上のフローおよびフィルタのインストールや変更を行います。

1.6    ソケットと STREAMS の間のやりとり

ifnet STREAMS モジュールは,Tru64 UNIX の BSD ベースの TCP/IP を使用するプログラムが,STREAMS ベースのドライバにアクセスできるようにします。 また,dlb 擬似ドライバを提供することによって,STREAMS ベースのプロトコル・スタックを使用するプログラムが,Tru64 UNIX で提供される BSD ベースのドライバにアクセスできるようにします。

図 1-3 は,オペレーティング・システムで提供される BSD ベースの TCP/IP を使用して,STREAMS ベースのドライバにアクセスするアプリケーションを示しています。

図 1-3:  STREAMS ドライバとソケット・プロトコル・スタックのブリッジ

図 1-3 では,データは,ソケット・ベースのアプリケーションから適切なソケット・システム・コールを通じて流れ,インターネット・プロトコルによって処理されます。 次に,BSD ifnet メッセージを DLPI にマップする機能を持つネットワーキング・サブシステムの BSD ifnet 層が,データを ifnet STREAMS モジュールに引き渡します。 ifnet STREAMS モジュールは,データを処理して,STREAMS ドライバがネットワークとデータのやりとりをできるようにします。 ソケット・ベースのアプリケーションに関する情報が返されると,STREAMS ドライバは,この情報をネットワークからピックアップして,ifnet STREAMS モジュールの DLPI インタフェースに引き渡します。 ifnet STREAMS モジュールの DLPI インタフェースは,DLPI メッセージを BSD ifnet に変換して,BSD ifnet 層に戻します。 次に,データはインターネット・プロトコルによって処理され,アプリケーションに戻されます。

図 1-4 は,STREAMS ベースのプロトコル・スタックを使用して,BSD ベースのドライバにアクセスするアプリケーションを示しています。

図 1-4:  BSD ドライバと STREAMS プロトコル・スタックのブリッジ

図 1-4 では,データは,STREAMS ベースのアプリケーションからストリーム・ヘッドを通じて流れ,スタックにプッシュされている STREAMS モジュールによって処理されます。 最後に,データは STREAMS ドライバに引き渡されるのではなく,dlb STREAMS 擬似ドライバに引き渡されて,ソケット・フレームワークの ifnet 層に転送されます。 そこから,さらに BSD ドライバによって処理され,ネットワークとやりとりされます。

1.7    統合

図 1-5 は,ネットワーク・プログラミング環境全体を示しています。 この図のバリエーションを各章で使用して,その章で提示する情報の全体における位置付けを示します。

図 1-5:  ネットワーク・プログラミング環境