Сетевые средства Linux

Базовая диагностика сетевых подключений

Показывать лекцию целиком

Содержание:

Основы протокола ICMP

  • Проверка доступности удаленной системы с помощью команды ping
  • Трассировка маршрута с помощью команды traceroute
  • Статистика интерфейсов с помощью команды netstat.
  • Основы протокола ICMP

    Протокол ICMP (Internet Control Message Protocol) используется для диагностики сетевых подключений, а также для передачи удаленным системам сообщений об исключительных ситуациях, возникающих в процессе работы стека TCP/IP. ICMP работает на сетевом уровне модели сетевого взаимодействия; при этом ICMP инкапсулирует свои сообщения в IP-пакеты; реализация ICMP является обязательной для стека TCP/IP. ICMP-сообщение состоит из заголовка (содержит идентификаторы типа и кода сообщения, а также контрольную сумму) и поля данных, содержимое которого зависит от назначения сообщения .

    Условно : сообщения об ошибках и информационные сообщения. Первая группа включает такие типы сообщений как: направление недоступно ( Destination Unreachable ); подавление источника ( Source Quench ); истечение времени ( Time Exceeded ); проблема параметров ( Parameter Problem ) и т.д. Примером сообщений второй группы являются сообщения перенаправление ( Redirect ); эхо-запроса ( Echo ) и эхо-ответа ( Echo Reply ). Всего известно около 40 типов ICMP -сообщений.

    Большинство типов сообщений содержат наборы уточняющих кодов, конкретизирующих проблему. Так сообщение "Направление недоступно" информирует о недоступности удаленного узла по той или иной причине: недоступность узла, протокола или порта; большой размер пакета по сравнению с MTU передающей среды при невозможности фрагментации пакетов; отсутствие у промежуточного шлюза маршрутов к удаленному узлу или сети; активные фильтры пакетов на шлюзе и т.д.

    Пусть на узле A установлен IP-адрес из сети 192.168.1.0/24 и шлюз по умолчанию 192.168.1.1. Если, например шлюз "не знает" маршрута до сети 192.168.2.0/24, то при попытке взаимодействия узла А с узлом 192.168.2.10 (например, с помощью утилиты ping ), узел А будет получать от шлюза ICMP -сообщения о недоступности сети назначения ( Destination Net Unreachable ).

    # ping 192.168.2.10
    PING 192.168.2.10 (192.168.2.10) 56(84) bytes of data.
    From 192.168.1.1 icmp_seq=1 Destination Net Unreachable
    From 192.168.1.1 icmp_seq=2 Destination Net Unreachable
    ^C
    --- 192.168.2.10 ping statistics ---
    2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 1023ms

    В данном примере один из шлюзов фильтрует доступ к сети Интернет и отправляет соответствующие ICMP-сообщения узлу локальной сети.

    $ ping www.yandex.ru
    PING www.yandex.ru (213.180.204.3) 56(84) bytes of data.
    From 10.31.46.1 icmp_seq=1 Packet filtered
    From 10.31.46.1 icmp_seq=2 Packet filtered
    ^C
    --- www.yandex.ru ping statistics ---
    2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 10074ms
    Примечание. Функциональность ICMP на данном узле является настраиваемой. Например, настройки маршрутизатора позволяют указать какое ICMP -сообщение отправлять на данную ошибку протокола IP, и отправлять ли вообще какие-либо сообщения.

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

    Самый простой способ тестирования связи между двумя системами заключается в проверке возможности отправки системами сообщений друг другу. Для этого первый узел отправляет второму узлу тестовое сообщение, получив которое второй узел должен отправить ответное сообщение. В протоколе ICMP для отправки тестового сообщения используется сообщение типа эхо-запрос ( Echo ), для отправки ответа на тестовое сообщение — эхо-ответ ( Echo Reply ). Функция ответа на эхо-запросы интегрирована в сетевой стек операционной системы и в большинстве случаев включена по умолчанию. Для реализации данного типа проверки используется утилита ping, которая в Debian устанавливается по умолчанию (пример 6.3.). Основным параметром ping является доменное имя удаленной системы или ее IP-адрес.

    $ ping www.yandex.ru
    PING www.yandex.ru (87.250.250.3) 56(84) bytes of data.
    64 bytes from www.yandex.ru (87.250.250.3): icmp_req=1 ttl=52 time=42.8 ms
    64 bytes from www.yandex.ru (87.250.250.3): icmp_req=2 ttl=52 time=42.5 ms
    64 bytes from www.yandex.ru (87.250.250.3): icmp_req=3 ttl=52 time=50.0 ms
    ^C
    --- www.yandex.ru ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2002ms
    rtt min/avg/max/mdev = 42.514/45.124/50.044/3.481 ms

    В Linux команда ping по умолчанию отправляет эхо-запросы до тех пор, пока пользователь не прервет ее работу, например комбинацией клавиш Ctrl+C (можно использовать параметр с указанием количества отправляемых запросов, например: ping -c 3 www.yandex.ru - будут отправлены 3 запроса). Если ответ на запрос получен, то на экран выводится информация о размере эхо-ответа (в данном случает 64 байт), доменное имя узла и(или) IP-адрес, порядковый номер запроса, параметры TTL и RTT (см. ниже). При завершении своей работы команда ping выводит статистику: количество отправленных ( transmitted ) и полученных ( received ) пакетов, процент потерь ( packet loss ), а также статистику RTT.

    Параметр TTL (Time-To-Live) определяет время "жизни" пакета и на узле-источнике устанавливается в целое число (максимальное количество маршрутизаторов, которое может быть пройдено пакетом - скачков). При каждом скачке значение TTL уменьшается на единицу. Когда значение становится равным нулю, пакет уничтожается. Данный подход позволяет избежать петель маршрутизации (бесконечного перемещения пакета между двумя узлами маршрутизации), возникающих, например, при ошибках конфигурации.

    Примечание. Различные системы первоначальное значение TTL устанавливают в различные значения (255 – сетевое оборудование Cisco, 128 – Windows, Unix-системы — 64, некоторое сетевое оборудование — 30), благодаря чему в некоторых случаях в первом приближении можно определить тип удаленной системы.

    Параметр RTT (Round Trip Time) — время между отправкой запроса и получением ответа на данный запрос.

    Информация, предоставляемая командой ping, позволяет сделать определенные выводы о качестве канала связи между двумя узлами. Например, высокий процент потерь пакетов или меняющееся в больших пределах значение RTT являются указанием на наличи проблем со связью. В тоже время на основе хороших показателей потерь пакетов и RTT не всегда можно сделать заключение о пригодности канала связи для использования данным транспортным или прикладным протоколом, т. к. они могут предъявлять более высокие требования к качеству канала связи. Сравните, например, значение параметр RTT для коротких пакетов и пакетов, размер которых близок к максимальному возможному (пример 6.4.) в сегменте сети Ethernet.

    # ping -s 1400 -c 3 10.31.16.103
    PING 10.31.16.103 (10.31.16.103) 1400(1428) bytes of data.
    1408 bytes from 10.31.16.103: icmp_seq=1 ttl=64 time=2.17 ms
    1408 bytes from 10.31.16.103: icmp_seq=2 ttl=64 time=1.90 ms
    1408 bytes from 10.31.16.103: icmp_seq=3 ttl=64 time=1.26 ms
    --- 10.31.16.103 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 1.260/1.779/2.171/0.384 ms

    Для сравнения ping в тех же условиях с малым размером сообщения:

    # ping -c 3 10.31.16.103
    PING 10.31.16.103 (10.31.16.103) 56(84) bytes of data.
    64 bytes from 10.31.16.103: icmp_seq=1 ttl=64 time=0.328 ms
    64 bytes from 10.31.16.103: icmp_seq=2 ttl=64 time=0.231 ms
    64 bytes from 10.31.16.103: icmp_seq=3 ttl=64 time=0.583 ms
    --- 10.31.16.103 ping statistics ---
    3 packets transmitted, 3 received, 0% packet loss, time 2000ms
    rtt min/avg/max/mdev = 0.231/0.380/0.583/0.150 ms

    Выбор исходного IP-адреса для отправки пакетов в системах с несколькими IP-адресами зависит от настроек таблиц маршрутизации и особенностей операционной системы. Для явного указания исходного IP-адреса в команде ping следует использовать ключ -I с указанием IP-адреса (в данном случае 192.168.1.11):

    # ping -c 1 -I 192.168.1.11 192.168.1.1
    PING 192.168.1.1 (192.168.1.1) from 192.168.1.11 : 56(84) bytes of data.
    64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=3.09 ms
    --- 192.168.1.1 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 3.091/3.091/3.091/0.000 ms

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

    Трассировка маршрута с помощью команды traceroute

    Для отображения всех точек маршрутизации, через которые проходят сетевые пакеты на пути следования к узлу назначения, используется команда traceroute (аналог в Windows - tracert ). В случае проблем при доставке данных программа позволяет определить, на каком именно участке сети возникли неполадки. Для определения промежуточных маршрутизаторов traceroute отправляет серию (обычно три) пакетов узлу назначения, при этом каждый раз увеличивая на 1 значение поля TTL. Первая серия пакетов отправляется с TTL, равным 1, и поэтому первый маршрутизатор возвращает обратно сообщение ICMP, указывающее на невозможность доставки данных. Затем traceroute повторяет отправку серии пакетов, но уже с TTL, равным 2, что позволяет первому маршрутизатору пропустить их дальше. Процесс повторяется до тех пор, пока при определённом значении TTL пакет не достигнет узла назначения.

    Для установки traceroute в Debian GNU\Linux следует использовать команду:

    # apt-get install traceroute

    Основным параметром команды traceroute является имя или IP-адрес удаленного узла (пример 2.1., ). Вывод команды traceroute содержит информацию о точках маршрутизации (IP-адрес и/или символьное имя) и параметр RTT для каждой попытки серии. Ключ -n запрещает обращения к подсистеме DNS для определения символьных имен маршрутизаторов, что ускоряет работу traceroute.

    Используя ключ -s, можно указать traceroute, какой исходный IP-адрес использовать (в данном случае 192.168.1.11):

    # traceroute -s 192.168.1.11 192.168.2.5

    Статистика интерфейсов с помощью команды netstat

    Утилита netstat является удобным средством мониторинга сетевой активности. Фактически данная утилита служит для отображения различных структур данных, связанных с сетью.

    Для отображения статистики сетевых интерфейсов следует использовать netstat с ключом -i (пример 6.6.). Все сетевые интерфейсы отображаются с помощью ключа -a.

    # netstat -ai
    Kernel Interface table
    Iface   MTU Met   RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
    eth0       1500 0      2012      0      0 0           244       0      0      0 BMRU
    eth1       1500 0      1341      0      0 0          1118      0      0      0 BMRU
    lo         16436 0         0         0      0 0             0         0      0      0 LRU

    Каждая строка содержит информацию об отдельном интерфейсе: имя, MTU, метрику интерфейса (см. ниже); колонки RX и TX показывают количество пакетов, которые были получены и отправлены без ошибок ( RX-OK, TX-OK ), с ошибками ( RX-ERR, TX-ERR ), были отброшены ( RX-DRP, TX-DRP ), были потеряны ( RX-OVR, TX-OVR ). Набор символов в конце строки — флаги состояния интерфейса в стиле ifconfig (В — установлен широковещательный адрес, L — локальный интерфейс, M - "беспорядочный режим", R — интерфейс запущен, U — интерфейс поднят и т.д.)

    Ключевые термины

    ICMP (Internet Control Message Protocol) — сетевой протокол управляющих сообщений, используемый для диагностики стека TCP/IP.

    TTL (Time-To-Live) — целое число, определяющее количество промежуточных маршрутизаторов, пройденных сетевым пакетом; на узле-источнике устанавливается в максимальное значение; каждый маршрутизатор отнимает от текущего значения TTL единицу.

    RTT (Round Trip Time) — время между отправкой запроса и получением ответа на данный запрос.

    Ping — утилита, обычно входящая в набор программного обеспечения операционной системы и позволяющая проверить доступность удаленного узла средствами протокола ICMP

    Traceroute — утилита, позволяющая отобразить все промежуточные узлы на пути следования пакета до узла назначения; использует протокол ICMP.

    Netstat - утилита, используемая для мониторинга сетевой активности.

    Краткие итоги

    Протокол ICMP (протокол сетевого уровня; использует для доставки протокол IP) предоставляет простые средства для передачи удаленным системам сообщений об исключительных ситуациях в процессе функционирования сетевого стека на узле.

    Простейшим приложением протокола ICMP является утилита ping. Указав ей имя или IP-адрес удаленного узла, можно проверить его доступность.

    Для трассировки маршрута (отображения всех точек маршрутизации) до удаленной системы используется ICMP -приложение traceroute.

    Утилита netstat с ключом -i отображает статистику работы сетевых интерфейсов. Подобную статистику также содержит вывод команды ifconfig.

    Упражнения

    1.Изучите вывод команды ping в предложенных вариантах и определите для каждой удаленной системы ее тип (тип операционной системы):

    ping -c 1 192.168.1.115
    PING 192.168.1.115 (192.168.1.115) 56(84) bytes of data.
    64 bytes from 192.168.1.115: icmp_req=1 ttl=128 time=6.66 ms
    --- 192.168.1.115 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 6.664/6.664/6.664/0.000 ms
    $ ping -c 1 192.168.1.103
    PING 192.168.1.103 (192.168.1.103) 56(84) bytes of data.
    64 bytes from 192.168.1.103: icmp_req=1 ttl=64 time=5.35 ms
    --- 192.168.1.103 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 5.355/5.355/5.355/0.000 ms
    $ ping -c 1 192.168.3.3
    PING 192.168.3.3 (192.168.3.3) 56(84) bytes of data.
    64 bytes from 192.168.3.3: icmp_req=1 ttl=253 time=1.98 ms
    --- 192.168.3.3 ping statistics ---
    1 packets transmitted, 1 received, 0% packet loss, time 0ms
    rtt min/avg/max/mdev = 1.985/1.985/1.985/0.000 ms

    2.(требуется подключение к Интернет). В среде ) и настройте сетевой интерфейс локальной сети с помощью файла /etc/network/interfaces на получение IP-адреса по протоколу DHCP.

    2.1.Проверьте доступность узлов http://www.mail.ru, http://www.debian.org, http://www.freshmeat.net

    2.2.Отобразите трассу до узла http://www.ubuntu.com

    2.3.Отобразите статистику работы сетевых интерфейсов виртуальной машины.

    3(требуется подключение к Интернет и наличие ОС Windows). Выполните задания 2.1.-2.3. с использованием соответствующих аналогов ping, tracert и netstat в Windows.

    Вернуться к учебному плану