スポンサーリンク

INET(4) FreeBSD カーネルインタフェースマニュアル INET(4)

名称

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

書式

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

解説

インターネットプロトコルファミリは Internet Protocol (IP) トランスポート 層の上に位置し、インターネットアドレスフォーマットを利用するプロトコル群 です。インターネットファミリは、 SOCK_STREAM, SOCK_DGRAM および SOCK_RAW ソケットタイプのためのプロトコルのサポートを提供します。 SOCK_RAW インタ フェースは IP プロトコルへのアクセスを提供します。

アドレッシング

インターネットアドレスは 4 バイトの大きさであり、ネットワーク標準フォー マットで格納されています ( VAX では、ワード、バイトの順序を逆にしたもので す)。インクルードファイル ⟨netinet/in.h⟩ では、このアドレスを区分された共 用体として定義しています。

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

      struct sockaddr_in {

u_char

sin_len;

u_char

sin_family;

u_short

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 は SOCK_STREAM アブストラクションをサポートするために使われ、 UDP は SOCK_DGRAM アブストラクションをサポートするために使われます。 IP に対する raw インタフェースが、 SOCK_RAW タイプのインターネットソケットを生成する ことにより利用可能です。 ICMP メッセージプロトコルが raw ソケットからアク セス可能です。

32 ビットのインターネットアドレスはネットワーク部とホスト部の両方を含んで います。しかしながら、アドレスに対して直接検査することは推奨されません。 どうしてもアドレスをその 2 つの部分に分割する必要のあるプログラムのため に、次の ioctl(2) コマンドがインターネットドメインのデータグラムソケット 向けに提供されています。それらは SIOCIFADDR コマンド ( intro(4) を参照 ) と同じ形式を持ちます。

       SIOCSIFNETMASK

インタフェースのネットワークマスクを設定します。ネット ワークマスクはアドレスのネットワーク部を定義します。もし それがアドレスタイプが示すよりも多いアドレスを含むなら、 サブネットが使われています。

SIOCGIFNETMASK
インタフェースのネットワークマスクを得ます。

ルーティング

インターネットプロトコルの現在の実装は、トランザクション TCP (Transaction TCP) および経路の MTU 検出 (Path MTU Discovery) に必要なある種のエンド ツーエンド情報に対する強力なキャッシングを提供するために、ルーティング テーブルに対するいくつかの調整を含んでいます。次に示す変更が最も重要です :

       1. RTF_CLONING フラグ付きあるいはマルチキャストの終点宛以外の IP 経路はRTF_PRCLONING フラグが強制的に立てられます (これは ‘‘プロトコルクローニング’’ と呼ばれます。)

2. ある IP 経路への最後の参照が欠落している場合、その経路が、そのような 経路をコピーすることにより生成されたかどうかが検査されます。もしそう であれば、 RTF_PROTO3 フラグが立てられ、net.inet.ip.rtexpire 秒以内 に消去されるように無効化のためのタイマが初期化されます。そのような経 路が再び参照されると、フラグとタイマはリセットされます。

3. 10 分に 1 回、あるいはカーネルのルーティングテーブルに期限切れ直前の 経路が存在するとすぐにカーネルタイムアウトが実行され、期限切れの経路 を削除します。

キャッシュされている経路が大きくなり過ぎた場合、 net.inet.ip.rtexpire の 値を変更するための動的な処理が実行されます。期限切れ消去の実行後 に、net.inet.ip.rtmaxcache より多い数の経路が参照されないまま残っている場 合、 rtexpire が 3/4 にされ、これより長い期限をもつすべての経路の期限が調 整されます。最小の rtexpire 値 (net.inet.ip.rtminexpire) の指定およびこの 削減を 10 分に 1 回おきに起こるように制限することにより、このプロセスの効 果はいくらか小さくなります。

何らかの外部プロセスが、プロトコルクローンで作られた経路のオリジナルの経 路を削除した場合、「子の経路」は削除されます。 (実際のところ、これは、プ ロトコル要求クローニングをサポートするルーティングコードにおける一般的な メカニズムです。)

プロトコルクローニングにより生成されたのではない経路を管理する試みは行な われません。それらは静的であり、外部のルーティングプロセスや、あるいはリ ンク層 (たとえばイーサネットにおける ARP) の管理下にあると想定されます。

ある種のネットワーク活動だけが、このメカニズムを用いて経路のクローニング を行ないます。特にある宛先を持ち、長い間継続する経路の参照を自分自身で キャッシュするプロトコル ( TCP や UDP のような ) は、このメカニズムを起動 するきっかけとなります。一方、ローカルに生成されたものであれフォワードさ れたものであれ、生の IP パケットだと、このメカニズムは起動しません。

MIB 変数

sysctl(3) MTB の net.inet ブランチには、多くの変数が実装されています。ト ランスポートプロトコルによりサポートされる変数 (各々のマニュアルページを 参照してください) に加え、次の一般的な変数が定義されています。

       IPCTL_FORWARDING

(ip.forwarding) ブール値: IP パケットのフォワーディ ングを可能にする / 抑制する (デフォルトではカーネル 設定オプション GATEWAY によります)。

IPCTL_SENDREDIRECTS
(ip.redirect) ブール値: フォワードできない IP パケッ トについて ICMP リダイレクトを送出する / 送出しない (デフォルトは真)。

IPCTL_DEFTTL
(ip.ttl) 整数値: 外に出ていく IP パケットのデフォル トの生存時間。

IPCTL_SOURCEROUTE
(ip.sourceroute) ブール値: 始点経路制御された IP パ ケットのフォワードを可能にする / 抑制する (デフォル トは偽)。

IPCTL_RTEXPIRE
(ip.rtexpire) 整数値: プロトコルクローンされた IP 経 路の、最後の参照が終了した後の秒単位の生存時間 (デ フォルトは 1 時間)。上記のように、この値は動的に変化 します。

IPCTL_RTMINEXPIRE
(ip.rtminexpire) 整数値: ip.rtexpire の最小値 (デ フォルトは 10 秒)。この値はユーザによる変更に対して は効果がなく、上記のような動的調整に限られています。

IPCTL_RTMAXCACHE
(ip.rtmaxcache) 整数値: キャッシュされ、かつ参照され ず、かつプロトコルクローンされた経路の、動的な調整を 開始するトリガレベル (デフォルトは 128)。

関連項目

ioctl(2), socket(2), sysctl(3), icmp(4), igmp(4), intro(4), ip(4), tcp(4), ttcp(4), udp(4)

"

        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 で登場しました。

4.2 Berkeley Distribution February 14, 1995 4.2 Berkeley Distribution

スポンサーリンク