Подключается ли ping к серверу ICMP?

ping – отправить ICMP ECHO_REQUEST сетевым хостам

Когда я запускаю ping host в терминале, запускается ли ping host клиент ICMP?

Подключается ли ping к серверу ICMP, работающему на host ? Что за программа является сервером ICMP?

Подключается ли ping к порту на host , и является ли этот порт номером для сервера ICMP?

PING действительно клиент.

Команда ping также использует часть протокола ICMP, а именно эхо-ответ (сообщение ICMP типа 0) и эхо-запрос (тип сообщения ICMP 8).

Многие специалисты и программное обеспечение для мониторинга сети используют эхо-запрос / ответ на успешную обработку ICMP-сообщений в качестве индикатора того, что система работает. Однако это соглашение, и не является строго обязательным. Например, я могу определить в Nagios, что буду контролировать свои серверы Linux с портом SSH TCP / 22 вместо использования PING.

Концепция как установленного соединения сама по себе не существует, как в соединениях TCP. ICMP – это не ориентированный на соединение протокол.

Как указывалось ранее, концепция порта также не существует – kernel ​​Linux обрабатывает ICMP-пакет и соответственно выдает ответ на него, забывая затем о деле (например, игнорируя другие механизмы в качестве ограничения скорости).

Ping также доступен пользователю со специальными привилегиями или должен быть двоичным файлом setuid, так как он использует сокеты RAW для производства ICMP-пакета.

Вы также можете определить, отвечают ли ядра сообщению эхо-запроса ICMP с параметром sysctl / proc.

Чтобы отключить ответ на запросы ICMP, выполните:

 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 */