icmp - 約束事その他の説明 - Linux コマンド集 一覧表
名前
icmp, IPPROTO_ICMP - Linux IPv4 ICMP カーネルモジュール
説明
このカーネルモジュールは RFC792 で定義されている 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) を制限する。
SYSCTL
ICMP では、いくつかのグローバルな IP パラメータを sysctl を通して設定することができる。 これらの sysctl へアクセスするには、 /proc/sys/net/ipv4/* ファイルを読み書きする方法と、インターフェースに対して sysctl (2) を用いる方法がある。 これらの sysctl のほとんどは特定の ICMP タイプに対するレート制限 (rate limitation) である。 Linux 2.2 は ICMP の制限にトークン・バケット・フィルタ (token bucket filter) を用いる。 それぞれの値は、バーストの後にトークン・バケット・フィルタがクリア されるまでのタイムアウトを秒単位で表したものである。最小単位(jiffy)は システム依存の単位で x86 システムは通常 10ms、alpha や IA64 では 1ms である。
- icmp_destunreach_rate
- ICMP 不達パケット (Destination Unreachable packet) を送る最大レート。 これは特定のルートまたは行き先にパケットを送信するレートを制限する。 この制限は、 path MTU discovery に必要な ICMP_FRAG_NEEDED パケットの送信には影響しない。
- icmp_echo_ignore_all
- この値が非ゼロの場合は、 Linux はすべての ICMP_ECHO 要求を無視する。
- icmp_echo_ignore_broadcasts
- この値が非ゼロの場合は、 Linux はブロードキャストアドレスに送られたすべての ICMP_ECHO 要求を無視する。
- icmp_echoreply_rate
- ICMP_ECHOREQUEST パケットに応答する ICMP_ECHOREPLY パケットの最大送信レート。
- icmp_paramprob_rate
- ICMP_PARAMETERPROB パケットの最大送信レート。 これらのパケットは不正な IP ヘッダを持つパケットが到着した場合に 送信される。
- icmp_timeexceed_rate
- ICMP_TIME_EXCEEDED パケットの最大送信レート。 これらのパケットはパケットがあまりに多くの hop を通過した場合に、 ループを防ぐために送られる。
注意
他の多くの実装では、 IPPROTO_ICMP raw ソケットがサポートされていない。 この機能は移植性が必要なプログラムでは用いるべきでない。
Linux がルーターとして動作していないときには、 ICMP_REDIRECT パケットは送信されない。 またこれらが受け取られるのも、発信元がルーティングテーブルに定義されている 古いゲートウェイで、リダイレクト・ルート (redirect route) が 適当な時間の後に期限切れになっている場合に限られる。
ICMP_TIMESTAMP から返される 64 ビットのタイムスタンプは、 1970 年 1 月 1 日からの経過時間をミリ秒単位で表したものである。
Linux ICMP は ICMP を送るために内部で raw ソケットを用いる。 raw ソケットは netstat (8) の出力に 0 inode として出力される。
バージョン
ICMP_ADDRESS 要求に対するサポートは 2.2 で削除された。
ICMP_SOURCE_QUENCH は Linux 2.2 で削除された。
関連項目
RFC
792
:
ICMP プロトコルの説明