OSDN Git Service

(split) LDP: Update release pages
[linuxjm/LDP_man-pages.git] / release / man7 / raw.7
1 .\" t
2 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
3 .\"
4 .\" %%%LICENSE_START(VERBATIM_ONE_PARA)
5 .\" Permission is granted to distribute possibly modified copies
6 .\" of this page provided the header is included verbatim,
7 .\" and in case of nontrivial modification author and date
8 .\" of the modification is added to the header.
9 .\" %%%LICENSE_END
10 .\"
11 .\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $
12 .\"
13 .\"*******************************************************************
14 .\"
15 .\" This file was generated with po4a. Translate the source file.
16 .\"
17 .\"*******************************************************************
18 .\"
19 .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved.
20 .\" Translated 1999-12-06, NAKANO Takeo <nakano@apm.seikei.ac.jp>
21 .\" Updated 2007-01-05, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.43
22 .\" Updated 2013-03-26, Akihiro MOTOKI <amotoki@gmail.com>
23 .\"
24 .TH RAW 7 2012\-05\-10 Linux "Linux Programmer's Manual"
25 .SH 名前
26 raw \- Linux の IPv4 raw ソケット
27 .SH 書式
28 \fB#include <sys/socket.h>\fP
29 .br
30 \fB#include <netinet/in.h>\fP
31 .br
32 \fBraw_socket = socket(AF_INET, SOCK_RAW, int \fP\fIprotocol\fP\fB);\fP
33 .SH 説明
34 raw ソケットを使うと、新しい IPv4 プロトコルをユーザ空間で 実装できるようになる。 raw ソケットは、リンクレベルヘッダを 含まない raw
35 データグラムの送受信ができる。
36
37 IPv4 レイヤは、扱っているソケットで \fBIP_HDRINCL\fP ソケットオプションが有効になっていなければ、 パケットを送信するときに IP
38 ヘッダを生成する。 \fBIP_HDRINCL\fP オプションが有効になっているときは、パケットには IP ヘッダが含まれていなければならない。
39 受信時には、 IP ヘッダは常にパケットに含まれている。
40
41 実効ユーザー ID が 0 のプロセスか、 \fBCAP_NET_RAW\fP 権限を持つプロセスだけが raw ソケットをオープンすることができる。
42
43 この raw ソケットに指定された \fIprotocol\fP 番号にマッチする全てのパケットとエラーとが、このソケットに渡される。
44 許可されているプロトコルのリストは RFC\ 1700 の割り当て番号と \fBgetprotobyname\fP(3)  を見よ。
45
46 \fBIPPROTO_RAW\fP のプロトコルは暗黙のうちに \fBIP_HDRINCL\fP を有効にするので、 渡されたヘッダで指定された、あらゆる IP
47 プロトコルを送信できる。 \fBIPPROTO_RAW\fP 経由でのあらゆる IP プロトコルの受信は、 raw ソケットを用いては行えない。
48 .RS
49 .TS
50 tab(:) allbox;
51 c s
52 l l.
53 IP ヘッダフィールド。 \fBIP_HDRINCL\fP によって送信時に変更される。
54 IP チェックサム:常に変更される。
55 ソースアドレス:元の値が 0 の時に変更される。
56 パケット ID:元の値が 0 の時に変更される。
57 全体の長さ:常に埋められる。
58 .TE
59 .RE
60 .sp
61 .PP
62 \fBIP_HERINCL\fP が指定されていて、 IP ヘッダに 0 でない送信先アドレスが記入されていた場合は、
63 その送信先アドレスがパケットの経路を決めるのに用いられる。 \fBMSG_DONTROUTE\fP が指定されている時には、
64 送信先アドレスはローカルなインターフェースを参照するものでなければならない。 さもないと、ルーティングテーブルの参照はいずれにせよ行われるが、
65 ゲートウェイが必要な経路は無視される。
66
67 \fBIP_HDRINCL\fP がセットされていなければ、 raw ソケットの IP ヘッダオプションを \fBsetsockopt\fP(2)
68 を用いて設定することができる。詳細な情報は \fBip\fP(7)  を見よ。
69
70 Linux 2.2 では、 IP ヘッダの全てのフィールドとオプションとを IP ソケットオプションによって設定できる。したがって raw
71 ソケットが必要になるのは、新しいプロトコルを設計する場合か、 ユーザーインターフェースを持たないプロトコル (ICMP など) を扱う場合に 限られる。
72
73 パケットは、受信されるとまずプロトコルにバインドしている raw ソケットに渡され、 その後で他のプロトコルハンドラ
74 (カーネルのプロトコルモジュールなど)  に渡される。
75 .SS アドレスのフォーマット
76 raw ソケットは標準の \fIsockaddr_in\fP アドレス構造体を用いる。定義は \fBip\fP(7)  でなされている。 \fIsin_port\fP
77 フィールドを IP プロトコル番号の指定に用いることができるが、 Linux 2.2 ではこれは送信時には無視され、常に 0 にされる (バグ
78 の項を参照)。 受信パケットに対しては、 \fIsin_port\fP はそのパケットのプロトコルにセットされる。 用いることのできる IP
79 プロトコルは、インクルードファイル \fI<netinet/in.h>\fP を見よ。
80 .SS ソケットオプション
81 .\" Or SOL_RAW on Linux
82 raw ソケットのオプションは、 \fBIPPROTO_RAW\fP ファミリーフラグを与えて \fBsetsockopt\fP(2)  を呼べば設定でき、
83 \fBgetsockopt\fP(2)  を呼べば取得できる。
84 .TP 
85 \fBICMP_FILTER\fP
86 \fBIPPROTO_ICMP\fP プロトコルにバインドされた raw ソケットのための特殊なフィルタを有効にする。 この値は ICMP
87 メッセージのタイプそれぞれに対して、どれをフィルターアウト するかを表したビットセットである。デフォルトでは ICMP
88 メッセージは全くフィルターしない。
89 .PP
90 さらに、データグラムソケットに使える全ての \fBip\fP(7)  \fBSOL_IP\fP ソケットオプションがサポートされている。
91 .SS エラー処理
92 ネットワークで生じたエラーがユーザに渡されるのは、 ソケットが接続済みの場合か \fBIP_RECVERR\fP フラグが有効になっている場合に限られる。
93 接続済みのソケットに対しては、 \fBEMSGSIZE\fP および \fBEPROTO\fP だけが渡される (互換性のため)。 \fBIP_RECVERR\fP
94 を設定すると、全てのネットワークエラーがエラーキューに保存される。
95 .SH エラー
96 .TP 
97 \fBEACCES\fP
98 ユーザーが broadcast フラグを設定していないソケットを用いて ブロードキャストアドレスに送信を行おうとした。
99 .TP 
100 \fBEFAULT\fP
101 不正なメモリアドレスが与えられた。
102 .TP 
103 \fBEINVAL\fP
104 引き数が不正。
105 .TP 
106 \fBEMSGSIZE\fP
107 パケットが大きすぎる。 Path MTU Discoverry が有効になっている (\fBIP_MTU_DISCOVER\fP ソケットフラグ)
108 か、パケットのサイズが IPv4 で許されている パケットサイズの最大値 64KB を越えている。
109 .TP 
110 \fBEOPNOTSUPP\fP
111 ソケット呼び出しに不正なフラグ (\fBMSG_OOB\fP など) が渡された。
112 .TP 
113 \fBEPERM\fP
114 ユーザーは raw ソケットをオープンする権限を持っていない。 実行ユーザー ID が 0 のプロセスか、 \fBCAP_NET_RAW\fP
115 属性を持つプロセスだけがこれを行うことができる。
116 .TP 
117 \fBEPROTO\fP
118 パラメータの問題を報告する ICMP エラーを受け取った。
119 .SH バージョン
120 \fBIP_RECVERR\fP と \fBICMP_FILTER\fP は Linux 2.2 で登場した。これらは Linux での拡張であり、
121 移植性の必要なプログラムでは用いるべきでない。
122
123 Linux 2.0 では \fBSO_BSDCOMPAT\fP ソケットオプションをセットすると、 BSD の raw
124 ソケットにあるバグに互換性を取ることができた \(em Linux 2.2 以降では、このオプションはもはや効力を持たない。
125 .SH 注意
126 デフォルトでは、raw ソケットは Path MTU Discovery を行う。 つまり、カーネルは特定の宛先 IP アドレスの MTU
127 (Maximum Transmission Unit; 最大転送単位) を記録し、raw パケットの書き込みが MTU を超えた場合
128 \fBEMSGSIZE\fP を返す。 \fBEMSGSIZE\fP を返された場合、アプリケーションはパケットサイズを小さくすべきである。 ソケットオプション
129 \fBIP_MTU_DISCOVER\fP または \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP ファイルを使って Path
130 MTU Discovery を無効にすることもできる (詳細は \fBip\fP(7)  を参照)。 Path MTU Discovery
131 を無効にした場合は、パケットサイズが インタフェースの MTU よりも大きいと raw ソケットはそのパケットを フラグメント化して送出する。
132 しかしながら、性能と信頼性の理由から Path MTU Discovery を 無効にするのは推奨できない。
133
134 \fBbind\fP(2)  システムコールを用いると、 raw ソケットを 特定のローカルアドレスにバインドさせることができる。
135 このバインドがされていない場合は、指定した IP プロトコルの すべてのパケットが受信される。 さらに、 \fBSO_BINDTODEVICE\fP
136 を用いれば raw ソケットを特定のネットワークデバイスに バインドさせることもできる。 \fBsocket\fP(7)  を見よ。
137
138 \fBIPPROTO_RAW\fP ソケットは送信専用である。もしどうしてもすべての IP パケットを 受信したい場合は、 \fBpacket\fP(7)
139 ソケットを \fBETH_P_IP\fP プロトコルで用いること。 packet ソケットは raw ソケットのように IP
140 フラグメントを再構成しないことに注意。
141
142 datagram ソケットに対するすべての ICMP パケットを受信したい場合は、 特定のソケットに対して \fBIP_RECVERR\fP
143 を用いるほうが良い場合が多い。 \fBip\fP(7)  を見よ。
144
145 raw ソケットは、 Linux のすべての IP プロトコルを受信することができる。 ICMP や TCP
146 のように、カーネル内部にプロトコルモジュールを持つような ものも可能である。この場合には、パケットはカーネルモジュールと raw
147 ソケットの両方に渡される (raw ソケットが複数あればそれぞれに渡される)。 移植性の必要なプログラムではこの機能に依存するべきではない。 他の多くの
148 BSD におけるソケットの実装ではこの点において制限がある。
149
150 Linux はユーザーから渡されたヘッダを決して変更しない (ただし \fBIP_HDRINCL\fP の説明にあるように、 0
151 をいくつか埋める場合を除く)。 これは他の多くの raw ソケットの実装では異なる。
152
153 一般に raw ソケットは移植性がないことが多いので、 移植性が必要なプログラムでは避けるべきである。
154
155 raw ソケットへの送信では、 IP プロトコルを \fIsin_port\fP から取得できなければならない。この機能は Linux 2.2
156 では使えなくなった。 \fBIP_HDRINCL\fP を用いれば同様のことが実現できる。
157 .SH バグ
158 透過プロクシ (transparent proxy) 拡張については記述していない。
159
160 \fBIP_HDRINCL\fP オプションがセットされているとデータグラムはフラグメント化されず、 インターフェースの MTU の大きさに制限される。
161
162 .\" .SH AUTHORS
163 .\" This man page was written by Andi Kleen.
164 送信用の IP プロトコルの設定を \fIsin_port\fP にしておく機能は Linux 2.2 から使えなくなった。
165 ソケットにバインドされているプロトコルか、最初の \fBsocket\fP(2)  コールによって指定されたプロトコルが常に用いられる。
166 .SH 関連項目
167 \fBrecvmsg\fP(2), \fBsendmsg\fP(2), \fBcapabilities\fP(7), \fBip\fP(7), \fBsocket\fP(7)
168
169 Path MTU discovery に関しては \fBRFC\ 1191\fP を参照。 IP プロトコルに関しては \fBRFC\ 791\fP
170 とインクルードファイル \fI<linux/ip.h>\fP を参照。
171 .SH この文書について
172 この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
173 である。プロジェクトの説明とバグ報告に関する情報は
174 http://www.kernel.org/doc/man\-pages/ に書かれている。