Ловіть втрату пакету без використання ICMP у FreeBSD


0

Чи можливо якось виявити втрату пакету без використання протоколу ICMP (ping; fping тощо), щоб уникнути генерації додаткового мережевого трафіку за допомогою утилітів за замовчуванням, таких як netstat тощо?


Чому тег Linux? Якщо у вас є дві системи, що розмовляють між собою, можливо, ви зможете робити байтовий облік між IP-адресами з кожної сторони та порівнювати кількість відправлених пакетів з отриманими пакетами. Не знаю, як би ви це зробили у freebsd, але це можна зробити в Linux.
Давидго

Відповіді:


3

Не впевнений, чи це справедливо для FreeBSD, але в Linux, ви можете перевірити наявність ретрансляцій TCP, потенційно у відсотках від загальних пакетів, що відображаються в заданий часовий період.

У Linux це виглядає приблизно так:

> cat /proc/net/tcp sl local_address rem_address st tx_queue rx_queue tr tm->when retrnsmt uid timeout inode
0: 00000000:0014 00000000:0000 09 00000000:00000000 00:00000000 00000000 0 0 30111 1 0000000000000000 100 0 0 10 0

Дивіться також це питання щодо інших ідей та відповіді на основі netstat: https://serverfault.com/questions/318909/how-passively-monitor-for-tcp-packet-loss-linux .

Вам потрібна відповідь від JoelK : netstat -s | grep retransmitted


1
Я десь заблукав ... Питання було - як отримати статистику про втрачені пакети без генерації зайвого трафіку, і це повинен бути FreeBSD. netstat -sне існує цієї ОС, а також "дружньо" відкрито нікому процессне дерево Linux в/proc/*
Alex

Гаразд - я цього не знав (як уже згадувалося в першому рядку, я показав, що працює для Linux, оскільки я не знаю достатньо про BSD). При цьому, відповідно до цієї сторінки, принаймні, FreeBSD повинен підтримувати netstat -s
iwaseatenbyagrue

Argh ... Мене з'їли сперечаючись ... буквально :) Ти маєш рацію, netstat -sпрацює рішення для FreeBSD, але відсутня директорія - /procце 100% вірно (якщо не ввімкнули режим сумісності Linux, який не є за замовчуванням). +1 від мене
Олексій

2

Відповідь iwaseatenbyagrue - це хороша відповідь (я її схвалив), але вона страждає від простого дефекту, тобто повертає глобальну статистику втрат пакетів, тоді як pingmtr , комбінований інструмент traceroute / ping ) є локальними для спілкування: в інших Слова, вони детально описують втрати пакетів на конкретній комунікації, а не в середньому на всі комунікації, які ви розважали в минулому.

Wireshark , поширений інструмент для аналізу пакетів, доступний для всіх ОС, може допомогти вам встановити втрати пакетів на основі кожного з'єднання. В основі цього лежить той факт, що пакети TCP (але не пакети UDP) несуть послідовний номер послідовності (хоча номер першого пакета визначається в оборотному порядку для обходу певного класу атак), що дає можливість запитати для повторного надсилання кожного разу, коли пакет відкидається до досягнення призначеного пункту призначення.

Щоб зробити цю роботу у Wireshark, Statistics -> Статистика розмови та виберіть розмову (= віддалений хост), для якої потрібно встановити швидкість втрати пакетів, на вкладці TCP. Тоді ви отримаєте пропускну здатність (пакети в секунду від віддаленого до локального та віверса) негайно. Якщо замість цього ви хочете швидкість втрати пакетів, вибираючи розмову, додайте наступний фільтр і tcp.analysis.lost_segment , і подивіться, скільки пакетів випадає, перевіряючи, на панелі стану, скільки пакетів відповідає фільтру.

Потрібно мати мільйони джерел в Інтернеті про те, як це зробити. Я знайшов це відео на Youtube простим і зрозумілим, але дійсно гугла втрата пакету проводів призведе до багатьох сторінок з гарними порадами.


Погодьтеся - дякую, що вказали на це. @ user54, ви можете захопити pcap wireshark, можете читати, використовуючиtcpdump -i INTERFACE -w $HOSTNAME.INTERFACE.pcap
iwaseatenbyagrue

Який сенс використовувати сторонні програми, якщо ви можете отримати статистику з ОС простою netstat"в середньому за всіма комунікаціями, які ви розважали в минулому"?
Алекс

1

Ви можете використовувати програму MTR з -uопцією, що використовує дейтаграми замість ICMP ECHO або опцію, -Tщо використовує пакети TCP SYN.

Якщо ви не хочете генерувати зайвого трафіку та просто хочете отримати накопичену статистику про втрачені пакети за минулі, то ви можете отримати статистику з ОС FreeBSD із стовпців, позначених як errзапуск:

netstat -idb -I <interface_name>

У вас вийде щось подібне:

# netstat -idb -I em0
Name    Mtu Network       Address              Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop
em0    1500 <Link#1>      00:11:22:33:44:55 110031161     0 2708056139 176396459     0  366893484     0    0
em0    1500 192.168.24.0  mxmail            107582221     - 1545164761 177078111     - 2870208791     -    -

mtr подібно до використання ping ...
MariusMatutiae

@MariusMatutiae Так, але питання полягало в тому, як уникнути ICMP і що те, що я пропоную використовувати замість нього, використовуючи UDP або TCP syn та MTR, може зробити це, щоб виявити проблему з певним з'єднанням, а netstatрішення відповісти саме на те, що запитував ОП - отримайте статистика втрат пакетів без генерації зайвого трафіку та без будь-яких сторонніх програм, особливо з використанням netstat.
Алекс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.