Опубликован: 28.09.2007 | Уровень: специалист | Доступ: платный
Лекция 3:

Протокол передачи команд и сообщений об ошибках (ICMP). Протоколы DCCP и TFRC

Истечение времени таймера nofeedback

Если время таймера nofeedback истекает, отправитель должен выполнить следующие действия:

  1. уменьшить скорость передачи вдвое. Если отправитель получил сообщение обратной связи от получателя, применяется модификация кэшированной копии X_recv. Так как скорость передачи ограничена 2 X_recv, модификация X_recv ограничивает текущее значение скорости передачи, позволяет отправителю начать медленный старт, удваивая скорость передачи для каждого RTT, если сообщения обратной связи подтверждают отсутствие потерь.

    Если (X_calc > 2 \times X_recv)

    X_recv = max(X_recv/2, s/(2 \times t_mbi));

    В противном случае

    X_recv = X_calc/4;

    Выражение s/(2 \times t_mbi) ограничивает частоту одним пакетом каждые 64 секунды в случае постоянного отсутствия обратной связи.

  2. значение X должно быть повторно вычислено, как это описано в пункте (4) выше.

    Если истекает время таймера nofeedback, когда отправитель еще не имеет реального значения RTT и не получил еще сообщения обратной связи от получателя, тогда шаг (1) может быть обойден, а скорость передачи сразу сокращена вдвое:

    X = max(X/2, s/t_mbi)

  3. перезапускается таймер nofeedback на время max(4 \times R, 2 \times s/X) секунд.

    Заметим, что когда отправитель прерывает передачу, получатель прекратит отправку сообщений обратной связи. Это вызовет запуск таймера nofeedback и уменьшение X_recv. Если отправитель позднее начинает передачу снова, X_recv ограничит скорость передачи и будет реализовываться обычный медленный старт, пока скорость передачи не достигнет X_calc.

    Если отправитель был пассивен с момента таймаута nofeedback, а X_recv меньше четырех пакетов за RTT, тогда X_recv не должно сокращаться вдвое в ответ на истечение времени таймаута. Это гарантирует, что разрешенная скорость передачи никогда не будет сокращена ниже двух пакетов за RTT после периода пассивности.

Предотвращение осцилляций

Для предотвращения осцилляций полезно уменьшить скорость передачи отправителя - это приведет к сокращению длины очереди и, следовательно, RTT. Чтобы достичь этого, отправитель поддерживает оценку долгосрочного значения RTT и модифицирует скорость передачи в зависимости от того, на сколько отличается последнее значение RTT от этой оценки. Долгосрочное значение R_sqmean определяется следующим образом:

если до этого не получено сообщения обратной связи

R_sqmean = sqrt(R_sample);

в противном случае

R_sqmean = q2*R_sqmean + (1q2)*sqrt(R_sample);

Таким образом, R_sqmean представляет собой экспоненциально взвешенное среднее значение квадратного корня из RTT. Константа q2 должна быть установлена аналогично q, рекомендуемое значение равно 0.9.

Базовое значение скорости передачи X отправитель получает из функции пропускной способности. Далее вычисляется модифицированное мгновенное значение частоты X_inst:

X_inst = X * R_sqmean / sqrt(R_sample) ;

Когда sqrt(R_sample) больше, чем R_sqmean, тогда очередь обычно растет, а скорость передачи должна быть понижена.

Диспетчеризация отправки пакетов

Так как TFRC базируется на скорости передачи, а операционные системы обычно не могут диспетчеризовать события достаточно точно, необходимо воспользоваться любой возможностью отправки пакетов, чтобы обеспечить нужную среднюю скорость передачи. Таким образом, обычный цикл отправки обеспечит правильный межпакетный интервал, t_ipi:

t_ipi = s/X_inst ;

Когда отправитель начинает передачу в момент t_0, он вычисляет t_ipi и рассчитывает номинальное время посылки для первого пакета t_1 = t_0 + t_ipi. Когда приложение переходит в состояние простоя, оно проверяет текущее время, t_now и затем запрашивает повторную диспетчеризацию после ( t_ipi - (t_now - t_0) ) секунд. Когда приложение диспетчеризовано, оно снова проверяет текущее время, t_now. Если ( t_now > t_1 - delta ), посылается первый пакет.

Теперь может быть вычислено новое значение t_ipi, которое используется для вычисления номинального времени отправки t_2 пакета 2: t2 = t_1 + t_ipi. Далее процесс повторяется для каждого последующего пакета.

В некоторых случаях, когда номинальное время отправки следующего пакета t_i вычислено, может так случиться, что t_now > t_i - delta. В таком варианте пакет должен быть послан немедленно. Таким образом, если операционная система имеет таймер с низким разрешением, а скорость передачи высока, тогда TFRC может посылать короткие группы пакетов, которые разделены интервалами, соответствующими дискретам разрешения таймера ОС.

Параметр delta служит для того, чтобы придать некоторую гибкость при выборе момента отправки пакета. Если операционная система имеет разрешение таймера t_gran секунд, тогда значение delta вычисляется согласно:

delta = min(t_ipi/2, t_gran/2) ;

t_gran равно 10мсек для многих систем Unix. Если t_gran неизвестно, можно уверенно предполагать значение 10мсек.

Вычисление частоты потери пакетов (p)

Получение точных и стабильных результатов измерений частоты потерь является крайне важным для протокола TFRC. Измерение частоты потерь выполняется получателем, основываясь на детектировании потерь помеченных пакетов. Делается это путем регистрации порядковых номеров полученных пакетов.

Детектирование потерянных помеченных пакетов

TFRC предполагает, что все пакеты имеют порядковые номера, которые инкрементируются на 1 при отправке очередного пакета.

В рамках протокола TFRC предполагается, что, если потерянный пакет посылается повторно, он получает новый порядковый номер, а не номер потерянного пакета. Если транспортный протокол требует повторной передачи с первоначальным порядковым номером, разработчик протокола должен позаботиться о том, чтобы различать задержавшийся и повторно переданный пакеты и детектировать потери в случае повторной передачи.

Получатель поддерживает структуру данных, которая позволяет отслеживать, какие пакеты пришли, а какие нет. Предполагается, что структура данных состоит из списка номеров пакетов, которые пришли, и временных меток, указывающих на время прихода.

Потеря пакета детектируется при получении, по крайней мере, трех пакетов с номерами больше, чем у потерянного. Требование трех пакетов идентично регламентации протокола TCP и делает TFRC более устойчивым в случае перепутывания порядка следования пакетов. В противоположность TCP, если пакет приходит поздно (после прибытия 3 последующих пакетов) в TFRC, опоздавший пакет может заполнить пробел в рекорде приема TFRC и получатель может повторно вычислить частоту потери пакетов.

Для соединений ECN получение помеченного пакета воспринимается как сигнал перегрузки, не дожидаясь прихода последующих пакетов.

Работа с предысторией потерь пакетов

TFRC требует, чтобы система была устойчива в отношении потери нескольких пакетов подряд. Здесь имеется аналогия с TCP, где обычно выполняется сокращение CWND только вдвое за время одного RTT. Таким образом, получатель должен отслеживать историю потери пакетов в рамках рекорда событий, где событием считается потеря одного или более пакетов за RTT. Чтобы выполнить это отслеживание, получатель должен знать, какое значение RTT использовать, - эти данные периодически предоставляет отправитель в виде управляющей информации, присоединенной к пакетам данных. TFRC не чувствителен к тому, как выполнены измерения RTT, но для этих целей рекомендуется применять RTT, измеренное отправителем.

Чтобы определить, является ли потерянный, помеченный пакет началом нового случая потери или его следует отнести к уже зарегистрированному случаю, нужно сравнить порядковый номер и временную метку пакета, доставленного получателю. Для помеченного пакета S_new его время приема T_new может быть записано непосредственно. Для потерянного пакета номинальное "время прибытия" можно получить методом интерполяции. Пусть:

S_loss равно порядковому номеру потерянного пакета;

S_before равно порядковому номеру последнего потерянного пакета, который должен был прибыть до S_loss ;

S_after - порядковый номер первого пакета, который должен прийти после S_loss ;

T_before является временем приема S_before ;

T_after является временем прихода S_after.

Заметим, что T_before может оказаться до или после T_after изза смены порядка прихода пакетов. Для потерянного пакета S_loss можно интерполировать номинальное "время прибытия", зная времена S_before и S_after. Таким образом:

T_loss = T_before + ( (T_after - T_before)* (S_loss - S_before)/(S_after - S_before) ) ;

Заметим, что если последовательность номеров оказалась разорвана между S_before и S_after, то порядковые номера должны быть модифицированы с учетом этого, прежде будут начаты вычисления. Если наибольший возможный порядковый номер равен S_max и S_before > S_after, то замена каждого порядкового номера S на S' = (S + (S_max + 1)/2) mod (S_max + 1) вполне достаточна.

Если потерянный пакет S_old был идентифицирован как начинающий предыдущее событие потери и S_new только что определено как потерянное, то мы интерполируем номинальные времена прибытия S_old и S_new как T_old и T_new соответственно.

Если T_old + R >= T_new, то S_new является частью существующего события потери. В противном случае S_new - первый пакет нового события потери.

Интервал между случаями потери пакетов

Если интервал потерь A начинается с порядкового номера пакета S_A, а следующий интервал потерь B начинается с порядкового номера пакета S_B, то число пакетов в интервале потерь A равно ( S_B - S_A ).

Среднее время между потерями

Чтобы вычислить частоту потерь p, нужно сначала определить средний период потерь. Это делается с помощью фильтра, который взвешивает n последних интервалов событий потери таким образом, что измеренная частота событий потерь меняется плавно.

Веса для w_0 - w_(n1) вычисляются следующим образом:

если ( i < n/2 )

w_i = 1;

в противном случае

w_i = 1 - (i - (n/2 - 1))/(n/2 + 1);

таким образом, если n=8, величины от w_0 до w_7 равны:

1.0, 1.0, 1.0, 1.0, 0.8, 0.6, 0.4, 0.2

Величина n для числа интервалов потери, используемая при вычислениях частоты потерь, определяет скорость реакции TFRC на изменения уровня перегрузки. Как это стандартизовано в настоящее время, TFRC не должен применяться для величин n значительно больше 8, для трафика, который может конкурировать в Интернет с TCP.

При вычислении среднего интервала потерь мы должны решить, следует ли включать самое последнее событие потерь. Мы это делаем только в случае, когда оно достаточно велико, чтобы увеличить средний интервал потерь.

Таким образом, если самыми последними интервалами потерь являются I_0 до I_n, где I_0 - интервал с момента самого последнего случая потерь, то мы вычисляем средний интервал потери I_mean как:

I_tot0 = 0;
      I_tot1 = 0;
      W_tot = 0;
      for (i = 0 to n1) { I_tot0 = I_tot0 + (I_i * w_i);  W_tot = W_tot + w_i;  }
      for (i = 1 to n) { I_tot1 = I_tot1 + (I_i * w_(i1)); }
      I_tot = max(I_tot0, I_tot1);
      I_mean = I_tot/W_tot;

Частота потери пакетов p равна:

p = 1 / I_mean;

Каролина Попович
Каролина Попович
Евгений Виноградов
Евгений Виноградов

Прошел экстерном экзамен по курсу перепордготовки "Информационная безопасность". Хочу получить диплом, но не вижу где оплатить? Ну и соответственно , как с получением бумажного документа?

виктор виноградов
виктор виноградов
Россия, Курская область
Евгений Миловзоров
Евгений Миловзоров
Россия, Пенза, ПГУ, 2004