Кратко

  • RFC 6298 перезапускает таймер, когда ACK подтверждает новые данные, а не при каждом поступившем ACK.
  • Таймер запускается при отправке данных, останавливается после подтверждения всех ожидающих данных, а при истечении выбирается самый ранний неподтверждённый сегмент.

Граница подтверждения задаёт срок

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

Правило 5.3 разрешает перезапуск только тогда, когда ACK подтверждает новые данные. Известная отправителю граница приёма продвинулась, поэтому для оставшегося самого раннего сегмента начинается новый интервал RTO.

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

Когда все ожидающие данные подтверждены, таймер выключается. При его истечении отправитель повторно передаёт самый ранний неподтверждённый сегмент.

Обязательное требование и рекомендуемый алгоритм

RFC 6298 требует, чтобы сегмент не передавался повторно раньше чем через один RTO после предыдущей передачи. Последовательность запуска, остановки и перезапуска описана как рекомендуемый алгоритм управления таймером. Эти два нормативных уровня нельзя смешивать.

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

Источники