ICMP
Section: Linux Programmer's Manual (7)
Updated: 2010-02-25
Index
JM Home Page
roff page
名前
icmp, IPPROTO_ICMP - Linux IPv4 ICMP カーネルモジュール
説明
このカーネルモジュールは RFC 792 で定義されている Internet
Control Message Protocol を実装したものである。
このプロトコルはエラー状況を知らせたり診断を行うために用いられる。
ユーザーはこのモジュールとは直接には通信できない。
このモジュールはカーネルの他のプロトコルと通信し、
それらのプロトコルが ICMP エラーをアプリケーションレイヤに渡す。
カーネルの ICMP モジュールは ICMP リクエストに対する応答も行う。
raw ソケットをプロトコル
IPPROTO_ICMP
でオープンすれば、
ユーザープロトコルはローカルなソケット全てに対する
ICMP パケットを受信することができる。
詳細は
raw(7)
を参照のこと。
ソケットに渡される ICMP パケットのタイプは
ICMP_FILTER
オプションによってフィルターできる。
ICMP パケットは (たとえユーザーソケットに渡される場合でも)、
常にカーネルによって (も) 処理される。
Linux では ICMP エラーパケットのレートをそれぞれの送り先に対して
制限している。
ICMP_REDIRECT
と
ICMP_DEST_UNREACH
も到着したパケットの行き先経路 (destination route) を制限する。
/proc インタフェース
ICMP では、いくつかのグローバルパラメータを設定するための
/proc
ファイル群が用意されている。
これらのパラメータには、
/proc/sys/net/ipv4/
ディレクトリ内のファイルの読み書きでアクセスできる。
これらのパラメータのほとんどは特定の ICMP タイプに対するレート制限
(rate limitation) である。
Linux 2.2 は ICMP の制限にトークン・バケット・フィルタ
(token bucket filter) を用いる。
それぞれの値は、バーストの後にトークン・バケット・フィルタがクリア
されるまでのタイムアウトを秒単位で表したものである。最小単位(jiffy)は
システム依存の単位で i386 システムは通常 10ms、alpha や ia64 では
1ms である。
- icmp_destunreach_rate (Linux 2.2 から 2.4.9 まで)
-
ICMP 不達パケット (Destination Unreachable packet) を送る最大レート。
これは特定のルートまたは行き先にパケットを送信するレートを制限する。
この制限は、
path MTU discovery に必要な
ICMP_FRAG_NEEDED
パケットの送信には影響しない。
- icmp_echo_ignore_all (Linux 2.2 以降)
-
この値が非ゼロの場合は、 Linux はすべての
ICMP_ECHO
要求を無視する。
- icmp_echo_ignore_broadcasts (Linux 2.2 以降)
-
この値が非ゼロの場合は、 Linux はブロードキャストアドレスに送られたすべての
ICMP_ECHO
要求を無視する。
- icmp_echoreply_rate (Linux 2.2 から 2.4.9 まで)
-
ICMP_ECHOREQUEST
パケットに応答する
ICMP_ECHOREPLY
パケットの最大送信レート。
- icmp_errors_use_inbound_ifaddr (Boolean; default: disabled; Linux 2.6.12 以降)
-
これを無効にすると、ICMP エラーメッセージは、
出力インタフェースのプライマリアドレスで送信される。
これを有効にすると、エラーメッセージは ICMP エラーの原因となったパケットを
受信したインタフェースのプライマアドレスで送信される。
この動作は、多くのネットワーク管理者がルータに対して期待しているものであり、
これにより複雑なネットワークレイアウトのデバッグがより容易になる。
選択されたインタフェースでプライマリアドレスが存在しない場合は、
この設定に関わらず、最初のループバック以外のインタフェースで、
プライマリアドレスを持つインタフェースのプライマリアドレスが使用される点に
注意すること。
- icmp_ignore_bogus_error_responses (Boolean; default: disabled; Linux 2.2 以降)
-
ルータの中には、RFC1122 に違反し、ブロードキャストフレームに対して
偽の応答を送信するものがある。
このような違反は通常カーネルの警告としてログに記録される。
このパラメータを有効にすると、カーネルはこのような警告を出さなくなり、
ログファイルに雑音のような情報が記録されるのを避けることができる。
- icmp_paramprob_rate (Linux 2.2 から 2.4.9 まで)
-
ICMP_PARAMETERPROB
パケットの最大送信レート。
これらのパケットは不正な IP ヘッダを持つパケットが到着した場合に
送信される。
- icmp_ratelimit (integer; default: 1000; Linux 2.4.10 以降)
-
種別が
icmp_ratemask
(下記参照) にマッチした ICMP パケットの、
特定の送信先への送信レートの最大値を制限する。
0 はレート制限を無効にすることを、
0 以外の値は応答間の最小間隔 (ミリ秒単位) を示す。
- icmp_ratemask (integer; default: 下記参照; Linux 2.4.10 以降)
-
レート制限を行う ICMP タイプを決めるマスク。
有効ビット: IHGFEDCBA9876543210
デフォルトマスク: 0000001100000011000 (0x1818)
ビット定義 (カーネルソースファイル
include/linux/icmp.h
を参照):
0 Echo Reply
3 Destination Unreachable *
4 Source Quench *
5 Redirect
8 Echo Request
B Time Exceeded *
C Parameter Problem *
D Timestamp Request
E Timestamp Reply
F Info Request
G Info Reply
H Address Mask Request
I Address Mask Reply
アスタリスク印が付いたビットは、デフォルトでレート制限が有効に
なっている (上記のマスクのデフォルトも参照)。
- icmp_timeexceed_rate (Linux 2.2 から 2.4.9 まで)
-
ICMP_TIME_EXCEEDED
パケットの最大送信レート。
これらのパケットはパケットがあまりに多くの hop を通過した場合に、
ループを防ぐために送られる。
バージョン
ICMP_ADDRESS
要求に対するサポートは 2.2 で削除された。
ICMP_SOURCE_QUENCH
は Linux 2.2 で削除された。
注意
他の多くの実装では、
IPPROTO_ICMP
raw ソケットがサポートされていない。
この機能は移植性が必要なプログラムでは用いるべきでない。
Linux がルーターとして動作していないときには、
ICMP_REDIRECT
パケットは送信されない。
またこれらが受け取られるのも、発信元がルーティングテーブルに定義されている
古いゲートウェイで、リダイレクト・ルート (redirect route) が
適当な時間の後に期限切れになっている場合に限られる。
ICMP_TIMESTAMP
から返される 64 ビットのタイムスタンプは、
紀元 (Epoch) である 1970-01-01 00:00:00 +0000 (UTC)
からの経過時間をミリ秒単位で表したものである。
Linux ICMP は ICMP を送るために内部で raw ソケットを用いる。
raw ソケットは
netstat(8)
の出力に 0 inode として出力される。
関連項目
ip(7)
RFC 792:
ICMP プロトコルの説明
Index
- 名前
-
- 説明
-
- /proc インタフェース
-
- バージョン
-
- 注意
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 03:26:45 GMT, April 25, 2010