Управление соединением в TCP
Round Trip Time (RTT) — это время, за которое пакет долетает до узла и обратно. Другими словами задержка передачи пакета.
Retransmission Timeout (RTO) — это время, которое TCP будет ожидать до момента получения ACK на отправленный ранее сегмент.
При установлении соединения определяется начальный RTO ( 1 или 3 сек.), далее при получении первого ACK уменьшается и т.д. (Постоянно меняется во время жизни сессии на основе последующих RTT)
Если RTO заканчивается до момента получения ACK , то сегмент повторно передается ( копия сегмента остается в очереди на передачу ).
RTO = X *RTO, где X = 1, 2, 4, 8 …128.
При получении ACK для потерянного пакета X = 1
Если в течении RTO не получен ACK для сегмента, то он передается повторно.
RTO пересогласовывается исходя из значения RTT.
Retransmission Queue — буфер, в котором содержатся пакеты предназначенные для повторной передачи.
Каждый сегмент передаваемый TCP хранится некоторое время в RQ.
Fast Retransmit — механизм, позволяющий TCP начать повторную передачу сегментов по сигналу от получателя, а не по истечению RTO таймера. Отправитель отправляет повторно данные немедленно после предположения, что отправленные пакеты утеряны.
Duplicate ACK — создается в ситуации когда получен сегмент с нарушением номерного порядка. ( Сигнал о возможной потере пакетов на приемной стороне )
При получении нескольких Dup ACK отправитель заново передает весь сегмент ( duplicate ACK threshold )
S-ACK — выборочное подтверждение.
Задача S-ACK снизить ненужные повторные передачи. Получатель может может указать какие были получены, а какие утеряны. S-ACK согласовывается во время сессии.
ACK может быть дополнен 4 блоками S-ACK, которые содержат порядковые номера потерянных сегментов. Каждый блок S-ACK содержит два 32-х битных порядковых номера. ( Первый и последний номер последовательного блока)
В ряде случаев могут возникать ложные потери. Например трафик пошел по другому маршруту и время доставки изменилось. TCP в таком случае может организовать передачу данных, когда потерь пакетов не было. Такие передачи называются ложными и вызваны ложными таймаутами и потерями ACK.
Ложные таймауты возникают при резком увеличении RTT с выходом за границы RTO.
Dublicate S-ACK (DS-ACK)
S-ACK не говорит что случилось когда получатель получил дублированные данные.
DS-ACK в первом S-ACK блоке содержит порядковый номер дублирующегося сегмента у получателя.
DS-ACK позволяет определить потери, но не отвечает что с ними делать.
Алгоритм обнаружения Эйфеля
Работает быстрее чем DS-ACK
Описан в RFC3522
Использует опцию timestamp (TSOPT)
При повторной передаче запоминается значение TSVal ( Текущее время)
При приеме первого корректного ACK проверяется TSER ( TS Echo Reply)
Если TSER < TSVAL , то повторная передача была ложной
Алгоритм реакции Эйфеля
Описан в RFC4015
Работает только для первой повторной передачи на основе таймера