ICMP(7) | Linux Programmer's Manual | ICMP(7) |
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) を制限する。
ICMP では、いくつかのグローバルパラメーターを設定するための /proc ファイル群が用意されている。 これらのパラメーターには、 /proc/sys/net/ipv4/ ディレクトリ内のファイルの読み書きでアクセスできる。 これらのパラメーターのほとんどは特定の ICMP タイプに対するレート制限 (rate limitation) である。 Linux 2.2 は ICMP の制限にトークンバケットフィルタ (token bucket filter) を用いる。 それぞれの値は、バーストの後にトークンバケットフィルタがクリア されるまでのタイムアウトを秒単位で表したものである。最小単位(jiffy)は システム依存の単位で i386 システムは通常 10ms、alpha や ia64 では 1ms である。
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_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), rdisc(8)
RFC 792: ICMP プロトコルの説明
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。
2017-11-26 | Linux |