Кратко

  • Накопительный ACK подтверждает все предыдущие байты. Блок SACK лишь описывает диапазон, который получатель сейчас обещает хранить и может позднее отбросить.
  • Отправитель сохраняет данные, объединяет частичные отчёты в свой scoreboard и выбирает повторы в пределах правил перегрузки.
  • D-SACK сообщает о дубликате, но не доказывает причину. Более богатые сведения не передали получателю власть над восстановлением.

Получено не значит освобождено

Получатель ждёт байт 5000, но уже хранит [5500,9000). SACK показывает этот остров, и отправителю не нужно повторять весь полёт.

Удалять копию всё равно нельзя. Получатель может освободить ранее объявленную память, а timeout способен наступить после устаревания карты. Только продвижение накопительного ACK завершает обязанность хранения.

Подсказка меняет стратегию; общее обязательство меняет ответственность.

Сильное обещание и более слабое наблюдение

RFC 793 определяет ACK X как подтверждение всех меньших октетов и ожидание X. Эта прочная граница не описывает острова за первым пробелом. Повтор числа не различает одну потерю, несколько потерь и перестановку.

RFC 1072 предложил первую выборочную опцию в 1988 году. В таком виде она не стала общей практикой; позднее RFC 6247 перевёл документ в Historic. Публикация предложения не равна согласию реализаций.

Отчёт меньше очереди

RFC 2018 пересмотрел механизм в 1996 году. SACK-Permitted согласуется в SYN, а две 32-битные границы описывают каждый блок. Значение обычного ACK сохраняется.

Сорок байтов опций вмещают не более четырёх блоков, обычно трёх с timestamp. Сначала идёт блок, изменённый новейшим сегментом; недавние блоки повторяются, потому что обратный путь тоже теряет сообщения.

Scoreboard — локальная модель отправителя из ограниченных видов, а не полная копия очереди получателя.

Reneging отделяет совет от расписки

RFC 2018 называет сведения SACK advisory. Получатель может отказаться от сообщённого диапазона. Отправитель вправе временно пропустить его при обычном восстановлении, но хранит оригинал до накопительного подтверждения.

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

Дубликат не объясняет себя

RFC 2883 позволил D-SACK сообщать о повторных данных. Причиной могут быть перестановка, потеря ACK, репликация или ранний таймер. Документ не предписывает единственную реакцию и предупреждает, что получателю нельзя доверять безусловно.

RFC 5681 сохраняет требования контроля перегрузки. Точная карта лучше расходует разрешённое окно, но не расширяет его.

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