Який процес Linux відповідає за відповідь на pings?


39

У мене є контролер процесів на базі Linux, який час від часу блокується до того моменту, коли ви не можете його пінг (тобто я можу пінг, тоді він більше не може бути pingable без будь-яких змін мережевих налаштувань).

Мені цікаво, який процес / система відповідає за фактичне реагування на пінгви? Схоже, цей процес виходить з ладу.


Чи можете ви ще вступити в нього, поки він не відповідає pings? Або існуючі сеанси SSH закриваються?
Пітер Кордес

@PeterCordes Вся система блокується і по суті є цеглою, поки не змушує перезавантажуватися.
Іццо

3
Гаразд, це зазвичай єдиний спосіб, коли машина перестане реагувати на pings. Було б дивно, якби пінг-файли перестали працювати, але інші речі продовжували працювати, тому що обробка ping працює навіть у тому випадку, якщо користувальницький простір шлангується і все заблоковано на вході / виводу диска на мертвий диск або кріплення NFS чи будь-що інше. Спробуйте підключити монітор до вашої системи і побачити, чи є повідомлення консолі, коли воно закривається. (І якщо ви можете використовувати чарівні послідовності клавіатури SysRQ, щоб скинути інформацію або перезавантажити лише заново, примусово синхронізуйте диски + перезавантажте.
Пітер Кордес,

2
Хоча ваше запитання цікаве, ping - не джерело проблем вашої системи, а скоріше наслідок нестабільної системи. Перевірте журнали, щоб зрозуміти, що не так.
Педро Лобіто

@PedroLobito Які журнали конкретно?
Іццо

Відповіді:


56

Мережевий стек ядра обробляє ICMP-повідомлення, які надсилаються pingкомандою.

Якщо ви не отримуєте відповіді, окрім проблем із мережею чи фільтрації, та фільтрації на основі хоста / обмеження швидкості / чорно-холінг / тощо. це означає, що машина, ймовірно, перевантажена чимось, що може бути тимчасовим, або ядро ​​зламається, що рідко, але може трапитися (несправне обладнання та ін.), не обов'язково через трафік ICMP (але намагаючись перевантажити його таким трафіком може бути хорошим тестом на початку життя сервера, щоб побачити, як він підтримує речі). У пізнішому випадку аварії ядра у вас повинна бути достатньо інформації в файлах журналу або на консолі.

Також зауважте, що pingмайже завжди це неправильний інструмент для перевірки того, чи є послуга в Інтернеті чи ні. З різних причин, але в основному через те, що він не імітує реальний трафік додатків, за визначенням. Наприклад, якщо вам потрібно перевірити, чи веб-сервер все ще працює, вам слід замість нього зробити HTTP-запит (TCP-порт 80 або 443), якщо вам потрібно перевірити сервер пошти, ви зробите запит SMTP (TCP-порт 25), якщо сервер DNS, UDP та TCP-запит до порту 53 тощо.


4
@ Запроваджуйте будь-який інший тест служби прикладних програм не вдасться або проходить час, тому кінцевий результат, що спостерігається, буде однаковим. Я ніколи не пропускаю можливості лекції проти використання, pingоскільки це створює занадто багато помилкових позитивів у вирішенні проблем, тому я думаю, що користувачі, які не знають, що саме робить пінг, і як він може дати оманливі результати, повинні дотримуватися чогось іншого.
Патрік Мевзек

2
У більшості ситуацій із перевантаженням єдине, що все-таки відповідає, це ті, які робиться ядром. Це означає, що машина зазвичай реагує на ping незалежно від того, наскільки вона перевантажена. Спроби досягти закритого порту дадуть відповідь RST для TCP та помилкою ICMP у разі UDP. І перші кілька спроб дістатися до відкритого порту TCP завершать рукостискання. Поломка диска може призвести до майже однакових симптомів.
kasperd

@kasperd Я бачив (дуже) перевантажені сервери (заміняючи їх конкретно), не відповідаючи на запити ICMP. І звичайно ж ні до чого іншого. Ядро не вийшло з ладу, воно було просто зайнято дисковими вводу-виводу.
Патрік Мевзек

2
@Nacht Yup Мережевий інтерфейс - це пристрій HW; як такий є драйвер ядра, щоб взаємодіяти з ним. Потім другий рівень забезпечує загальні API управління / комунікації. (Це не унікально для мереж: є ALSA для аудіо розробників, для відеовиходів використовується API KMS, USB має {U, E, X} HCI, потім usb_storage, usbhid тощо). Таблиці маршрутизації в мережі, правила брандмауера (через iptables ), рукостискання, складання пакетів, повторна передача тощо - це все в ядрі. Оскільки ICMP є протоколом для себе, без корисного навантаження та ніякої обробки, що не перевищує "відповісти чи не робити", ядро ​​обробляє відповіді ICMP безпосередньо для мінімальних витрат.
FeRD

5
@Nacht: Мова йде не про фундаментальну комп'ютерну архітектуру; це вибір реалізації. Мікропровідники будуть обробляти ICMP в процесі ОС.
MSalters

11

Немає жодного процесу користування, який би відповідав за відповіді на пінг. Ping - це лише утиліта для надсилання ехо-пакетів ICMP. Вони отримуються та обробляються мережевим стеком ядра


9

Саме ядро ​​(не будь-який процес користувача) несе відповідальність за надсилання повідомлень Echo відповіді ICMP у відповідь на повідомлення запиту ехо ICMP . Отже, якщо хост перестає відповідати на пінг, це, як правило, пов’язано з однією з наступних причин:

  • можливо, мережеве з'єднання між вами та хостом, що підпиняється, може бути порушено. Це може бути пов'язано з низкою причин: фізичні пошкодження кабелів, шум у разі бездротового зв’язку, розбиті таблиці маршрутів, ви знаходитесь під DDoS-атакою, проблемні маршрутизатори / комутатори між т. Д. Ви в цьому випадку розпочнете усунення несправностей використовуючи ethtool(8), iwconfig(8), route(8), ping(8)її маршрутизатор, і tcpdump(8)т.д. на цільовому хості.

  • налаштування брандмауера для цільового хоста (або будь-якого маршрутизатора / брандмауера між вами та цільовим хостом) може обмежувати кількість пінгів (або кількість трафіку). Це також може бути пов'язано з такими інструментами, як fail2ban(8)файрволлінг на вимогу. Дивіться, iptables(8)щоб перевірити.

  • сталася несправність програмного забезпечення та обладнання на цільовому хості. Модуль мережевого ядра на цільовому хості може мати OOPSed та / або заплутатися, або навіть все ядро ​​могло б зробити ПАНІК. Ви побачите повідомлення про dmesg(8)ввімкнення на цільовому хості або як вихід на екран на фізичній консолі (якщо фізичний доступ недоцільний, може допомогти інша машина з послідовною консоллю .) Якщо проблема з ядром OOPS / PANIC, проблема може мати нове ядро ​​з кращими драйверами. допомогу, або ви можете зв'язатись із блокуваннями системи watchdog(8)та драйверами-помічниками. Або ви можете змінити деталі обладнання.


2
Для зацікавлених, ось відповідний код ядра для обробки ехо-запитів ICMP.
Руслан

Ви також повинні згадати дуже високе навантаження (особливо процесор)
Гільгерме Бернал

@GuilhermeBernal ні, навіть надзвичайно велике завантаження користувачів процесора (у тисячах) не призведе до втрати ICMP (оскільки він подається в ядрі, перш ніж користувацькі процеси отримають шанс запуститися). Надзвичайно висока швидкість PPS в мережі в поєднанні з апаратним забезпеченням низького класу може призвести до втрати пакетів, але такий DDoS підпадає під категорію "мережеве підключення"
Matija Nalis
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.