diff options
Diffstat (limited to 'documentation/manual-pages/ja/man4/ip.4')
-rw-r--r-- | documentation/manual-pages/ja/man4/ip.4 | 436 |
1 files changed, 436 insertions, 0 deletions
diff --git a/documentation/manual-pages/ja/man4/ip.4 b/documentation/manual-pages/ja/man4/ip.4 new file mode 100644 index 0000000000..8b24e06d83 --- /dev/null +++ b/documentation/manual-pages/ja/man4/ip.4 @@ -0,0 +1,436 @@ +.\" Copyright (c) 1983, 1991, 1993 +.\" The Regents of the University of California. All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. +.\" 4. Neither the name of the University nor the names of its contributors +.\" may be used to endorse or promote products derived from this software +.\" without specific prior written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.\" @(#)ip.4 8.2 (Berkeley) 11/30/93 +.\" %Id: ip.4,v 1.9 1997/03/19 19:47:33 bde Exp % +.\" +.\" $FreeBSD$ +.\" WORD: source routing 指定経路制御 [IPv6] +.Dd November 30, 1993 +.Dt IP 4 +.Os BSD 4.2 +.Sh 名称 +.Nm ip +.Nd インターネットプロトコル +.Sh 書式 +.Fd #include <sys/types.h> +.Fd #include <sys/socket.h> +.Fd #include <netinet/in.h> +.Ft int +.Fn socket AF_INET SOCK_RAW proto +.Sh 説明 +.Tn IP +は、インターネットプロトコルファミリが用いるトランスポート層の +プロトコルです。 +.Tn IP +に基づいた、より高位のプロトコル (例えば、 +.Tn TCP +や +.Tn UDP +) +を用いているときには、 +.Tn IP +レベルでオプションを設定できます。 +また、新しいプロトコルや特別な用途のアプリケーションを +開発しているときには、 +.Dq raw ソケット +を通してアクセスすることもできます。 +.Pp +.Tn IP レベル +の +.Xr setsockopt 2 +ならびに +.Xr getsockopt 2 +オプションがいくつかあります。 +.Dv IP_OPTIONS +は、送信される各パケットの +.Tn IP +ヘッダ中に埋め込まれる +.Tn IP +オプションを提供したり、受信されるパケットの +ヘッダ部のオプションを検査したりするために +使われます。 +.Tn IP +オプションは、インターネットファミリの全てのソケットタイプで +使うことができます。 +送信される +.Tn IP +オプションのフォーマットは、 +.Tn IP +プロトコルの仕様 (RFC-791) で決められています。ただし、1 つ例外が +あります。 +指定経路制御オプション用のアドレスリストには、ゲートウェイ +リストの先頭に、最初にパケットが通過するゲートウェイが含まれて +いることが必要です。 +最初にパケットが通過するゲートウェイのアドレスはオプションリストから +取り出され、使用される前に適切な大きさに直されます。 +以前に指定されたオプションを無効にするには、長さ 0 のバッファを使用して +ください。 +.Bd -literal +setsockopt(s, IPPROTO_IP, IP_OPTIONS, NULL, 0); +.Ed +.Pp +.Dv IP_TOS +および +.Dv IP_TTL +は、 +.Dv SOCK_STREAM +および +.Dv SOCK_DGRAM +で用いられる +.Tn IP +ヘッダ内の、 +サービスタイプ (type-of-service) フィールドと生存時間 (time-to-live) +フィールドを設定するために使用されます。 +例えば、以下のようにします。 +.Bd -literal +int tos = IPTOS_LOWDELAY; /* <netinet/in.h> 参照 */ +setsockopt(s, IPPROTO_IP, IP_TOS, &tos, sizeof(tos)); +int ttl = 60; /* 最大値は 255 */ +setsockopt(s, IPPROTO_IP, IP_TTL, &ttl, sizeof(ttl)); +.Ed +.Pp +もし、 +.Dv IP_RECVDSTADDR +オプションが +.Dv SOCK_DGRAM +ソケットで有効になっていた場合、 +.Xr recvmsg 2 +システムコールは、 +.Tn UDP +ダイアグラム用の送り先の +.Tn IP +アドレスを返します。 +msghdr 構造体の msg_control フィールドは +.Tn IP +アドレスの後に続いた cmsghdr 構造体の入ったバッファへの +ポインタになっています。 +cmsghdr フィールドは以下のような値を持ちます。 +.Bd -literal +cmsg_len = sizeof(struct in_addr) +cmsg_level = IPPROTO_IP +cmsg_type = IP_RECVDSTADDR +.Ed +.Pp +.Dv IP_PORTRANGE +は、ポート番号の範囲を設定するために使されます。 +この範囲のローカルポート番号のうちのひとつが、 +ポート番号を指定しなかった (0 が指定された) ソケット用に選択されます。 +これは、以下のような値を取り得ます。 +.Bl -tag -width IP_PORTRANGE_DEFAULT +.It Dv IP_PORTRANGE_DEFAULT +デフォルトの範囲のポート番号値を使います。通常は +.Dv IPPORT_RESERVED +から +.Dv IPPORT_USERRESERVED +です。 +この値は、sysctl の設定、 +.Sy net.inet.ip.portrange.first +および +.Sy net.inet.ip.portrange.last +を通して調整できます。 +.It Dv IP_PORTRANGE_HIGH +は、大きな値の範囲のポート番号を使います。通常は +.Dv IPPORT_HIFIRSTAUTO +および +.Dv IPPORT_HILASTAUTO +です。 +この値は、sysctlの設定、 +.Sy net.inet.ip.portrange.hifirst +および +.Sy net.inet.ip.portrange.hilast +を通して調整できます。 +.It Dv IP_PORTRANGE_LOW +は、小さな値の範囲のポート番号を使います。通常は、 +.Ux +システム上で特権を持ったプロセスに使用が限定されています。 +この値の範囲は、通常 +.Dv IPPORT_RESERVED +から +.Li 1 +までで、降順に並んでいます。この値の範囲は sysctl では設定できません。 +.El +.Ss マルチキャストオプション +.Pp +.Tn IP +のマルチキャストは +.Dv SOCK_DGRAM +および +.Dv SOCK_RAW +型の +.Dv AF_INET +ソケットで、インタフェースドライバがマルチキャスト +に対応しているネットワークのみで行えます。 +.Pp +.Dv IP_MULTICAST_TTL +オプションは、送信されるマルチキャストデータグラムの +生存時間 (TTL) 値を変更します。この値を変更することで +マルチキャストの範囲を制御できます。 +.Bd -literal +u_char ttl; /* 0 から 255 の範囲。 デフォルト値は 1 */ +setsockopt(s, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, sizeof(ttl)); +.Ed +.Pp +TTL 値が 1 のデータグラムは、ローカルネットワークを超えて +転送されることはありません。 +TTL 値が 0 のデータグラムはどのネットワークにも送信されませんが、 +データグラムを送ったホストが送り先のグループに属しており、 +送信を行うソケットがマルチキャストループパックを無効にしていなければ +(下記参照)、ローカルネットワークには送信されるかもしれません。 +TTL 値が 1 より大きいデータグラムは、ローカルネットワークに +マルチキャストルータが接続されていれば、他のネットワークに転送されます。 +.Pp +複数のインタフェースを持ったホストには、各マルチキャスト +送信は、最初のネットワークインタフェースから行われます。 +.Dv IP_MULTICAST_IF +オプションを使うと、指定されたソケットからの次の送信のために +デフォルト値を書きかえることができます。 +.Bd -literal +struct in_addr addr; +setsockopt(s, IPPROTO_IP, IP_MULTICAST_IF, &addr, sizeof(addr)); +.Ed +.Pp +ここで、"addr" は、ローカルホストの使用したいインタフェースの +.Tn IP +アドレスです。または、 +.Dv INADDR_ANY +を指定して、デフォルトのインタフェースを示すようにもできます。 +インタフェースのローカル IP アドレスおよびマルチキャスト能力の +有無は、 +.Dv SIOCGIFCONF +および +.Dv SIOCGIFFLAGS +ioctl システムコールで得ることができます。 +普通のアプリケーションではこのオプションを使う必要は +ないはずです。 +.Pp +もし、マルチキャストデータグラムが送り元のホスト自身が +属しているグループ (送り先のインタフェース上にある) +に送信されるのであれば、デフォルトではローカルへの配送用に、 +そのダイアグラムのコピーが IP 層によってループバック +されます。 +.Dv IP_MULTICAST_LOOP +オプションは、送信ホストに今後のデータグラムをループバック +するのかどうかを制御する権限を明示的に与えます。 +.Bd -literal +u_char loop; /* 0 = 無効, 1 = 有効 (デフォルト) */ +setsockopt(s, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)); +.Ed +.Pp +このオプションは、自身が送信したパケットを受け取る際のオーバヘッドを +軽減することで、1 つのホストに 1 つしか実体を持たないアプリケーション +(例えば、ルータデーモン) のパフォーマンスを向上させます。 +このオプションは、1 つのホスト上で複数の実体を持ち得るアプリケーション +(例えば、会議プログラム) や、 +送信元のホストが送信先のグループに属さないアプリケーション (例えば、 +時刻問い合わせプログラム) では使われません。 +.Pp +TTL の初期値を 1 より大きくして送信されたマルチキャストデータグラムは、 +送信元のインタフェースとは別のインタフェース上のホストから送信元 +のホストに配送されるかもしれません。 +ただし、送信元ではない方のインタフェース上で、 +このホストが宛先のグループに属している場合です。 +ループバックコントロールオプションは、このような配送に対しては +何の効力も持ちません。 +.Pp +あるマルチキャストグループから送信されたデータグラムを受け取るには、 +ホストがそのマルチキャストグループに属していることが必要です。 +あるマルチキャストグループに加わるには、 +.Dv IP_ADD_MEMBERSHIP +オプションを使用します。 +.Bd -literal +struct ip_mreq mreq; +setsockopt(s, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mreq, sizeof(mreq)); +.Ed +.Pp +ここでは、 +.Fa mreq +は以下のような構造体です。 +.Bd -literal +struct ip_mreq { + struct in_addr imr_multiaddr; /* グループの IP マルチキャストアドレス */ + struct in_addr imr_interface; /* インタフェースのローカル IP アドレス */ +} +.Ed +.Pp +デフォルトのマルチキャストインタフェースを選択するには、 +.Dv imr_interface +は +.Dv INADDR_ANY +にします。 +また、ホストがマルチホームに設定されていれば、 +特定のマルチキャスト可能なインタフェースの +.Tn IP +アドレスに指定することが必要です。 +メンバシップは、1 つのインタフェースに結びついています。 +そのため、マルチホームホスト上で動作しているプログラムは、 +1 つ以上のインタフェース上で同一のグループに入る必要がある +かもしれません。 +1 つのソケットに最大 +.Dv IP_MAX_MEMBERSHIPS +(現在では 20) 個のメンバシップを設定できます。 +.Pp +メンバから抜けるには、以下の関数を使います。 +.Bd -literal +struct ip_mreq mreq; +setsockopt(s, IPPROTO_IP, IP_DROP_MEMBERSHIP, &mreq, sizeof(mreq)); +.Ed +.Pp +ここで、 +.Fa mreq +はメンバに加わるときに使ったのと同じ値が入ります。ソケットを閉じたり +プロセスが終了したりした場合はメンバから抜けます。 +.\"----------------------- +.Ss "raw IP ソケット" +.Pp +raw +.Tn IP +ソケットは、コネクションを持たないソケットで、 +通常は +.Xr sendto 2 +や +.Xr recvfrom 2 +コールと一緒に使われます。 +ただし、 +.Xr connect 2 +コールは、 +これから流れてくるパケットの送り先を定めるためにも使われます。 +(この場合には、 +.Xr read 2 +もしくは +.Xr recv 2 +、および +.Xr write 2 +もしくは +.Xr send 2 +システムコールが使われるでしょう。) +.Pp +.Fa proto +が 0 の場合には、パケットの送信にはデフォルトの +プロトコルである +.Dv IPPROTO_RAW +が使われ、このプロトコルに向かって送られてきたパケットだけが +受信されます。 +.Fa proto +が 0 でない場合、そのプロトコルの番号が送信パケット上で使われ、 +また、入力パケットをフィルタリングするために使われます。 +.Pp +送信パケットには、自動的に +.Tn IP +ヘッダ (これは、送り先アドレスおよびソケットが +作成されたときのプロトコル番号にもどづいています) +が与えられます。ただし、 +.Dv IP_HDRINCL +オプションが設定されているときは +.Tn IP +ヘッダは与えられません。 +受信パケットは、完全な形の +.Tn IP +ヘッダおよびオプションと一緒に受け取られます。 +.Pp +.Dv IP_HDRINCL +は、データと一緒に完全な IP ヘッダが含まれていることを +示し、 +.Dv SOCK_RAW +型でしか使われません。 +.Bd -literal +#include <netinet/in_systm.h> +#include <netinet/ip.h> + +int hincl = 1; /* 1: オン , 0: オフ */ +setsockopt(s, IPPROTO_IP, IP_HDRINCL, &hincl, sizeof(hincl)); +.Ed +.Pp +以前の +.Tn BSD +リリースとは違って、このプログラムでは、すべての IP ヘッダ +のフィールドを設定することが必要です。これには次のフィールド +も含みます。 +.Bd -literal +ip->ip_v = IPVERSION; +ip->ip_hl = hlen >> 2; +ip->ip_id = 0; /* 0 ということは、カーネルが適切な値を + 設定してくれるということです。 */ +ip->ip_off = offset; +.Ed +.Pp +ヘッダの送り元のアドレスが +.Dv INADDR_ANY +に設定されていたら、 +カーネルが適切なアドレスを選択します。 +.Sh 診断 +ソケット操作が次のようなエラーのいずれかを返して失敗することが +あります。 +.Bl -tag -width [EADDRNOTAVAIL] +.It Bq Er EISCONN +すでに接続が確立されたソケットに接続を試みようとしたときや、 +送り先アドレスを指定してデータグラムを送信しようとしたときに +送り先のソケットがすでに接続されているときに生じます。 +.It Bq Er ENOTCONN +データグラムを送信しようとしたときに、送り先アドレスが +指定されておらず、ソケットがまだ接続されていないときに生じます。 +.It Bq Er ENOBUFS +内部のデータ構造でシステムがメモリを使い果たしたときに +生じます。 +.It Bq Er EADDRNOTAVAIL +ネットワークアドレスを用いてソケットを作成しようとしたが、 +そのためのネットワークインタフェースが存在しないときに +生じます。 +.It Bq Er EACESS +特権のないプロセスによって raw IP ソケットを作成しようと +したときに生じます。 +.El +.Pp +次のような、 +.Tn IP +に特有のエラーが +.Tn IP +のオプションを設定したり取得したりする際に生じることがあります。 +.Bl -tag -width EADDRNOTAVAILxx +.It Bq Er EINVAL +ソケットのオプション名に不明なものが与えられました。 +.It Bq Er EINVAL +IP のオプションフィールドが適切な形になっていませんでした。 +すなわち、オプションフィールドが最小値より短かったり、 +与えられたオプションバッファよりも長かったりしたということです。 +.El +.Sh 関連項目 +.Xr getsockopt 2 , +.Xr recv 2 , +.Xr send 2 , +.Xr icmp 4 , +.Xr inet 4 , +.Xr intro 4 +.Sh 歴史 +.Nm +プロトコルは、 +.Bx 4.2 +から登場しました。 |