「ping」はICMPサーバに接続されていますか?

「ping」はICMPサーバに接続されていますか?

ping - ICMP ECHO_REQUEST をネットワークホストに送信します。

ping host端末で実行するとpingICMPクライアントですか?

pingで実行されているICMPサーバーに接続していますかhost? ICMPサーバープログラムとは何ですか?

pingのポートに接続していますかhost?ポート番号はICMPサーバのポート番号ですか?

答え1

PINGは実際にはクライアントです。

pingコマンドは、ICMPプロトコルの一部であるecho-r​​eply(ICMPタイプ0メッセージ)およびecho-r​​equest(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 パケットについては下図を参照してください。ICMP

より多くのカーネル定義については:

Linux/icmp.h

#define ICMP_ECHOREPLY      0   /* Echo Reply           */
#define ICMP_ECHO           8   /* Echo Request         */

関連情報