.\" This man page is Copyright (C) 1999 Andi Kleen . .\" .\" %%%LICENSE_START(VERBATIM_ONE_PARA) .\" Permission is granted to distribute possibly modified copies .\" of this page provided the header is included verbatim, .\" and in case of nontrivial modification author and date .\" of the modification is added to the header. .\" %%%LICENSE_END .\" .\" $Id: udp.7,v 1.7 2000/01/22 01:55:05 freitag Exp $ .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1999 NAKANO Takeo all rights reserved. .\" Translated 1999-12-06, NAKANO Takeo .\" Updated 2005-10-09, Kentaro Shirakata .\" Updated 2007-01-05, Akihiro MOTOKI , LDP v2.43 .\" Updated 2008-12-29, Akihiro MOTOKI, LDP v3.14 .\" Updated 2010-04-10, Akihiro MOTOKI, LDP v3.24 .\" .TH UDP 7 2013\-07\-31 Linux "Linux Programmer's Manual" .SH 名前 udp \- IPv4 の ユーザーデータグラムプロトコル .SH 書式 \fB#include \fP .br \fB#include \fP .br \fB#include \fP .sp \fBudp_socket = socket(AF_INET, SOCK_DGRAM, 0);\fP .SH 説明 これは RFC\ 768 で記述されている User Datagram Protocol の実装である。 UDP はコネクションレスの、信頼性の低いデータパケットサービスである。 パケットは到着前に並び替えられたり複製されたりする。 UDP は転送エラーを検出するためにチェックサムを生成・チェックする。 UDP ソケットが生成されるとき、 ローカルアドレスやリモートアドレスは指定されない。 正しい行き先アドレスを引数として \fBsendto\fP(2) や \fBsendmsg\fP(2) を呼べば、データグラムはただちに送信される。 ソケットに対して \fBconnect\fP(2) を呼ぶと、デフォルトの行き先アドレスが設定され、 \fBsend\fP(2) や \fBwrite\fP(2) を使って、行き先アドレスの指定なしにデータグラムを送信できるようになる。 この場合でも、行き先アドレスを \fBsendto\fP(2) や \fBsendmsg\fP(2) に渡せば、デフォルト以外のアドレスに送信可能である。 パケットを受信するために、まずソケットを \fBbind\fP(2) を用いてローカルなアドレスにバインドさせることもできる。 そうでない場合は、ソケット層は自動的に \fI/proc/sys/net/ipv4/ip_local_port_range\fP で定義されている範囲の外で空いているローカルなポートを割り当て、 ソケットを \fBINADDR_ANY\fP にバインドする。 受信動作はパケットを一つだけ返す。渡したバッファーよりもパケットが 小さければ、そのパケットの大きさのデータだけが返される。 逆にバッファーよりも大きい場合はパケットは丸められ、 \fBMSG_TRUNC\fP フラグがセットされる。 \fBMSG_WAITALL\fP はサポートしていない。 IP オプションは、 \fBip\fP(7) に記述されているソケットオプションを用いて読み書きできる。 これらは適切な \fI/proc\fP パラメーターが有効な場合に限ってカーネルによって処理される (しかし無効になっている場合でもユーザーには渡される)。 \fBip\fP(7) を参照のこと。 \fBMSG_DONTROUTE\fP フラグが送信時にセットされている場合には、 行き先アドレスはローカルなインターフェースアドレスから 参照できなければならない。パケットはそのインターフェースにしか送られない。 デフォルトでは、Linux の UDP は Path MTU Discovery を行う。 つまり、カーネルは特定の宛先 IP アドレスの MTU (Maximum Transmission Unit; 最大転送単位) を記録し、UDP パケットの書き込みが MTU を超えた場合 \fBEMSGSIZE\fP を返す。 \fBEMSGSIZE\fP を返された場合、アプリケーションはパケットサイズを小さくすべきである。 ソケットオプション \fBIP_MTU_DISCOVER\fP または \fI/proc/sys/net/ipv4/ip_no_pmtu_disc\fP ファイルを使って Path MTU Discovery を無効にすることもできる (詳細は \fBip\fP(7) を参照)。 Path MTU Discovery を無効にした場合は、パケットサイズが インターフェースの MTU よりも大きいと UDP はそのパケットを フラグメント化して送出する。 しかしながら、性能と信頼性の理由から Path MTU Discovery を 無効にするのは推奨できない。 .SS アドレスのフォーマット UDP は IPv4 の \fIsockaddr_in\fP アドレスフォーマットを用いる。これは \fBip\fP(7) に記述されている。 .SS エラー処理 致命的なエラーは、たとえソケットが接続されていなくても、 すべてエラー戻り値としてユーザーに渡される。 これにはネットワークから受け取る非同期エラーも含まれる。 同じソケットを使って送信した昔のパケットに関するエラーを受け取るかもしれない。 この振る舞いは他の BSD ソケットの実装の多くとは異なる。 これらではソケットが接続されていない場合はエラーを全く返さない。 Linux の振る舞いは \fBRFC\ 1122\fP での指定に従ったものである。 Linux 2.0 と 2.2 では、古いコードとの互換性のために、 \fBSO_BSDCOMPAT\fP \fBSOL_SOCKET\fP オプションを設定すれば、ソケットが接続されている 場合に限ってリモートのエラーを受信するようにできた (\fBEPROTO\fP と \fBEMSGSIZE\fP を除く)。 ローカルで生成されたエラーは常に渡される。 このソケットオプションのサポートはそれ以降のバージョンの Linux で 削除された。詳細は \fBsocket\fP(7) を参照。 \fBIP_RECVERR\fP オプションが有効になっていると、 すべてのエラーはソケットのエラーキューに保存される。 これは \fBMSG_ERRQUEUE\fP フラグをセットして \fBrecvmsg\fP(2) を呼べば受信できる。 .SS "/proc インターフェース" システム全体の UDP パラメーター設定には、 \fI/proc/sys/net/ipv4/\fP ディレクトリ内のファイルの読み書きでアクセスできる。 .TP \fIudp_mem\fP (Linux 2.6.25 以降) これは 3 つの整数からなるベクトル値で、 UDP の全ソケットのキューで利用可能なページ数を制御する。 .RS .TP 10 \fImin\fP このページ数より少なければ、UDP はそのメモリー使用に関して 干渉されない。 UDP に割り当てられたメモリー総量がこの値を超過すると、 UDP はメモリー使用量を調整し始める。 .TP \fIpressure\fP この値は \fItcp_mem\fP の形式 (\fBtcp\fP(7) 参照) と合わせるために導入された .TP \fImax\fP UDP の全ソケットのキューで利用可能なページ数。 .RE .IP これらの 3 つの値のデフォルト値は、 ブート時に利用可能なメモリー総量から計算される。 .TP \fIudp_rmem_min\fP (integer; デフォルト値: PAGE_SIZE; Linux 2.6.25 以降) メモリー使用量の調整中に、UDP ソケットが使用できる受信バッファーの最小値 (バイト単位)。 UDP の全ソケットのページ使用量の合計が \fIudp_mem\fP pressure を超過している場合であっても、 各 UDP ソケットはデータの受信にこのサイズ分だけは使用することができる。 .TP \fIudp_wmem_min\fP (integer; デフォルト値: PAGE_SIZE; Linux 2.6.25 以降) メモリー使用量の調整中に、UDP ソケットが使用できる送信バッファーの最小値 (バイト単位)。 UDP の全ソケットのページ使用量の合計が \fIudp_mem\fP pressure を超過している場合であっても、 各 UDP ソケットはデータの送信にこのサイズ分だけは使用することができる。 .SS ソケットオプション UDP ソケットオプションを設定または取得するには、 取得には \fBgetsockopt\fP(2) を、設定には \fBsetsockopt\fP(2) をオプションレベル引数に \fBIPPROTO_UDP\fP を指定して呼び出す。 注釈がない限り、 \fIoptval\fP は \fIint\fP へのポインターである。 .TP \fBUDP_CORK\fP (Linux 2.5.44 以降) .\" FIXME document UDP_ENCAP (new in kernel 2.5.67) .\" From include/linux/udp.h: .\" /* UDP encapsulation types */ .\" #define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */ .\" #define UDP_ENCAP_ESPINUDP 2 /* draft-ietf-ipsec-udp-encaps-06 */ .\" #define UDP_ENCAP_L2TPINUDP 3 /* rfc2661 */ このオプションが指定されると、このソケットの全てのデータ出力は 一つのデータグラムに蓄積され、このオプションが無効化された時に 送信される。 このオプションは移植性を考慮したコードでは用いるべきではない。 .SS ioctl 以下に示す ioctl は \fBioctl\fP(2) を使ってアクセスできる。 正しい文法は以下の通り。 .PP .RS .nf \fBint\fP\fI value\fP\fB;\fP \fIerror\fP\fB = ioctl(\fP\fIudp_socket\fP\fB, \fP\fIioctl_type\fP\fB, &\fP\fIvalue\fP\fB);\fP .fi .RE .TP \fBFIONREAD\fP (\fBSIOCINQ\fP) .\" See http://www.securiteam.com/unixfocus/5KP0I15IKO.html .\" "GNUnet DoS (UDP Socket Unreachable)", 14 May 2006 整数へのポインターを引き数に取り、そのポインターに、次の処理待ちのデータグラムの サイズをバイト単位で返す。処理待ちのデータグラムがない場合は 0 を返す。 \fB警告\fP: \fBFIONREAD\fP を使った場合、処理待ちのデータグラムがない場合と、 次の処理待ちデータグラムが 0 バイトのデータの場合を区別することができない。 この両者を区別したい場合は、\fBselect\fP(2), \fBpoll\fP(2), \fBepoll\fP(7) を使う方が安全である。 .TP \fBTIOCOUTQ\fP (\fBSIOCOUTQ\fP) ローカル送信キューにあるデータサイズをバイト単位で返す。 Linux 2.4 以上でのみ対応している。 .PP さらに、 \fBip\fP(7) と \fBsocket\fP(7) で述べられている全ての ioctl も対応している。 .SH エラー \fBsocket\fP(7) や \fBip\fP(7) に記述されている全てのエラーが、 UDP ソケットの送受信で返される可能性がある。 .TP \fBECONNREFUSED\fP 行き先アドレスに関連づけられている受信者がいない。 これは以前のパケットがそのパケットを 上書き送信してしまっているからであることが多い。 .SH バージョン .\" .SH CREDITS .\" This man page was written by Andi Kleen. \fBIP_RECVERR\fP は Linux 2.2 の新しい機能である。 .SH 関連項目 \fBip\fP(7), \fBraw\fP(7), \fBsocket\fP(7), \fBudplite\fP(7) RFC\ 768 : User Datagram Protocol .br RFC\ 1122 : ホストの必要条件 .br RFC\ 1191 : path MTU discovery の記述 .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。