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

3 ответа3

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

2

Ответ от iwaseatenbyagrue является хорошим ответом (я проголосовал за него), но он страдает от простого дефекта, то есть он возвращает глобальную статистику потери пакетов, в то время как pingmtr, комбинированный инструмент traceroute/ping ) являются локальными для связи: в других словами, они будут детализировать потерю пакетов в конкретном сообщении, а не в среднем по всем сообщениям, которые вы развлекали в прошлом.

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

Чтобы это работало в Wireshark, выберите Статистика -> Статистика разговоров и выберите диалог (= удаленный хост), для которого вы хотите установить частоту потери пакетов, на вкладке TCP. Тогда вы сразу получите пропускную способность (количество пакетов в секунду от удаленного к локальному и наоборот). Если вместо этого вам нужна скорость потери пакетов, при выборе диалога добавьте следующий фильтр и tcp.analysis.lost_segment и посмотрите, сколько пакетов отброшено, проверив в строке состояния, сколько пакетов соответствует фильтру.

О том, как это сделать, должно быть миллионы онлайн-источников, я нашел это видео на Youtube простым и понятным, но, по-настоящему, поиск потери пакетов Wireshark принесет много страниц с хорошими советами.

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     -    -

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .