Кратко

  • RFC 6298 вычисляет срок повторной передачи из сглаженного времени пути и его вариации, отказываясь от неоднозначных образцов после повтора.
  • Первое ожидание может начаться с одной секунды; потерянный SYN возвращает три секунды для данных, а каждое следующее истечение удваивает RTO.

Молчание — слабое свидетельство. Мог потеряться сегмент, мог потеряться ACK, а могли просто задержаться оба. Слишком ранний повтор создаёт копию и добавляет нагрузку на, возможно, перегруженный путь. Слишком долгое ожидание не чинит настоящую потерю. RTO выбирает между ошибками, не утверждая, что знает причину.

Оценка хранит время и неопределённость

До первого измерения RFC рекомендует RTO в одну секунду, разрешая большее консервативное значение. После первого образца R задаются SRTT = R, RTTVAR = R/2 и RTO = SRTT + max(G, 4*RTTVAR), где G — точность часов.

Для следующих образцов RTTVAR сначала обновляется со старым SRTT; beta равна четверти, alpha — одной восьмой, K — четырём. Затем меняется SRTT. Такой порядок измеряет неожиданность новой величины относительно прежней оценки. RTO остаётся суммой сглаженного времени и большего из G и четырёх вариаций.

Результат меньше секунды следует поднять до секунды. Максимум разрешён только в 60 секунд или больше. Реализация может быть осторожнее, но не должна повторять агрессивнее алгоритма.

Не каждый ACK учит часы

Алгоритм Карна обязателен. ACK после повторной передачи может относиться к первой или второй копии и не должен становиться образцом RTT, кроме случая, когда TCP Timestamps снимает неоднозначность. Без меток обычно нужен хотя бы один образец за RTT; с ними возможно много, но правила оценщика сохраняются.

Это не PAWS: метка здесь связывает ACK с отправкой, а не отбрасывает старые номера после оборота последовательности.

Один таймер для самых старых неподтверждённых данных

При отправке новых данных с остановленным таймером он запускается с текущим RTO. ACK для всего ожидающего останавливает его. ACK, продвигающий подтверждение при оставшихся данных, перезапускает его с тем же RTO.

При истечении TCP повторяет самый старый неподтверждённый сегмент, удваивает RTO и запускает таймер с удвоенным значением. Экспоненциальное отступление делает действие при повторном молчании всё дороже. Поздний чистый RTT может снизить RTO; после нескольких отступлений SRTT и RTTVAR можно очистить, если они больше не описывают путь.

У первой секунды есть исключение. Если SYN истёк при RTO менее трёх секунд, после установления соединения перед данными значение нужно вернуть к трём. Путь опроверг быстрое предположение.

Таймер управляет, а не ставит диагноз

Нападающий может задержать измеряемый пакет и увеличить RTO или попробовать снизить его подделкой. Сглаживание и отступление ограничивают длительность, но не подтверждают источник задержки. Истечение — действие в неопределённости, не доказательство потери.

Единственный источник — RFC 6298, опубликованный в Standards Track в июне 2011 года. Он задаёт алгоритм и историческую мотивацию, но не современные настройки и не RTT конкретной сети.