Максимальное время ожидания подтверждения в TCP (timeout)
Протокол TCP использует интервалы ожидания и повторные передачи для решения проблем потерянных сегментов.
Оценка времени оборота: Под выборочным временем оборота (SampleRTT) - время, проходящее с момента передачи сегмента протоколу сетевого уровня передающей стороны до получения квитанции для этого сегмента, измеряется для 1 из переданных, но не квитированных сегментов, с периодичность в 1 время оборота меняется, не измеряется для повторно переданных сегментов. Для получения типичного значения необходимо некоторым способом усреднить величину SampleRTT - величина EstimatedRTT.
EstimatedRTT = (1-a)*EstimatedRTT + a*SampleRTT (а = 0,125)
- является весовым средним значением SampleRTT - экспоненциалоьное весовое скользящее среднее.
DevRTT - приближенное отклонение SampleRTT от EstimatedRTT.
DevRTT = (1-b)*DevRTT + b*|SampleRTT - EstimatedRTT|
b = 0.25
Определение и управление величиной интервала ожидания:
TimeoutInterval = EstimatedRTT + 4*DevRTT.
Удвоение интервала ожидания: По истечении интервала ожидания TCP осуществляет повторную передачу неподтвержденного сегмента с наименьшим порядковым номером. При этом вместо нового расчета EstimatedRTT и DevRTT TCP удваивает текущее значение интервала ожидания. ТО увеличение интервала происходит экспоненциально при каждой новой повторной передаче ( при получении квитанции или данных от верхнего уровня расчет заново).
Ускоренная повторная передача: механизм дублирования подтверждения позволяет передающей стороне обнаружить потери пакетов до истечения интервала ожидания - это копия положительной квитанции предыдущего сегмента, отправляемая в ответ на получение следующего сегмента, если порядковый номер последнего превышает ожидаемый. Если на передачу одного и того де сегмента приходит 3 дублирующих подтверждения, передающая сторона воспринимает это как указание на потерю следующего за ним сегмента. в этом случае TCP осуществляет ускоренную передачу пропущенного сегмента не дожидаясь истечения интервала ожидания.
Возвращение на N шагов назад или выборочное повторение: TCP использует общее квитирование и для неискаженных сегментов, полученных с нарушением порядка следования, не формируется отдельной квитанции. ТО передающей стороне лишь необходимо хранить наименьший порядковый номер отправленного неподтвержденного байта и порядковый номер следующего передаваемого байта. В TCP предусмотрена буферизация пакетов, полученных с нарушением порядка следования. TCP использует механизм выборочного подтверждения, позволяющий принимающей стороне индивидуально квитировать сегменты, нарушающие порядок следования, а не выдавать общую квитанцию для последнего корректно принятого сегмента.
Удвоение интервала ожидания: истечение интервала ожидания свидетельствует о наличии перегрузок в сети, т.е. скоплению большого числа пакетов на одном или нескольких марш-рах, что приводит к значительным задержкам и потерям данных. Увеличение интервала ожидания приводит к тому, что повторные передачи осуществляются через возрастающее промежутки времени.
Ускоренная повторная передача: механизм дублирования подтверждения позволяет передающей стороне обнаружить потери пакетов до истечения интервала ожидания - это копия положительной квитанции предыдущего сегмента, отправляемая в ответ на получение следующего сегмента, если порядковый номер последнего превышает ожидаемый. Если на передачу одного и того де сегмента приходит 3 дублирующих подтверждения, передающая сторона воспринимает это как указание на потерю следующего за ним сегмента. в этом случае TCP осуществляет ускоренную передачу пропущенного сегмента не дожидаясь истечения интервала ожидания.
Возвращение на N шагов назад или выборочное повторение: TCP использует общее квитирование и для неискаженных сегментов, полученных с нарушением порядка следования, не формируется отдельной квитанции. ТО передающей стороне лишь необходимо хранить наименьший порядковый номер отправленного неподтвержденного байта и порядковый номер следующего передаваемого байта. В TCP предусмотрена буферизация пакетов, полученных с нарушением порядка следования. TCP использует механизм выборочного подтверждения, позволяющий принимающей стороне индивидуально квитировать сегменты, нарушающие порядок следования, а не выдавать общую квитанцию для последнего корректно принятого сегмента.
Контроль потока: На обоих хостах между которыми установлено TCP-соединение, имеются приемные буферы. Приложение считывает из них данные в произвольный момент времени. Если частота поступления данных в буфер превышает частоту их считывания приложением, то через некоторый интервал времени возникает угроза переполнения буфера. Для избежания этого TCP предоставляет приложениям службу контроля потока, призванную контролировать , чтобы частота передачи данных соответствовала частоте из считывания принимающим приложением. Скорость передачи может быть принудительно снижена - механизм контроля перегрузок. TCP обеспечивает контроль приема с помощью переменной, называемой окном приема, поддерживается обеими сторонами.
Управление потоком в TCP.
На обоих хостах между которыми установлено TCP-соединение, имеются приемные буферы. Приложение считывает из них данные в произвольный момент времени. Если частота поступления данных в буфер превышает частоту их считывания приложением, то через некоторый интервал времени возникает угроза переполнения буфера. Для избежания этого TCP предоставляет приложениям службу контроля потока, призванную контролировать , чтобы частота передачи данных соответствовала частоте из считывания принимающим приложением. Скорость передачи может быть принудительно снижена - механизм контроля перегрузок. TCP обеспечивает контроль приема с помощью переменной, называемой окном приема, поддерживается обеими сторонами, размер буфера хранится в переменной RcvBuffer.
LastByteRead - номер последнего байта потока данных, считанного из буфера процессом В.
LastByteRcvd - номер последнего байта потока данных, полученного от передающей стороны и помещенного в буфер.
Чтобы входной буфер не мог переполниться, необходимо: LastByteRcvd - LastByteRead <= RcvBuffer.
Значение окна приема RcvWindow равно объему свободного места в буфере:
RcvWindoq = RcvBuffer - [LastByteRcvd - LastByteRead]
значение этой переменной динамически меняется.
Как реализовано: хост В сообщает А сколько свободного места имеется в его приемном буфере, помещая значение переменной RcvWindow в поле окна приема каждого сегмента, отправляемого А. Начальные значения RcvWindoq = RcvBuffer.
А поддерживает 2 переменные LastByteSent и LastByteAcked - номер последнего отправленного и последнего квитированного байтов. LastByteSent - LastByteAcked - размер неподтвержденных данных, переданных от А к В. при
LastByteSent и LastByteAcked <= RcvWindow
хост А может гарантировать, что приемный буфер хоста В не переполнится.
Проблема: предположим, что приемный буфер хоста В оказался заполненным, тогда RcvWindow = 0, возможно, что в этот момент В не имеет данных для передачи, ТО А не получит сведений об освободившемся пространстве буфера и не сможет осуществлять дальнейшую передачу данных. Предусмотрена периодическая генерация хостом А сегментов, содержащих 1 байт, если окно приема В имеет нулевое значение, эти сегменты квитируются принимающей стороной и при освобождении места в буфере, ненулевое значение RcvWindow будет отправлено вместе с одной из квитанций.