Управление соединением в 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

Работает только для первой повторной передачи на основе таймера