Вопрос или проблема
Я ищу простой способ оценить качество сети, проверяя, поступают ли ответы на пинги в пределах заданного таймаута. В идеале мне нужен инструмент, который периодически выполняет пинги с фиксированным интервалом и вычисляет коэффициент потери пакетов в конце каждого периода.
Существует три параметра:
- Период оценки: Общая продолжительность одного тестового цикла (например, 10 секунд).
- Частота пинга: Как часто пинги отправляются в течение периода оценки (например, один пинг каждые 0,1 секунды).
- Таймаут: Максимальное время, за которое ответ может быть признан действительным (например, 100 мс).
Проблема, с которой я столкнулся, заключается в том, что ни ping
, ни fping
, похоже, не уважают заданный таймаут для отдельных пингов. Например, в сети, где время обратного пути (RTT) постоянно составляет 1001 мс, и с вышеуказанными параметрами (10 с период, 0,1 с частота, 100 мс таймаут), коэффициент потерь должен составлять 100%, так как ни один ответ не может уложиться в таймаут 100 мс. Тем не менее, как ping
, так и fping
, похоже, считают любой ответ, полученный в пределах общего периода оценки (10 секунд), действительным, что приводит к неправильному вычислению потерь.
Существуют ли конкретные параметры командной строки в ping
или fping
, которые я мог пропустить, чтобы обеспечить таймаут для каждого пинга? Или, возможно, существует другой инструмент, который лучше соответствует моим требованиям? Или мне нужно написать собственный скрипт/программу для достижения этой цели?
Ответ или решение
Чтобы точно вычислить коэффициент потери пакетов с учетом таймаута на каждый пинг в периодических тестах, важно учитывать все предоставленные параметры: период оценки, частоту пинга и таймаут. Давайте разберемся с деталями этой задачи и предложим возможные решения.
Анализ проблемы
-
Период оценки: Это полное время одного цикла тестирования, например, 10 секунд. Это время определяет, как долго будет длиться каждый тест.
-
Частота пинга: Интервал отправки пингов в течение периода оценки, в данном случае один пинг каждые 0.1 секунды.
-
Таймаут: Максимальное время, в течение которого ответ на пинг считается допустимым, заданное как 100 миллисекунд.
Проблема заключается в том, что такие инструменты как ping
и fping
не учитывают таймаут для каждого отдельного пинга в рамках общего периода оценки.
Возможные решения
-
Настройка инструментов командной строки: И
ping
, иfping
могут не поддерживать строгий учет таймаута для каждого пинга по умолчанию. Однако можно использовать параметры команд дляping
:-W
: Устанавливает время ожидания ответа на пинг в миллисекундах. Например,ping -c 100 -i 0.1 -W 100 ваш_адрес
.
Однако, в некоторых реализациях
ping
таких параметров может не быть или они могут работать не так, как ожидается, в зависимости от системы. -
Использование альтернативных инструментов: На рынке существуют другие утилиты, которые более гибки в настройке, например,
hping
илиnping
(часть проекта Nmap). -
Создание кастомного скрипта: В случае, если существующие утилиты не удовлетворяют вашим требованиям, можно написать кастомный скрипт на Python или другом языке программирования. Используя библиотеку, такую как Scapy в Python, можно точно контролировать каждый пинг и обрабатывать ответы в соответствии с заданными таймингами. Вот простая концепция:
from scapy.all import * import time def check_packet_loss(host, period, frequency, timeout): start_time = time.time() transmitted = 0 lost_packets = 0 while time.time() - start_time < period: transmitted += 1 packet = IP(dst=host)/ICMP() reply = sr1(packet, timeout=timeout) if reply is None: lost_packets += 1 time.sleep(frequency) loss_rate = (lost_packets / transmitted) * 100 print(f"Packet Loss Rate: {loss_rate}%") check_packet_loss('8.8.8.8', 10, 0.1, 0.1)
Заключение
Поскольку ни ping
, ни fping
явно не поддерживают требуемый функционал пер-пинг таймаута, разработка кастомного скрипта или применение более гибких инструментов, таких как hping
или nping
, станут наилучшим подходом для точного расчета коэффициента потери пакетов при строгих условиях. Такой подход не только предоставляет большую гибкость в настройках, но и позволяет интегрировать дополнительные метрики для мониторинга качества сети.