NETINTRO(4) FreeBSD カーネルインタフェースマニュアル NETINTRO(4)
名称
networking − ネットワーク機構の紹介 |
書式
#include <sys/types.h> |
説明
このセクションでは、本システムで利用可能なネットワーク機構についての一般 的な紹介を行っています。セクション 4 のこの部分のドキュメントは 3 つの領 域に分かれます。 プロトコルファミリ (ドメイン)、 プロトコル、そして ネッ トワークインタフェースです。 ネットワークプロトコルは、すべて特定の プロトコルファミリと関連づけられて います。プロトコルファミリは、プロトコルが特定のネットワーク環境下で機能 できるようにするため、プロトコルの実装に対しての基本的なサービスを提供し ます。これらのサービスはパケットの分割および統合、ルーティング、アドレッ シング、そして基本的な転送なども含まれるでしょう。現在のプロトコルの実装 ではサポートされていませんが、プロトコルファミリは、複数のアドレッシング 方法を提供するかもしれません。プロトコルファミリには、通常各 socket(2) タ イプに 1 つずつというように、多数のプロトコルが含まれています。プロトコル ファミリは、すべてのソケットタイプをサポートする必要はありません。プロト コルファミリには、同一のソケットアブストラクションをサポートするために、 複数のプロトコルが含まれることがあります。 プロトコルは、 socket(2) で詳しく決められたソケットアブストラクションの 1 つをサポートします。特定のプロトコルには、適切なプロトコルファミリとタイ プのソケットを作成するか、ソケットを作成する際に明示的にそのプロトコルを 要求することによってアクセスすることができます。プロトコルは、通常 1 種類 のアドレスフォーマットのみを受け取ります。通常、そのアドレスフォーマット は、プロトコルファミリとネットワークアーキテクチャのデザインに必要なアド レッシング構造体を用いて定義されています。ある基本的なソケットアブストラ クションのセマンティクスは、プロトコルに特有のものです。プロトコルはすべ てそれぞれに特有のソケットタイプについての基本モデルをサポートするように なっています。しかし、さらに、そのメカニズムに対して、標準的ではない機構 や拡張機能を提供することもあります。例えば、 SOCK_STREAM をサポートするプ ロトコルが、各帯域外 (out-of-band) メッセージにつき 1 バイト以上の帯域外 メッセージを送信することができます。 ネットワークインタフェースは、デバイスインタフェースと似ています。ネット ワークインタフェースは、ネットワークサブシステムの最下位層を構成します。 これは、実際の送信用ハードウェアと相互に影響します。ネットワークインタ フェースは、 1 つ以上のプロトコルファミリやアドレスフォーマットをサポート 可能です。各ネットワークインタフェースのエントリの書式 (SYNOPSIS) のセク ションには、 config(8) プログラムにシステムの詳細を提供する際に使われる、 関連ドライバの仕様の例があります。診断 (DIAGNOSTICS) のセクションのメッ セージ一覧は、デバイスを操作中に起こるエラーに起因して、コンソールやシス テムエラーログ /var/log/messages ( syslogd(8) を参照) 中に出力されるもの です。 |
プロトコル
本システムでは、現在、インターネットプロトコル、Xerox Network Systems(tm) プロトコル、そして ISO OSI プロトコルのいくつかがサポートされています。ソ ケットの raw インタフェースがインターネットの IP プロトコル層、 Xerox NS の IDP プロトコルに対して提供されています。各プロトコルファミリのサポート に関するさらなる情報が必要な場合は、しかるべきマニュアルページを調べてみ てください。 |
アドレッシング
各プロトコルファミリと関連付けられているのが、アドレスフォーマットです。 ネットワークアドレスは、すべて以下に示す sockaddr と呼ばれる一般的な構造 体と結びついています。しかし、各プロトコルは、より洗練された特有の構造体 を使うように強制しています。一般的には、変数名を変えるといったことです。 このことについては、上で述べたプロトコルファミリのマニュアルページで議論 されています。 struct sockaddr { u_char sa_len; u_char sa_family; char sa_data[14]; }; sa_len フィールドには、この構造体全体の長さが入ります。この長さは 16 バイ トを超えるかもしれません。次に示す sa_family 用のアドレス値は、システム側 で既知なものです (将来実装されるかもしれないフォーマットも加えて、ここで 定義しています)。 #define AF_UNIX 1 /* ローカルホスト (パイプ、ポート) */ #define AF_INET 2 /* インターネット: UDP, TCP など */ #define AF_NS 6 /* Xerox NS プロトコル */ #define AF_CCITT 10 /* CCITT プロトコル、X.25 など */ #define AF_HYLINK 15 /* NSC ハイパーチャネル */ #define AF_ISO 18 /* ISO プロトコル */ |
ルーティング
UNIX では、パケットのルーティング機構がいくつか提供されています。カーネル は、ルーティング情報データベースを管理しています。このデータベースは、パ ケットを転送するときに適切なネットワークインタフェースを選ぶ際に使用され ます。 ユーザプロセス (あるいは、複数の相互に協調し合ったプロセス) は、特別な種 類のソケットを通してメッセージを送ることで、このデータベースを管理してい ます。この方法が、以前のリリースで使われていた固定長の ioctl(2) に取って 代わりました。 この機構については、 route(4) に説明があります。 |
インタフェース
システム内の各ネットワークインタフェースは、メッセージの送受信に使われる パスに対応しています。ネットワークインタフェースは、通常、関連のあるハー ドウェアデバイスを持っています。しかし、 lo(4) のようなループバックインタ フェースはハードウェアデバイスを持っていません。 次の ioctl(2) コールは、ネットワークインタフェースを操作するのに使われま す。 ioctl() 関数は、所望のドメインのソケット (特に SOCK_DGRAM 型) 上で実 行します。以前のリリースでサポートされていたリクエストの多くは、パラメー タに ifreq 構造体を取っていました。この構造体は、次の形式です struct ifreq { #define IFNAMSIZ 16 char ifr_name[IFNAMSIZ]; /* if 名であり、例えば "en0" */ union { struct sockaddr ifru_addr; struct sockaddr ifru_dstaddr; struct sockaddr ifru_broadaddr; short ifru_flags; int ifru_metric; int ifru_mtu; int ifru_phys; caddr_t ifru_data; } ifr_ifru; #define ifr_addr ifr_ifru.ifru_addr /* アドレス */ #define ifr_dstaddr ifr_ifru.ifru_dstaddr /* p-to-p リンクのもう一方の終端 */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* ブロードキャストアドレス*/ #define ifr_flags ifr_ifru.ifru_flags /* フラグ */ #define ifr_metric ifr_ifru.ifru_metric /* メトリック */ #define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define ifr_phys ifr_ifru.ifru_phys /* 物理的な線 */ #define ifr_data ifr_ifru.ifru_data /* インタフェースが使用 */ }; 現在では非推奨のシステムコールは次の通りです。 |
SIOCSIFADDR
プロトコルファミリ用のインタフェースアドレスを設定しま す。アドレスの割り当てに続いて、インタフェース用の ‘‘初期 化’’ ルーチンが呼ばれます。 SIOCSIFDSTADDR SIOCSIFBRDADDR アドレスを取得するための ioctl() リクエストと、アドレス以外のデータを設定 したり検索したりするためのリクエストについては、今でも完全にサポートして おり、 ifreq 構造体を使用しています。 SIOCGIFADDR SIOCGIFDSTADDR SIOCGIFBRDADDR SIOCSIFFLAGS SIOCGIFFLAGS SIOCSIFMETRIC SIOCGIFMETRIC 新しい構造体を使用するリクエストは 2 つあります。 SIOCAIFADDR SIOCDIFADDR SIOCGIFCONF /* /* * SIOCGIFCONF リクエストで使用される構造体。 * マシンのインタフェースの設定を検索するのに使用されます * (アクセス可能なネットワークをすべて分かっておかなくてはならない * プログラムに有用です)。 */ struct ifconf { int ifc_len; /* 関連バッファの大きさ */ union { caddr_t ifcu_buf; struct ifreq *ifcu_req; } ifc_ifcu; #define ifc_buf ifc_ifcu.ifcu_buf /* バッファアドレス */ #define ifc_req ifc_ifcu.ifcu_req /* 返される構造体の配列 */ }; |
関連項目
歴史
netintro マニュアルは、 4.3BSD−Tahoe で出現しました。 4.2 Berkeley Distribution November 30, 1993 4.2 Berkeley Distribution |