Linux ошибки на интерфейсе

Обновлено: 04.07.2024

Если вы не подняли (активировали) интерфейс в процессе графического конфигурирования, сделайте это сейчас. Перейдите на текстовую консоль или откройте окно терминала и выполните команду ifup eth0 (деактивировать интерфейс можно командой ifdown eth0).

Для получения сведений об активных интерфейсах выполните команду ifconfig. Она покажет примерно следующее:

eth0 Link encap:Ethernet HWaddr 00:02:F0:73:B0:85

inet addr:192.168.1.11 Beast:192.168.1.255

UP BROADCAST MULTICAST MTU:1500 Metric:1

lo Link encap:Local Loopback

inet addr:127.0.0.1 Mask:255.0.0.0

UP LOOPBACK RUNNING MTU:16436 Metric:1

Интерфейс lo, которого вы не настраивали, — это интерфейс обратной петли. Не отключайте его, он необходим для работы некоторых приложений.

В первых двух строчках утилита ifconfig выводит тип (Ethernet) адаптера, его физический адрес (MAC-адрес) и присвоенный ему IP-адрес. Дальше — параметры интерфейса, указывающие, что он запушен и используется.

MTU (Maximum Transfer Unit) — максимальный размер единицы передачи данных. Практически все протоколы позволяют использовать в кадре поля переменной длины, это касается даже заголовка кадра. Максимально допустимое значение длины поля — это как раз и есть MTU.

Далее следует статистика — сколько пакетов принято/передано, сколько байтов принято/передано, сколько коллизий было с участием этого интерфейса.

Теперь проверим, как работает соединение. Это делают командой ping (пингуют нужный адрес).

Эта команда посылает на указанный адрес по протоколу ICMP маленький пакет, требующий эхо-ответа, раз за разом, пока не будет остановлена (например, нажатием комбинации клавиш Ctrl+). Обычно ею пользуются для проверки доступности узлов.

Потом пропингуйте свою машину по имени, которое вы ей дали: ping dhsilabs.

Убедившись, что проблем с локальными настройками не возникает, можно пропинговать какую-нибудь удаленную машину из вашей локальной сети по ее IP-адресу.

Теперь попробуйте обратиться к удаленной машине по имени. Помните, что символьное имя должно быть разрешено в IP-адрес? В вашей небольшой сети сервера имен, скорее всего, нет. В этом случае для преобразования IP-адресов в имена и обратно служит файл /etc/hosts. Это обычный текстовый файл, каждая строка которого содержит

<IP-адрес> <полное_имя_узла> <псевдонимы>

Данный текст является ознакомительным фрагментом.

Продолжение на ЛитРес

Проверка работы

1.8. История сетевого обеспечения BSD

1.8. История сетевого обеспечения BSD API сокетов происходит от системы 4.2BSD (Berkeley Software Distribution — программное изделие Калифорнийского университета, в данном случае — адаптированная для Интернета реализация операционной системы Unix, разрабатываемая и распространяемая этим

4.13.2. Обход сетевого экрана

4.13.2. Обход сетевого экрана Сетевой экран не может обеспечить абсолютной безопасности, потому что алгоритм его работы несовершенен. В нашем мире нет ничего безупречного, стопроцентно надежного, иначе жизнь была бы скучной и неинтересной.Как Firewall защищает ваш компьютер

Настройка сетевого обнаружения

Настройка сетевого обнаружения Хотя подсоединение к сети уже настроено, вы все равно не сможете видеть компьютеры в сети. Чтобы это стало возможным, необходимо дополнительно настроить сетевое окружение.Нужно вернуться к диалоговому окну управления сетями и общим

13.2.5. Тестирование сетевого соединения

13.2.5. Тестирование сетевого соединения Чтобы проверить, соединяется ли ваш компьютер с сетью, попробуйте дать команду ping, указав ей в качестве параметра IP-адрес одного из компьютеров сети. Пусть, например, вам известно (узнайте реальный номер и имя у администратора сети),

4.26 Совместное использование сетевого интерфейса

4.26 Совместное использование сетевого интерфейса Как уже отмечалось, несложно найти локальные и региональные сети, использующие одновременно несколько протоколов. На практике один сетевой узел иногда посылает и принимает данные по нескольким протоколам через единый

27.1.1.1. Уровень сетевого интерфейса

27.1.1.1. Уровень сетевого интерфейса Этот уровень лежит в основании всей модели протоколов семейства TCP/IP. Уровень сетевого интерфейса отвечает за отправку в сеть и прием из сети кадров, которые содержат информацию. Кадр (frame) — это единица данных, которыми обмениваются

Выбор сетевого размещения

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

Оптимизация сетевого трафика

Оптимизация сетевого трафика Как правило, сервер СУБД устанавливается не на одном компьютере вместе с клиентом, а используется через локальную сеть. При этом на времени отклика сервера сказываются задержки при передаче данных по сети, независимо от того, насколько

Настройки параметров работы сетевого экрана

Настройки параметров работы сетевого экрана Для активизации сетевого экрана достаточно нажать ссылку Включить на соответствующей вкладке. Окно настройки параметров можно вызвать нажатием кнопки Настройка внизу окна и выбором соответствующего пункта или из

Учет сетевого трафика

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

Настройка сетевого соединения

Настройка сетевого соединения Итак, у вас есть ноутбук, к которому просто подключен кабель локальной сети. Если в сети присутствует специальный компьютер с настроенными на нем DHCP[3]-сервером, то вам не придется специально устанавливать какие-либо параметры, поэтому

Настройка сетевого обнаружения

Настройка сетевого обнаружения Подсоединение к сети настроено, однако вы не можете видеть компьютеры в сети без дополнительной настройки сетевого окружения.Для этого вернитесь к окну управления сетями и общим доступом (см. рис. 14.7) и нажмите кнопку со стрелкой напротив

Настройка сетевого соединения

Настройка сетевого соединения Итак, у вас есть ноутбук, к которому подключен кабель локальной сети, и пока не произведены настройки. Следует отметить, что если в сети присутствует специальный компьютер с настроенным DHCP-сервером[43], то тогда вам вряд ли придется что-либо


Часто мониторинг сетевой подсистемы операционной системы заканчивается на счетчиках пакетов, октетов и ошибок сетевых интерфейсах. Но это только 2й уровень модели OSI!
С одной стороны большинство проблем с сетью возникают как раз на физическом и канальном уровнях, но с другой стороны приложения, работающие с сетью оперируют на уровне TCP сессий и не видят, что происходит на более низких уровнях.

Я расскажу, как достаточно простые метрики TCP/IP стека могут помочь разобраться с различными проблемами в распределенных системах.

Netlink

Почти все знают утилиту netstat в linux, она может показать все текущие TCP соединения и дополнительную информацию по ним. Но при большом количестве соединений netstat может работать достаточно долго и существенно нагрузить систему.

Есть более дешевый способ получить информацию о соединениях — утилита ss из проекта iproute2.

Ускорение достигается за счет использования протола netlink для запросов информации о соединениях у ядра. Наш агент использует netlink напрямую.

Считаем соединения

Disclaimer: для иллюстрации работы с метриками в разных срезах я буду показывать наш интерфейс (dsl) работы с метриками, но это можно сделать и на opensource хранилищах.

В первую очередь мы разделяем все соединения на входящие (inbound) и исходящие (outbound) по отношению к серверу.

Каждое TCP соединения в определенный момент времени находится в одном из состояний, разбивку по которым мы тоже сохраняем (это иногда может оказаться полезным):





По этому графику можно оценить общее количество входящих соединений, распределение соединений по состояниям.

Здесь так же видно резкое падение общего количества соединений незадолго до 11 Jun, попробуем посмотреть на соединения в разрезе listen портов:





На этом графике видно, что самое значительное падение было на порту 8014, посмотрим только 8014 (у нас в интерфейсе можно просто нажать на нужном элементе легенды):





Попробуем посмотреть, изменилось ли количество входящий соединений по всем серверам?

Выбираем серверы по маске “srv10*”:




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




Мы ограничили выборку только портом 8014 и сделали группировку не по порту, а по серверам.

Теперь понятно, что соединения с сервера srv101 перешли на srv102.

Разбивка по IP

Часто бывает необходимо посмотреть, сколько было соединений с различных IP адресов. Наш агент снимает количество TCP соединений не только с разбивкой по listen портам и состояниям, но и по удаленному IP, если данный IP находится в том же сегменте сети (для всех остальный адресов метрики суммируются и вместо IP мы показываем “

Рассмотрим тот же период времени, что и в предыдущих случаях:




Здесь видно, что соединений с 192.168.100.1 стало сильно меньше и в это же время появились соединения с 192.168.100.2.

Детализация рулит

На самом деле мы работали с одной метрикой, просто она была сильно детализирована, индентификатор каждого экземпляра выглядит примерно так:

Например, у одно из клиентов на нагруженном сервере-фронтенде снимается

700 экземпляров этой метрики

TCP backlog

По метрикам TCP соединений можно не только диагностировать работу сети, но и определять проблемы в работе сервисов.

Например, если какой-то сервис, обслуживающий клиентов по сети, не справляется с нагрузкой и перестает обрабатывать новые соединения, они ставятся в очередь (backlog).

На самом деле очереди две:

  • SYN queue — очередь неустановленных соединений (получен пакет SYN, SYN-ACK еще не отправлен), размер ограничен согласно sysctl net.ipv4.tcp_max_syn_backlog;
  • Accept queue — очередь соединений, для которых получен пакет ACK (в рамках "тройного рукопожатия"), но не был выполнен accept приложением (очередь ограничивается приложением)

При достижении лимита accept queue ACK пакет удаленного хоста просто отбрасывается или отправляется RST (в зависимости от значения переменной sysctl net.ipv4.tcp_abort_on_overflow).

Наш агент снимает текущее и максимальное значение accept queue для всех listen сокетов на сервере.

Для этих метрик есть график и преднастроенный триггер, который уведомит, если backlog любого сервиса использован более чем на 90%:




Счетчики и ошибки протоколов

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

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

Попробуем что-то понять про эти выбросы входящего трафика:








Теперь мы видим, что это входящий UDP трафик, но здесь не видно первых из трех выбросов.
Дело в том, что счетчики пакетов по протоколам в linux увеличиваются только в случае успешной обработки пакета.

Попробуем посмотреть на ошибки:




А вот и наш первый пик — ошибки UDP:NoPorts (количество датаграмм, пришедших на UPD порты, которые никто не слушает)

Данный пример мы эмулировали с помощью iperf, и в первый заход не включили на сервер-приемщик пакетов на нужном порту.

TCP ретрансмиты

Отдельно мы показываем количество TCP ретрансмитов (повторных отправок TCP сегментов).

Само по себе наличие ретрансмитов не означает, что в вашей сети есть потери пакетов.
Повторная передача сегмента осуществляется, если передающий узел не получил от принимающего подтверждение (ACK) в течении определенного времени (RTO).

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

На практике количество ретрансмитов обычно коррелирует с нагрузкой на серверы и важно смотреть не на абсолютное значение, а на различные аномалии:





На данном графике мы видим 2 выброса ретрансмитов, в это же время процессы postgres утилизировали CPU данного сервера:




Cчетчики протоколов мы получаем из /proc/net/snmp.

Conntrack

Еще одна распространенная проблема — переполнение таблицы ip_conntrack в linux (используется iptables), в этом случае linux начинает просто отбрасывать пакеты.

Агент автоматически снимает текущий размер данной таблицы и лимит с серверов, использующих ip_conntrack.

В окметре так же есть автоматический триггер, который уведомит, если таблица ip_conntrack заполнена более чем на 90%:




На данном графике видно, что таблица переполнялась, лимит подняли и больше он не достигался.

Вместо заключения

  • детализация метрик очень важна
  • если где-то что-то может переполниться, нужно обязательно покрывать мониторингом такие места
  • мы снимаем еще много разного по TCP/IP (RTT, соединения с непустыми send/recv очередями), но пока не придумали, как c этим правильно работать

Примеры наших стандартных графиков можно посмотреть в нашем демо-проекте.
Там же можно постмотреть графики Netstat.

Бывают случаи, когда пропадает линк к серверу, который напрямую подключен к вашей локальной сети. Просмотр ARP-таблицы с другого устройства в этой сети (другого вашего сервера) поможет определить отвечает ли удалённый сервер хоть на какие-то запросы с вашего сервера. В случае проблем на этом уровне может означать следующее:

  1. удалённый сервер отключен от сети вообще;
  2. проблемы с кабелями;
  3. сетевой интерфейс на удалённом серве может быть отключен;
  4. на удалённом сервер работает фильтрация firewall-ом; как правило, в таком случае, вы можете увидеть его MAC-адрес, но нормального обмена данными не происходит.

Примеры того, как можно получить данные ARP-таблицы.

Проверка сайтов с помощью curl

curl работает как текстовый браузер, и позволяет получать всю страницу целиком или только заголовки от веб-сервера:

Проверка сети с помощью netstat

Как и вышеупомянутые утилиты, netstat может помочь в определении источника проблем в сети. С помощью опций -an можно отобразить все открытые порты и активные соединения:

Использование traceroute для проверки сети

Как работает traceroute?

Некоторые узлы отбрасывают пакеты от traceroute . В таком случае, с помощью опции -I можно использовать протокол ICMP:

Утилита MTR

Просмотр трафика с помощью tcpdump

  • неправильного роутинга пакетов;
  • проблем с интерфейсами, устройствами;
  • удалённый сервер не прослушивает указанынй порт (не запущен соответствующий сервис);
  • сетевое устройство на пути следования пакета блокирует передачу пакетов (файерволы, ACL и т.п.).

Поиск проблем в сети с помощью tshark

Опции и вид выдаваемой tshark информации очень схож с tcpdump , однако tshark имеет больше возможностей.

Например, tshark умеет записывать данные в файл, как и tcpdump , но при этом он умеет создавать новый файл для записи, когда предыдущий достигнет заданного размера. Кроме того, ему можно указать количество создаваемых файлов, после достиджения которого он начнёт перезаписывать первый созданный файл.

Использование утилиты nmap

Схема сети: локальные роутеры занимаются шейпингом клиентов(ipfw + pipe + tablearg) , потом траф идет на сервер NAT(pf nat), с него патч идет непосредственно в сервер BGP(quagga + ipfw), а дальше в инет.

Сервера: На ОС FreeBSD 7.0 (в ядре вырублены левые дрова и вшит фаервол).
Сетевые Intel 1000MT Desctop.
Проц Intel(R) Core(TM)2 Duo CPU E4600 @ 2.40GHz. ОЗУ -2G

Трафик не такой больой , железо должно нормально справляться.
CPU загружается в пике не более чем по 60% оба ядра (распаралеливание происходит нормально)
Для сетевых , это тоже вроде не предел. (250Mb/s, 30-35k pps, порядка 80k сессий )
В pf на нат отрублен scrub.

Почему берутся эти ошибки?
Чем отличается Error и Discards? В каких случаях возникают ошибки in и out (особенно связка маскарад(нат) net0 и Mart (bgp) net1, которые соединены напрямую патчем. )
Где может быть узкое место?
Куда еще можно покопать ??

Завышения пингов начинаются на сервере NAT. net0 - в сторону инета , net1 - в сторону локальной сети
сыпятся ошибки

Вложения Трафик на внутренней сетевой маскарада (внешняя загрузка симетрична) Один из вланов на внешку Роутер БГП внутренняя сетевая Нат на сетевая в локальную сеть Нат в сторону внешки А почему взяли Intel Desktop? есть же спец с тегом Server
у меня похожая схема, только без BGP вначале. polling включен ? "Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих файлов вообще нет!" (c)
"Я ем руками, она вилкой и ножом, я бью вилкой и ножом, она руками" (с)

Intel Desktop взял шеф (не знаю из каких соображений). После НГ Обещал поменять на серверные. Жду.
Как достоверно убедиться, что узкое место именно сетевые?

Pooling не включен (только ухудшает картину, пробовал HZ=1000 и HZ=2000)

Похоже роутер упирается в полку по pps.
Что можно посмотреть, покрутить на эту тему?
При достижении порога в 33-35 тыс pps начинают вылетать ошибки на интерфейсе.
Чем выше загррузка, тем больше ошибок. Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

2terminus
Спасибо.

Погуглил основательно.
Результат: в моем случае очень похоже , что уперлись либо в шину PCI либо в сетевую (Desctop на серверах стоять не должен, даже если он и Intel. ).
насчет PCI часто встречал примерно следующий расчет (в моем случае он похоже верен. )
PCI может теоретическт пропустить 1Gbit, на практике меньше 20-30% + накладные расходы на fullduplex (pci однонаправленная шина, поэтому ей нужно время на переключение.). Многие пришли к порогу в 600Мб/с суммарного потока. У меня получилось суммарно

В сегодняшней статье мы поговорим про настройку сетевого интерфейса с помощью утилиты ethtool. С помощью неё вы можете менять такие низкоуровневые настройки сетевой карты, как скорость передачи данных и метод выбора скорости при подключении, смотреть статистику и используемый драйвер, управлять светодиодом на карте, а также многое другое.

Мы разберемся как установить утилиту в популярных дистрибутивах, как её использовать и какие опции она поддерживает, а потом рассмотрим примеры работы.

Настройка сетевого интерфейса Linux

1. Синтаксис и опции ethtool

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

$ ethtool опции интерфейс параметры

Вот основные опции утилиты, которые мы будем использовать в этой статье:

  • --version - выводит версию утилиты;
  • -g, --show-ring - позволяет посмотреть информацию о буфере RX и TX пакетов;
  • -G, --set-ring - позволяет установить размер буфера RX и TX пакетов, работает только для беспроводного интерфейса;
  • -i, --driver - выводит имя используемого драйвера;
  • -P, --show-permaddr - выводит постоянный MAC адрес устройства;
  • -r, --negotiate - выполняет повторное согласование скорости передачи данных, если включено автоматическое согласование;
  • -S, --statistics - выводит статистику;
  • -s, --change - позволяет менять настройки сетевого интерфейса;
  • -k, --show-offload - позволяет посмотреть какие технологии offload включены;
  • --reset - позволяет сбросить настройки различных компонентов сетевой карты, для сброса всех настроек используйте значение параметра all;

Это далеко не все опции программы, все вы можете посмотреть выполнив такую команду в терминале, если программа установлена:

2. Установка ethtool

Обычно, утилита не поставляется по умолчанию вместе с дистрибутивом, но она есть в официальных репозиториях. Для установки утилиты в Ubuntu или Debian выполните:

sudo apt install ethtool

Для установки ethtool linux в Fedora, CentOS или REHL выполните:

sudo yum install ethtool

А для OpenSUSE команда будет выглядеть вот так:

sudo zypper install ethtool

3. Информация про сетевые интерфейсы

Сначала надо посмотреть список сетевых интерфейсов в системе. Для этого выполните такую команду:


В данном примере, я использовал фильтр egrep чтобы отсеять все интерфейсы, созданные контейнерами Docker, вам этого делать не обязательно. Здесь enp24s0 - это сетевой интерфейс Ethernet, который мы и будем использовать дальше. Выполнив утилиту ethtool без опций можно посмотреть текущие настройки сетевого интерфейса:

sudo ethtool enp24s0


Обратите внимание на пункт Supported link modes, здесь перечислены поддерживаемые скорости передачи данных и режимы дуплекса для них. Скорость измеряется в мегабитах и обычно доступны значения 10, 100 и 1000.

Режим дуплекса, выводимый в параметре Duplex отвечает за приём и передачу данных. При значении full сетевая карта может одновременно принимать и отправлять данные, а режиме half только принимать или отправлять данные. Текущая скорость передачи данных выводится немного ниже параметра Duplex.

Ещё есть параметр Advertised auto negotiation. Он отвечает за то будет ли скорость передачи данных и режим дуплекса настраиваться автоматически в зависимости от возможностей обоих соединённых устройств. По умолчанию этот параметр включён и рекомендуется его таким и оставить.

4. Изменение настроек интерфейса

Менять все эти настройки и многие другие можно с помощью опции -s. Например чтобы отключить автоматическое согласование параметров работы выполните:

sudo ethtool -s enp24s0 autoneg off

Затем можно вручную установить скорость передачи данных:

sudo ethtool -s enp24s0 speed 10

А режим дуплекса в half:

sudo ethtool -s enp24s0 duplex half

Всё это можно объединить в одну команду:

sudo ethtool -s enp24s0 speed 10 duplex half autoneg off

После изменения скорости передачи данных надо снова поднять сетевой интерфейс:

sudo ip link set dev enp24s0 up

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


5. Просмотр драйвера

Чтобы посмотреть используемый драйвер используйте опцию -i:

sudo ethtool -i enp24s0


6. Статистика интерфейса

Посмотреть статистику по переданных и полученных данных можно с помощью опции -S:

sudo ethtool -S enp24s0


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

sudo ip link set dev enp24s0 down

Затем выгрузите модуль ядра с драйвером:

sudo modprobe -r r8169

Верните драйвер обратно и запустите устройство:

sudo modprobe r8169

sudo ip link set dev enp24s0 up

После этого статистика будет сброшена:



7. Управление светодиодом

Если в вашем компьютере установлено несколько сетевых карт и вам надо определить какой их них принадлежит то или иное имя в системе, можно использовать опцию -p. Ей надо передать количество секунд на протяжении которых светодиод на разъёме должен гореть:

sudo ethtool enp24s0 -p 100

Таким образом вы можете подсветить интерфейс ethtool.

8. Сохранение настроек

Все выполненные с помощью ethtool настройки актуальны только до перезагрузки. Чтобы их сохранить после перезагрузки надо создать скрипт, выполняющий нужные команды после старта системы или же использовать возможности network-scripts. Например в Ubuntu или Debian можно добавить команду, которая выполняет нужные настройки в файл /etc/network/if-pre-up.d/ethtool. Например:

sudo vi /etc/network/if-pre-up.d/ethtool

/sbin/ethtool -s enp24s0 speed 10 duplex half

Для CentOS следует добавить параметр ETHTOOL_OPTS в файл настройки сетевого интерфейса, Например:

sudo vi /etc/sysconfig/network-scripts/ifcfg-enp24s0

ETHTOOL_OPTS="speed 10 duplex half autoneg off"

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка сетевого интерфейса Linux с помощью утилиты ethtool. Если вы знаете другие полезные способы настройки, пишите в комментариях!

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Читайте также: