Кратко
- Если один диапазон последовательности передан дважды, накопительный ACK может подтвердить доставку, но не показать, какая передача его вызвала; обычно такой ACK нельзя использовать для измерения RTT.
- При каждом следующем истечении таймера RTO удваивается с учётом необязательного верхнего предела, разрешённого RFC 6298; новые отправленные и подтверждённые данные затем могут дать однозначное измерение RTT. Временные метки являются исключением, если устраняют неоднозначность.
Отправитель TCP передаёт сегмент и запускает таймер повторной передачи. Таймер истекает, поэтому тот же диапазон последовательности отправляется снова. Затем приходит накопительный ACK. Для надёжности этого достаточно: подтверждённые байты доставлены. Для измерения задержки — нет. Ответ мог быть вызван первой передачей, повторной передачей или обеими копиями.
RFC 793 описывает исходный механизм: данные с номерами последовательности помещаются в очередь повторной передачи, а истечение таймера приводит к повторной отправке неподтверждённого сегмента. Иллюстративная процедура RTO измеряет время от отправки нумерованного октета до ACK, покрывающего его, и сглаживает RTT. Однако она не определяет, какой экземпляр считать источником ACK после повторной передачи.
В разделе 4.2.3.1 RFC 1122 прямо употребляет «MUST implement» для алгоритмов Карна и Джейкобсона и «MUST include» для экспоненциального увеличения RTO. Карн определяет допустимость измерения, а Джейкобсон учитывает дисперсию RTT. Более сложный расчёт не исправляет наблюдение с неизвестным временным происхождением. Позднейшее указание RFC 6298 о переходе от SHOULD к MUST относится к поддержке общего алгоритма RTO и не превращает эти две прямые формулировки RFC 1122 в рекомендации.
RFC 6298 запрещает измерять RTT по повторно переданным сегментам: ACK может относиться к первой или последующей передаче. При истечении таймера отправитель повторяет самый ранний неподтверждённый сегмент, удваивает RTO с учётом необязательного верхнего предела из раздела 2.5 и запускает таймер заново. Следующее обычное измерение RTT появляется лишь после отправки и подтверждения новых данных. Временные метки могут связать ACK с конкретным экземпляром.
Правило Карна не обнаруживает потери, не определяет быструю повторную передачу, управление перегрузкой, SACK или политику задержанных ACK. Оно также не задаёт механизм временных меток: метки служат лишь исключением, способным устранить неоднозначность. Правило Карна отделяет свидетельство доставки от свидетельства задержки.
Источники
Обзор для участников
Подробный контекст профиля
Войдите с подходящим уровнем подписки, чтобы открыть полный обзор и примечания к источникам.
Только для Стратегического сообщества
Стратегическое сообщество
Открыто всем читателям. Вступите и войдите, чтобы открыть обзоры профилей.
Вступить в Стратегическое сообществоТолько для Альянса лидеров
Альянс лидеров
Для проверенных владельцев IP-активов и руководителей. Войдите, чтобы открыть обзоры Альянса.
Вступить в Альянс лидеров
