Серверы и ИИ: практическое применение
SACK TCP: полученный поздний диапазон ещё не заменяет накопительное подтверждение
Когда в потоке потерян участок, получатель может принять более поздние данные. SACK сообщает отправителю о таких диапазонах и помогает повторить недостающее. Без этой информации один неподвижный cumulative ACK скрывал бы значительную часть состояния приёма.
RFC 2018 описывает отдельные SACK blocks и их использование для выбора retransmission. Границы относятся к sequence space, а не к номерам прикладных сообщений. После повторной packetization они также не обязаны совпадать с первоначальными границами сегментов в локальной очереди.
Получатель при определённых условиях может отказаться от ранее SACKed, но ещё не cumulatively acknowledged данных. Поэтому отправитель не должен освобождать их только по SACK: окончательная соответствующая граница задаётся Acknowledgment Number заголовка. Это важное отличие для интерпретации буферов и повторов.
В приёмке проверяют пропуск внутри окна, приём следующих диапазонов и последующее закрытие gap. Сопоставляют SACK с продвижением cumulative ACK. Наличие SACK не доказывает завершение передачи всего файла или обработку приложением. Оно уточняет transport-состояние, позволяя диагностировать восстановление без ложного вывода, что все пришедшие позже байты уже окончательно подтверждены.
Основание — Numbered IETF TCP references with RFC7413 explicitly Experimental; selected mechanisms and algorithms only, разделы RFC2018 SACK blocks; sender behavior; receiver reneging. Сохранён текст публичной справочной публикации; конкретная реализация может поддерживать только часть возможностей. Основание — указанные номерные RFC TCP. Дополнения и алгоритмы не считаются включёнными автоматически; RFC 7413 о Fast Open имеет статус Experimental. Реальный TCP stack, socket options, трасса и настройки системы не проверялись; соединения и сетевые испытания не выполнялись.