Кратко

  • RFC 2001 считал три последовательных дубликата ACK сильным признаком отсутствующего сегмента, но не доказательством причины; это позволяло повторить передачу до тайм-аута.
  • В быстрой восстановительной фазе cwnd временно становилось равным ssthresh + 3 сегментам, росло на сегмент с каждым новым дубликатом и уменьшалось до ssthresh при ACK новых данных.
  • Такая обратная связь поддерживает лишь узкий вывод отправителя о движении последующих сегментов. Она не подтверждает ёмкость пути, личность узла и результат приложения.

Что изменилось на третьем повторе

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

RFC 2001 использовал третий дубликат как практический порог. Обычное переупорядочение, по предположению документа, чаще давало один или два повтора; третий делал гипотезу о потерянном сегменте достаточно сильной для Fast Retransmit. Таймер ещё не истёк, но отправитель уже получал право действовать.

Право действовать не равно знанию причины. Последовательность ACK не показывает очередь маршрутизатора, повреждение линии, смену пути или необычное поведение получателя. Она указывает на вероятную дыру внутри конкретного TCP-потока и остаётся локальным транспортным свидетельством.

Окно получателя не заменяет окно перегрузки

Объявленное получателем окно сообщает, сколько данных готов принять удалённый TCP. cwnd ограничивает объём, который отправитель считает допустимым для сети. Фактическая отправка подчиняется меньшему из двух значений. Свободный буфер на конце пути поэтому ничего не доказывает о промежуточной пропускной способности.

Порог ssthresh задаёт переход между быстрым ростом Slow Start и более осторожным Congestion Avoidance. Тайм-аут возвращает cwnd к одному сегменту: подтверждений продолжающегося движения почти нет. Три дубликата ACK несут другую информацию — суммарная граница стоит, но последующие сегменты проходят.

Эта разница связывает четыре алгоритма RFC 2001 в одну машину состояний. Slow Start исследует неизвестный путь, Congestion Avoidance умеряет рост, Fast Retransmit чинит предполагаемую дыру, а Fast Recovery сохраняет такт обратной связи во время ремонта.

Временное расширение как учёт оттока

На третьем дубликате RFC 2001 устанавливает ssthresh в половину текущего cwnd, но не ниже двух сегментов. Затем отправляется копия предположительно отсутствующего сегмента. После этого cwnd устанавливается в ssthresh + 3*segsize.

Прибавка не означает, что сеть внезапно стала вместительнее. Три дубликата могли появиться только после прихода трёх более поздних сегментов; алгоритм считает их покинувшими сеть и находящимися в буфере получателя. Временный запас окна соответствует этому предполагаемому оттоку и не даёт ACK-часам остановиться.

Каждый следующий дубликат увеличивает cwnd ещё на сегмент. Если окно разрешает, отправитель выпускает новый пакет. И это разрешение условно: новый повтор указывает ещё на один сегмент, ушедший из полёта. Долговременная оценка ёмкости от этого не растёт.

Новые данные закрывают временный счёт

Когда ACK впервые подтверждает новые данные, cwnd уменьшается до ssthresh. Исчезают начальная тройная прибавка и все последующие единицы. Отправитель остаётся примерно с половиной прежнего окна и продолжает в Congestion Avoidance.

Так RFC отделяет бухгалтерию восстановления от постоянного разрешения на отправку. Продвижение границы означает, что дыра закрылась; документ ожидает, что ACK охватит и повторную передачу, и промежуточные сегменты из буфера. Но из него по-прежнему нельзя восстановить физический маршрут каждой копии или истинную причину исходной задержки.

RFC 793 проводит ещё одну границу: ACK означает, что принимающий TCP взял ответственность за данные, а не то, что они доставлены конечному пользователю. Поэтому транспортное продвижение нельзя превращать в подтверждение записи, обработки или бизнес-результата.

Из каких событий складывается доказуемая история

Для аудита нужны номер повторяемого ACK, счётчик дубликатов, диапазоны в полёте, cwnd и ssthresh на каждом переходе, диапазон повторной передачи, временные увеличения и первый ACK с новыми данными. Сводный флаг «восстановлено» стирает различие между наблюдением, выводом, разрешением и итогом.

Карточка RFC Editor указывает: документ W. Richard Stevens опубликован в январе 1997 года как Proposed Standard и позднее заменён RFC 2581. Алгоритм доступен в версиях HTML и plain text, а IETF Datatracker сохраняет историю документа. RFC 1122 объясняет ACK при приходе вне порядка; RFC 2581 здесь служит только подтверждением линии замены.

Материал не утверждает, что современные реализации буквально следуют RFC 2001. Он не сравнивает позднейшие алгоритмы, не пересказывает развитие таймеров и не переносит современные показатели на 1997 год. Предмет статьи — узкая цепочка: повторное уведомление, ограниченный вывод, временное разрешение и его отмена.