TCP SACK и DSACK в Wireshark: диагностика потери пакетов, опция sack_perm и повторная передача в PCAP

Диагностика параметров TCP SACK, DSACK и sack_perm в Wireshark PCAP. Охватывает выборочные подтверждения, восстановление потерянных пакетов, переупорядочение, дублирование ACK и ложные повторные передачи.


Анализ повторной передачи TCP становится гораздо более точным, когда доступно выборочное подтверждение. Пользователи ищут «TCP SACK pcap», «DSACK Wireshark», «дублированный SACK», «ложная повторная передача», «переупорядочение TCP против потери пакетов» и «выборочный захват пакетов ACK», когда трассировка показывает дублированные ACK, повторные передачи и пакеты с нарушением порядка, но основная причина неясна.

PCAP Surgery полезен, поскольку свидетельства SACK передаются в опциях TCP. Если вы отсекаете неправильные пакеты, теряете подтверждение связи или отделяете подтверждения от данных, диагноз становится менее надежным.

Что добавляет SACK

Традиционные TCP-ACK подтверждают следующий ожидаемый байт. Если один сегмент отсутствует, но приходят более поздние сегменты, получатель может только продолжать подтверждать разрыв.

SACK позволяет получателю сказать: «Мне все еще не хватает этого более раннего диапазона, но я получил эти более поздние диапазоны».

Это помогает отличить:

  • Фактическая потеря пакетов.
  • Доставка вне заказа.
  • Дубликаты пакетов.
  • Поведение получателя.
  • Поведение восстановления отправителя.

SACK должен быть согласован

Возможность SACK согласовывается в SYN и SYN-ACK. Если захват начинается после рукопожатия, вы можете не знать, разрешен ли SACK.

Всегда сохраняйте:

  • SYN.
  • SYN-ACK.
  • Разрешенный вариант SACK.
  • Опция масштабирования окна.
  • Опция отметки времени, если она присутствует.

Вот почему «небольшого вмешательства вокруг повторной передачи» может быть недостаточно.

Дублирование ACK с блоками SACK

Не все дублирующиеся ACK означают одно и то же. Дубликат ACK с блоками SACK может точно сообщить отправителю, какие именно последующие диапазоны байтов поступили.

Доказательства для проверки:

  • Номер ACK.
  • мешочек с левого и правого края.
  • Повторяющиеся блоки SACK.
  • Новая информация SACK.
  • Появятся ли отсутствующие данные позже.
  • Заполняет ли пробел повторная передача.

Это гораздо эффективнее, чем просто подсчет дубликатов ACK.

Потеря пакетов и изменение порядка

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

Вопросы:

  • Оригинальный сегмент прибыл поздно?
  • Ретрансляция пришла первой?
  • Сообщал ли позже DSACK дублирующиеся данные?
  • Есть ли путь, который переупорядочивает пакеты?
  • Пересекают ли пакеты несколько каналов, туннелей или путей с балансировкой нагрузки?

PCAP Surgery может помочь выделить точный диапазон последовательностей и сравнить порядок пакетов.

Что означает ДСАК

Дубликат SACK может сообщить, что были получены дублирующиеся данные. Это полезно для выявления ложных повторных передач или изменения порядка.

Данные DSACK могут указывать на:

  • Отправитель повторил передачу без необходимости.
  • Сеть доставила исходные данные с опозданием.
  • Точка захвата видела дубликаты.
  • Получатель получил как исходные, так и повторно переданные байты.
  • Миддлбокс дублирует пакеты.

Это вывод, отличный от вывода «пакет потерян».

Ложные повторные передачи

Повторная передача не всегда является доказательством потери. Это может быть вызвано:

  • Reordering.
  • Поведение отложенного подтверждения.
  • Захват артефактов разгрузки.
  • Слишком маленький тайм-аут повторной передачи.
  • ACK-сжатие.
  • Сроки виртуализации.
  • Асимметрия пути.

SACK и DSACK помогают доказать, действительно ли данные отсутствовали или просто опоздали.

Точка захвата имеет значение

Если pcap односторонний или находится за NAT, интерпретация SACK может быть сложной. Пакет может отсутствовать в вашей точке захвата, но присутствовать в получателе.

Полезная практика:

  • Сравните захваты на стороне отправителя и получателя.
  • Синхронизируйте временные метки.
  • Сохраняйте порядковые номера.
  • Избегайте обрезки пакетов, содержащих только ACK.
  • Обратите внимание на место разгрузки и захвата.

Анализ SACK без пакетов ACK не является анализом.

Контрольный список отладки

Используйте этот рабочий процесс:

  1. Сохраните TCP-рукопожатие.
  2. Подтвердите, что SACK разрешен.
  3. Найдите первый дубликат ACK.
  4. Декодирование блоков SACK.
  5. Сопоставьте диапазоны SACK с пакетами данных.
  6. Определите диапазоны повторно передаваемых последовательностей.
  7. Проверьте наличие DSACK.
  8. Отдельная потеря от повторного заказа.
  9. Проверьте точку захвата и контекст разгрузки.
  10. Сохраняйте пакеты до/после события восстановления.

Окончательный диагноз

TCP SACK и DSACK предоставляют точные доказательства потери пакетов, изменения порядка, дублированной доставки и ложных повторных передач. Ключевым моментом является сохранение параметров установления связи, пакетов только ACK, блоков SACK и диапазонов повторно передаваемых последовательностей.

PCAP Surgery помогает сохранить эти данные в целости и сохранности, поэтому анализ потерь TCP может выйти за рамки обычного подсчета дубликатов ACK.