EN JA
INET(4)
INET(4) FreeBSD Kernel Interfaces Manual INET(4)

名称

inetインターネットプロトコルファミリ

書式

#include < sys/types.h>
#include < netinet/in.h>

解説

インターネットプロトコルファミリは、 インターネットプロトコル (Internet Protocol) (IP) トランスポートレイヤ (層) の上に積み重ねられ、インターネットアドレス形式を利用するプロトコルを集めたものです。インターネットファミリは、 SOCK_STREAM, SOCK_DGRAMSOCK_RAW ソケットタイプのためのプロトコルのサポートを行ないます。 SOCK_RAW インタフェースは、 IP プロトコルへのアクセスを提供します。

アドレッシング

インターネットアドレスは、(これらは、ワードとバイトが逆になった、 alpha, amd64, i386 と ia64 などのリトルエンディアンマシンの上で) ネットワーク標準書式で格納された 4 バイトの大きさです。インクルードファイル < netinet/in.h> は、このアドレスを区別された共用体 (ユニオン) として定義しています。

インターネットプロトコルファミリにバインド (結合) されたソケットは、次のアドレス構造体を利用します。

struct sockaddr_in { 
 uint8_t  sin_len; 
 sa_family_t sin_family; 
 in_port_t sin_port; 
 struct in_addr sin_addr; 
 char  sin_zero[8]; 
};

ソケットは、着信メッセージで“ワイルドカード”マッチングに影響するようにローカルアドレス INADDR_ANY で作成されます。 connect(2) または sendto(2) 呼び出しのアドレスは、“このホスト”を意味する INADDR_ANY として与えられます。最初の設定されたネットワークがブロードキャストをサポートするなら、識別されたアドレス INADDR_BROADCAST は、プライマリネットワーク上でブロードキャストアドレスの省略表現として認められています。

プロトコル

インターネットプロトコルファミリは、 IP ネットワークプロトコル、インターネットコントロールメッセージプロトコル (ICMP)、インターネットグループ管理プロトコル (IGMP)、トランスミッション (送信) コントロールプロトコル (TCP) とユーザデータグラムプロトコル (UDP) から成っています。 TCP は、 UDP が SOCK_DGRAM アブストラクションをサポートするために使用されている間に、 SOCK_STREAM アブストラクションをサポートするのに使用されます。 IP のための生の (raw) インタフェースは、タイプ SOCK_RAW のインターネットソケットを作成することによって利用可能です。 ICMP メッセージプロトコルは、生の (raw) ソケットからアクセス可能です。

インタフェースの inet アドレスは、アドレス自体、ネットマスク、ブロードキャスト (同報通信) インタフェースの場合のブロードキャストアドレス、またはポイントツーポイントのインタフェースの場合のピア (相手) アドレスのいずれかから成ります。次の ioctl(2) コマンドは、インターネットドメインのデータグラムソケットのために提供されています:

SIOCAIFADDR
インタフェースにアドレスを追加します。コマンドは、引数として struct in_aliasreq を要求します。
SIOCDIFADDR
インタフェースからアドレスを削除します。コマンドは、引数として struct ifreq を要求します。
SIOCGIFADDR
SIOCGIFBRDADDR
SIOCGIFDSTADDR
SIOCGIFNETMASK
インタフェースからのアドレス情報を返します。返される値は、 struct ifreq に入れられます。このアドレス情報検索の方法は、時代遅れであり、望ましい方法は、 getifaddrs(3) API を使用することです。

MIB 変数

多くの変数は、 sysctl(3) MIB の net.inet ブランチで実装されます。 (それぞれのマニュアルページで参照される) 転送プロトコルによってサポートされた変数に加えて、次の一般的な変数が定義されています:
IPCTL_FORWARDING
(ip.forwarding) ブール値: IP パケットの転送を有効/無効にします。デフォルトは、オフです。
IPCTL_FASTFORWARDING
(ip.fastforwarding) ブール値: 速い IP 転送コードの使用を有効/無効にします。デフォルトは、オフです。速い IP 転送が有効にされるとき、IP パケットは、直接処理を終了して適切なネットワークインタフェースに直接転送されます。直接処理は、スループットを大きく改良します。ローカル IP アドレス、非ユニキャストまたは IP オプションがあるすべてのパケットは、正常な IP 入力処理パスによって操作されます。正常な (遅い) IP 転送パスのすべての機能は、 ipsec(4) トンネル仲介を除いて、ファイアウォール ( pfil(9) フックを通る) チェックを含んでサポートされます。 IP ファースト転送パスは、ICMP リダイレクト (出力先変更) またはソースクエンチ (焼き入れ) メッセージを生成しません。
IPCTL_SENDREDIRECTS
(ip.redirect) ブール値: より良くて、送信側が直接到達可能な送信側のために、ルート (経路) と次のホップ (中継点) が知られている IP パケットの応答において、ICMP リダイレクト (出力先変更) の送信を有効/無効にします。デフォルトは、オンです。
IPCTL_DEFTTL
(ip.ttl) 整数: 発信 IP パケットを使用するデフォルトの有効期間 (time-to-live) (“TTL”) です。
IPCTL_ACCEPTSOURCEROUTE
(ip.accept_sourceroute) ブール値: 発信元 (始点) 経路 IP パケットの受け取りを有効/無効にします (デファオルトは、偽)。
IPCTL_SOURCEROUTE
(ip.sourceroute) ブール値: ソースからルートされた (始点経路) IP パケットの転送を有効/無効にします (デフォルトは、偽)。
IPCTL_RTEXPIRE
(ip.rtexpire) 整数: 最後の参照をやめた後のクローン (でコピーされた) プロトコルの IP ルート (経路) の秒単位の生存期間 (デフォルトは、1 時間)。この値は、上記で説明されるようにダイナミックに変化します。
IPCTL_RTMINEXPIRE
(ip.rtminexpire) 整数: ip.rtexpire の最小値 (デフォルトは、10 秒)。この値は、ユーザの変更では効果がなく、上記で説明されたダイナミックな適合に制限されています。
IPCTL_RTMAXCACHE
(ip.rtmaxcache) 整数: キャッシュのトリガ (きっかけ) レベル、参照されない、ダイナミックな適合を開始するクローン (でコピーされた) プロトコルのルート (経路) (デフォルトは、128)。
ip.process_options
整数: IP オプション処理を制御します。 0 にこの変数を設定することによって、着信パケットのすべての IP オプションは、無視され、パケットは、変更せずに渡されます。 1 に設定することによって、着信パケットの IP オプションに従って処理されます。 2 に設定することによって、 ICMP “prohibited by filter” (フィルタによる禁止) メッセージは、IP オプションがある着信パケットに対応して返送されます。デフォルトは、1 です。この sysctl(8) 変数は、ある他のホストに転送されたパケットと同様に、ローカルホストに向けられたパケットに影響します。
ip.random_id
ブール値: IP ID 生成の振る舞いを制御します。この sysctl(8) に 0 以外を設定することは、IP パケットの ID フィールドが各パケットの生成で、1 が増加にされる代わりにランダムに生成されます。これは、リモート観測者がマシンでカウンタを見ることによってパケット生成の速度決定することを許し、小さな情報漏洩も止めます。同時に、高速リンクでは、それは、ID 再利用サイクルを大幅に減少させることができます。デフォルトは、0 (順次 IP ID) です。 IPv6 フロー ID とフラグメント ID は、常にランダムです。
ip.maxfragpackets
整数: ホストが同時に再構築するキューを受け付けて保持する断片化されているパケットの最大数。 0 は、ホストが任意の断片化されたパケットを受け付けないことを意味します。-1 は、受信するときに、ホストが断片化されたパケットとして受け付けることを意味します。
ip.maxfragsperpacket
整数: ホストがパケットのための再構築するキューを受け付けて保持する断片の最大数は、 0 は、ホストが任意の断片化されたパケットを受け付けないことを意味します。

関連項目

ioctl(2), socket(2), getifaddrs(3), sysctl(3), icmp(4), intro(4), ip(4), ipfirewall(4), route(4), tcp(4), udp(4), pfil(9) An Introductory 4.3 BSD Interprocess Communication Tutorial, PS1, 7. An Advanced 4.3 BSD Interprocess Communication Tutorial, PS1, 8.

歴史

inet プロトコルインタフェースは、 4.2BSD で登場しました。“プロトコルクローニング”のコードは、 FreeBSD 2.1 で登場しました。

警告

インターネットプロトコルのサポートは、インターネットプロトコルが発展するとともに、変更の対象となります。ユーザは、現在の実装の詳細に依存するべきではありませんが、むしろエクスポートされたサービスに依存すべきです。
January 26, 2012 FreeBSD