Ложные быстрые повторные передачи из-за нарушения порядка Reordering triggers spurious fast retransmit
ID причины rt-reorder · Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда инфраструктуры · Серверная инфраструктура
Если на нескольких путях или агрегированных линках порядок пакетов меняется, получатель дублирующими ACK сообщает «пакета не хватает», и отправитель повторно отправляет пакеты, которые не терялись.
Почему Порядок перемешивают оборудование с балансировкой по отдельным пакетам, LAG (агрегирование линков) с распределением по пакетам и моменты смены маршрута → Следствие Следующие пакеты приходят раньше, накапливаются 3 дублирующих ACK → быстрая повторная передача → На экране На редкие игровые пакеты почти не влияет. Медленнее идут крупные обновления в местах скопления игроков и загрузка патчей, иногда микрофризы
Основной ответственный Команда инфраструктуры · Сетевая инфраструктура · Совместно Команда инфраструктуры · Серверная инфраструктура
Команда инфраструктуры: задачи
Сеть: балансировка по соединениям вместо балансировки по пакетам (ECMP и LAG по хешу адресов и портов). Серверы и ОС: использовать RACK (обнаружение потерь по времени, устойчиво к нарушению порядка. Обнаружив ложную повторную передачу по DSACK, автоматически расширяет допуск на нарушение порядка), проверить степень нарушения порядка, которую Linux автоматически оценивает для каждого соединения (значение reordering в ss -ti, начальное значение tcp_reordering=3).
На графике
Высоко с самого начала · число обнаруженных нарушений порядка, число полученных DSACK
Где смотреть
Посмотреть в nstat TcpExtTCPSACKReorder и TcpExtTCPTSReorder (сколько раз обнаружено нарушение порядка) и TcpExtTCPDSACKRecv, по соединениям смотреть reordering (выводится, если не равно 3) и reord_seen в ss -ti. В захвате пакетов использовать фильтр Wireshark tcp.analysis.out_of_order
Подтверждает
Счётчики нарушения порядка и DSACK стабильно растут независимо от времени суток, а у соединений через определённый путь или оборудование значение reordering больше 3. В захвате на стороне получателя следующий пакет приходит первым, а предыдущий тоже вскоре доходит
Опровергает
Если счётчики нарушения порядка не меняются, а растёт TcpExtTCPLostRetransmit, это реальные потери. Если DSACK растёт только в моменты скачков RTT, это «Ложные повторные передачи из-за скачков задержки»
IP SysctlLinux kernel Начальное значение tcp_reordering 3 (для каждого соединения автоматически подстраивается вплоть до tcp_max_reordering), настройка RACK в tcp_recovery
misc/ss.ciproute2 ss -ti выводит reordering:значение, если reordering соединения отличается от значения по умолчанию 3, и reord_seen:число, если соединение сталкивалось с нарушением порядка
SNMP counterLinux kernel TcpExtTCPSACKReorder и TcpExtTCPTSReorder (обнаружение нарушения порядка), TcpExtTCPDSACKRecv (число полученных DSACK), TcpExtTCPLostRetransmit (повторно отправленный пакет снова потерян)
include/uapi/linux/tcp.hLinux kernel tcpi_reord_seen в tcp_info: сколько раз соединение сталкивалось с нарушением порядка