kazmax - Linux で自宅サーバー

icmp - 約束事その他の説明 - Linux コマンド集 一覧表

  1. 名前
  2. 説明
  3. SYSCTL
  4. 注意
  5. バージョン
  6. 関連項目

名前

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_REDIRECTICMP_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 で削除された。

関連項目

  ip (7) 

RFC 792 : ICMP プロトコルの説明