Тестирование сетей в Linux

LinuxLinuxBeginner
Практиковаться сейчас

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы узнаете о сетевом тестировании в Linux с использованием команды ping. Сетевой тестирование является важной частью диагностики проблем с подключением, измерения производительности сети и обеспечения правильного взаимодействия между устройствами.

Команда ping является одним из самых базовых инструментов для сетевого тестирования в системах Linux. Она работает путем отправки ICMP (Internet Control Message Protocol, Протокол управления сообщениями Интернета) пакетов-запросов эхо на целевой хост и ожидания ICMP пакетов-ответов эхо. Эта простая механика позволяет вам проверить, доступен ли удаленный хост, и измерить время обратного пути для пакетов, которые отправляются в пункт назначения и возвращаются обратно.

Завершив это лабораторное занятие, вы получите практический опыт работы с инструментами сетевого тестирования и приобретете важные навыки для устранения неполадок в сети.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL linux(("Linux")) -.-> linux/BasicSystemCommandsGroup(["Basic System Commands"]) linux(("Linux")) -.-> linux/BasicFileOperationsGroup(["Basic File Operations"]) linux(("Linux")) -.-> linux/FileandDirectoryManagementGroup(["File and Directory Management"]) linux(("Linux")) -.-> linux/RemoteAccessandNetworkingGroup(["Remote Access and Networking"]) linux(("Linux")) -.-> linux/VersionControlandTextEditorsGroup(["Version Control and Text Editors"]) linux/BasicSystemCommandsGroup -.-> linux/echo("Text Display") linux/BasicFileOperationsGroup -.-> linux/cat("File Concatenating") linux/BasicFileOperationsGroup -.-> linux/chmod("Permission Modifying") linux/FileandDirectoryManagementGroup -.-> linux/cd("Directory Changing") linux/RemoteAccessandNetworkingGroup -.-> linux/ping("Network Testing") linux/VersionControlandTextEditorsGroup -.-> linux/nano("Simple Text Editing") subgraph Lab Skills linux/echo -.-> lab-271353{{"Тестирование сетей в Linux"}} linux/cat -.-> lab-271353{{"Тестирование сетей в Linux"}} linux/chmod -.-> lab-271353{{"Тестирование сетей в Linux"}} linux/cd -.-> lab-271353{{"Тестирование сетей в Linux"}} linux/ping -.-> lab-271353{{"Тестирование сетей в Linux"}} linux/nano -.-> lab-271353{{"Тестирование сетей в Linux"}} end

Использование команды ping для базового сетевого тестирования

На этом этапе мы научимся использовать команду ping для проверки соединения между вашим компьютером и другим хостом в сети. Команда ping отправляет запросы эхо на целевой адрес и ожидает ответы, что позволяет вам проверить, доступен ли хост.

Сначала откройте терминал и убедитесь, что вы находитесь в директории проекта:

cd ~/project

Создадим текстовый файл для хранения IP-адресов, которые мы хотим протестировать. Это поможет нам организовать нашу сетевое тестирование:

echo "8.8.8.8" > ~/project/ping_hosts.txt

Эта команда создает файл с именем ping_hosts.txt, содержащий IP-адрес 8.8.8.8, который является общедоступным DNS-сервером Google.

Теперь выполним наш первый тест с использованием команды ping:

ping -c 4 $(cat ~/project/ping_hosts.txt)

Вышеуказанная команда выполняет следующие действия:

  • ping: вызывает утилиту ping
  • -c 4: ограничивает количество отправляемых пакетов до 4 (по умолчанию ping работает до тех пор, пока вы не остановите его с помощью Ctrl+C)
  • $(cat ~/project/ping_hosts.txt): считывает IP-адрес из нашего файла

При выполнении этой команды вы должны увидеть вывод, похожий на следующий:

PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=116 time=14.5 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=116 time=13.9 ms
64 bytes from 8.8.8.8: icmp_seq=3 ttl=116 time=13.8 ms
64 bytes from 8.8.8.8: icmp_seq=4 ttl=116 time=13.7 ms

--- 8.8.8.8 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 13.676/13.963/14.513/0.329 ms

Этот вывод показывает, что:

  • Ваша система успешно отправила 4 пакета на целевой хост
  • Целевой хост ответил на все 4 пакета
  • Процент потерь пакетов составил 0%
  • Среднее время обратного пути (rtt) составило около 14 миллисекунд

Если вы попытаетесь выполнить ping для недоступного хоста, вы, возможно, увидите что-то вроде этого:

PING 192.168.1.100 (192.168.1.100) 56(84) bytes of data.

--- 192.168.1.100 ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 3062ms

Это означает, что от целевого хоста не было получено ни одного ответа, что может означать, что хост выключен, недоступен или блокирует запросы ICMP эхо.

Попробуем другой пример с другим IP-адресом. На этот раз мы используем общий адрес шлюза локальной сети:

ping -c 4 192.168.1.1

Ответ будет различаться в зависимости от вашей сетевой конфигурации. Если этот IP-адрес является вашим шлюзом, вы должны увидеть успешные ответы на ping с очень низкой задержкой (обычно менее 1 мс). В противном случае вы, возможно, увидите тайм-ауты или сообщения "Destination Host Unreachable".

Понимание и анализ вывода команды ping

Теперь, когда вы узнали, как использовать базовую команду ping, давайте рассмотрим, как более детально интерпретировать ее вывод. Понимание результатов команды ping является важной частью диагностики сетевых проблем.

Сначала добавим еще один хост в наш файл ping_hosts.txt:

echo "1.1.1.1" >> ~/project/ping_hosts.txt

Эта команда добавляет IP-адрес DNS-сервера Cloudflare в наш файл. Оператор >> добавляет содержимое в файл, а не перезаписывает его (что делает оператор >).

Проверим содержимое нашего файла:

cat ~/project/ping_hosts.txt

Вы должны увидеть:

8.8.8.8
1.1.1.1

Теперь выполним команду ping для второго адреса и проанализируем вывод:

ping -c 4 $(tail -n 1 ~/project/ping_hosts.txt)

Команда tail -n 1 извлекает последнюю строку из файла, которая представляет собой IP-адрес DNS-сервера Cloudflare.

Вы должны увидеть вывод, похожий на следующий:

PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.
64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
64 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=8.76 ms
64 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=8.92 ms
64 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.08 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms

Разберем этот вывод подробно:

  1. Заголовок: PING 1.1.1.1 (1.1.1.1) 56(84) bytes of data.

    • Здесь показан целевой IP-адрес и размер пакета ping (56 байт данных, 84 байта с учетом заголовков)
  2. Индивидуальные ответы на запросы эхо:

    • 64 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.32 ms
    • bytes from: Указывает размер ответа
    • icmp_seq: Порядковый номер пакета
    • ttl: Time To Live (Время жизни), значение, которое предотвращает бесконечное циклирование пакетов
    • time: Время обратного пути в миллисекундах
  3. Сводные статистики:

    • 4 packets transmitted, 4 received, 0% packet loss, time 3005ms
    • Здесь показано, сколько пакетов было отправлено, сколько было получено, процент потерь пакетов и общее время
    • rtt min/avg/max/mdev = 8.756/9.019/9.317/0.210 ms
    • Минимальное, среднее, максимальное и среднее отклонение времени обратного пути

Давайте используем дополнительные параметры команды ping, чтобы получить больше информации:

ping -c 4 -i 0.5 -s 100 1.1.1.1

Эта команда:

  • -c 4: Отправляет 4 пакета
  • -i 0.5: Устанавливает интервал между пакетами равным 0,5 секунды (по умолчанию 1 секунда)
  • -s 100: Изменяет размер пакета на 100 байт (по умолчанию 56 байт)

Вы должны увидеть вывод с большими размерами пакетов и более быстрыми интервалами:

PING 1.1.1.1 (1.1.1.1) 100(128) bytes of data.
108 bytes from 1.1.1.1: icmp_seq=1 ttl=57 time=9.33 ms
108 bytes from 1.1.1.1: icmp_seq=2 ttl=57 time=9.19 ms
108 bytes from 1.1.1.1: icmp_seq=3 ttl=57 time=9.11 ms
108 bytes from 1.1.1.1: icmp_seq=4 ttl=57 time=9.20 ms

--- 1.1.1.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 1503ms
rtt min/avg/max/mdev = 9.108/9.205/9.326/0.079 ms

При анализе результатов команды ping обратите внимание на следующие ключевые показатели:

  1. Потери пакетов: Любой процент выше 0% указывает на сетевые проблемы
  2. Задержка: Высокие значения времени (особенно выше 100 мс) могут указывать на сетевую задержку
  3. Несогласованность времени: Большие различия между минимальным и максимальным временем говорят о сетевой нестабильности

Например, высокие потери пакетов могут указывать на:

  • Сетевую задержку
  • Проблемы с оборудованием
  • Ограничения брандмауэра
  • Проблемы с маршрутизацией

Высокая задержка может указывать на:

  • Физическое расстояние до сервера
  • Сетевую задержку
  • Плохое качество соединения
  • Неэффективную маршрутизацию

Продвинутые параметры команды ping и практические применения

Теперь, когда вы понимаете основы работы команды ping и способ интерпретации ее вывода, давайте рассмотрим некоторые продвинутые параметры и практические сценарии, где ping полезен для сетевой диагностики.

Сначала создадим простой сценарий на языке shell, который поможет нам непрерывно отслеживать хост и записывать результаты в журнал:

nano ~/project/monitor_host.sh

Введите следующий сценарий в редактор:

#!/bin/bash

## Простой сценарий для сетевого мониторинга
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt

echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE

while true; do
  ping -c 1 $HOST | grep "time=" >> $LOG_FILE
  sleep $INTERVAL
  echo "---" >> $LOG_FILE
done

Сохраните файл, нажав Ctrl+O, затем Enter, и выйдите, нажав Ctrl+X.

Сделайте сценарий исполняемым:

chmod +x ~/project/monitor_host.sh

Теперь запустим сценарий на несколько секунд, чтобы отслеживать DNS - сервер Google:

~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!

Это позволит:

  1. Запустить сценарий мониторинга в фоновом режиме
  2. Подождать 10 секунд
  3. Остановить сценарий

Проверим журнал:

cat ~/project/ping_log.txt

Вы должны увидеть несколько результатов ping с временными метками.

Теперь рассмотрим некоторые более продвинутые параметры команды ping:

  1. Установка TTL (Time To Live - Время жизни):
ping -c 4 -t 64 8.8.8.8

Параметр -t устанавливает значение TTL, которое определяет, сколько сетевых прыжков (hops) может сделать пакет перед тем, как быть отброшенным.

  1. Flood ping (требует прав sudo):
sudo ping -c 10 -f 8.8.8.8

Параметр -f позволяет отправлять пакеты как можно быстрее. Это полезно для стресс - тестирования, но следует использовать с осторожностью.

  1. Звуковой сигнал при ответе хоста:
ping -c 4 -a 8.8.8.8

Параметр -a вызывает звуковой сигнал, когда хост отвечает. Это полезно при устранении неполадок, когда вы не следите за экраном.

  1. Установка времени выполнения:
ping -c 4 -w 2 8.8.8.8

Параметр -w устанавливает время (в секундах), по истечении которого команда ping остановится, независимо от количества отправленных пакетов.

Рассмотрим практический сценарий устранения неполадок. Создадим простую визуализацию сетевого пути до назначения с использованием команды traceroute (которая работает аналогично ping, но показывает маршрут, который следуют пакеты):

traceroute 8.8.8.8

Эта команда показывает каждый прыжок (маршрутизатор), через который проходят пакеты, чтобы достичь назначения. Вы увидите что - то вроде этого:

traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
 1  _gateway (10.0.2.2)  0.113 ms  0.087 ms  0.083 ms
 2  * * *
 3  * * *
 4  8.8.8.8  14.080 ms  13.849 ms  14.399 ms

Звездочки (*) обозначают тайм - ауты или маршрутизаторы, которые не отвечают на запросы traceroute.

Теперь создадим простую таблицу для документирования результатов ping для разных хостов:

echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt

Добавим DNS - сервер Google в нашу таблицу:

result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

И добавим DNS - сервер Cloudflare:

result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt

Посмотрим на нашу таблицу результатов:

cat ~/project/ping_results.txt

Вы должны увидеть отформатированную таблицу со статистикой ping для обоих DNS - серверов, которую можно использовать для сравнения их производительности.

Резюме

В этом практическом занятии вы узнали, как использовать команду ping для сетевого тестирования в Linux. Вы приобрели практический опыт в следующих аспектах:

  • Использовании базовой команды ping для проверки соединения с удаленным хостом
  • Интерпретации вывода команды ping для диагностики сетевых проблем
  • Использовании различных параметров команды ping для настройки сетевых тестов
  • Создании скриптов для мониторинга сетевого соединения
  • Анализе статистики ping для оценки сетевой производительности
  • Использовании связанных инструментов, таких как traceroute, для визуализации сетевых путей

Эти навыки являются важными для устранения сетевых неполадок и помогут вам диагностировать широкий спектр проблем с соединением, от простых сбоев до сложных проблем с производительностью.

По мере дальнейшей работы с системами Linux помните, что ping - это только один из многих доступных сетевых диагностических инструментов. Другие полезные инструменты включают traceroute, netstat, nmap, tcpdump и wireshark, которые вместе составляют комплексный набор инструментов для устранения сетевых неполадок.

Понимая, как эффективно тестировать сетевые соединения, вы теперь лучше подготовлены для поддержки и устранения неполадок в сетевых системах в различных средах.