INET(4) FreeBSD カーネルインタフェースマニュアル INET(4)
名称
inet − インターネットプロトコルファミリ |
書式
#include <sys/types.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 IPCTL_DEFTTL IPCTL_SOURCEROUTE IPCTL_RTEXPIRE IPCTL_RTMINEXPIRE IPCTL_RTMAXCACHE 関連項目 |
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 |