ping - ICMP ECHO_REQUEST をネットワークホストに送信します。
ping host
端末で実行するとping
ICMPクライアントですか?
ping
で実行されているICMPサーバーに接続していますかhost
? ICMPサーバープログラムとは何ですか?
ping
のポートに接続していますかhost
?ポート番号はICMPサーバのポート番号ですか?
答え1
PINGは実際にはクライアントです。
pingコマンドは、ICMPプロトコルの一部であるecho-reply(ICMPタイプ0メッセージ)およびecho-request(ICMPメッセージタイプ8)も使用します。
多くの専門家とネットワーク監視ソフトウェアは、エコー要求/応答成功したICMPメッセージ処理をシステムの動作/中断を示す指標として使用しています。しかし、これは契約であり、厳密に実施されるわけではありません。たとえば、Linuxサーバーを監視するためにPINGを使用する代わりに、SSH TCP / 22ポートを使用するようにNagiosで定義できます。
TCP接続内には、確立された接続自体の概念はありません。 ICMPは接続指向プロトコルではありません。
前述のように、ポートの概念も存在しません。 LinuxカーネルはICMPパケットを処理し、それに応じて応答をスローし、その動作を忘れます(例えば、速度制限などの他のメカニズムを無視する)。
Pingは特別な権限を持たないユーザーも使用できるか、RAWソケットを使用してICMPパケットを生成するため、setuidバイナリでなければなりません。
sysctl / proc設定を使用して、カーネルがICMPエコー要求メッセージに応答するかどうかを定義することもできます。
ICMP pingへの応答を無効にするには:
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
または再度有効にしてください。
echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all
ICMPメッセージの処理を担当するカーネル部分は、icmp.c
以下のようにLinuxカーネルのソースコードにあります。https://github.com/torvalds/linux/blob/master/net/ipv4/icmp.c
ICMP パケットについては下図を参照してください。
より多くのカーネル定義については:
Linux/icmp.h
#define ICMP_ECHOREPLY 0 /* Echo Reply */
#define ICMP_ECHO 8 /* Echo Request */