RFC: 5348
Оригинал: TCP Friendly Rate Control (TFRC): Protocol Specification
Предыдущие версии: RFC 3448
Категория: Предложенный стандарт
Дата публикации:
Авторы: , , ,
Перевод: Николай Малых

4.3. Поведение отправителя при получении пакета обратной связи

Отправитель знает текущее значение допустимой скорости передачи X и поддерживает оценку текущего времени кругового обхода R. Отправитель также поддерживает параметр X_recv_set, включающий несколько недавних значений X_recv (обычно два).

Инициализация.X_recv_set инициализируется одним значением Infinity. Возможна инициализация X_recv_set взамен Infinity достаточно большим числом (например, наибольшим целым числом в системе).

При получении отправителем пакета обратной связи в момент t_now (текущее время в секундах) должны быть выполнены следующие операции.

  1. Расчет нового значения периода кругового обхода по формуле:

    R_sample = (t_now - t_recvdata) - t_delay.

    Как было указано в параграфе 3.2.2, значение t_delay показывает время, затраченное на приемной стороне.

  2. Обновление оценки времени кругового обхода:

    If no feedback has been received before {
        R = R_sample;
    } Else {
        R = q*R + (1-q)*R_sample;
    }

    Точное значение постоянной q не имеет существенного значения для TFRC, но по умолчанию рекомендуется использовать значение 0,9.

  3. Обновление значения тайм-аута:

    RTO = max(4*R, 2*s/X)
  4. Обновление значения допустимой скорости передачи с использованием переменных t_mbi и recv_limit:

    • t_mbi — максимальный интервал снижения скорости 64 секунды.
    • recv_limit — предельное значение скорости передачи, рассчитанной из X_recv_set.

    Эта процедура также использует процедуры Maximize X_recv_set() и Update X_recv_set(), определенные ниже.

    Псевдокод процедуры обновления значения допустимой скорости имеет вид:

    If (если весь интервал, закрываемый пакетом обратной связи, характеризуется
          ограниченной передаче данных)) {
        If (пакет обратной связи говорит о новом факте потерь
                 или росте частоты потерь p) {
            уменьшить вдвое элементы X_recv_set;
            X_recv = 0.85 * X_recv;
            Maximize X_recv_set();
            recv_limit = max (X_recv_set);
        } Else {
            Maximize X_recv_set();
            recv_limit = 2 * max (X_recv_set);
        }
    } Else {                      // типичное поведение
        Update X_recv_set();
        recv_limit = 2 * max (X_recv_set);
    }
    If (p > 0) {          // фаза предотвращения перегрузки
        рассчитать X_Bps с использованием уравнения пропускной способности TCP
        X = max(min(X_Bps, recv_limit), s/t_mbi);
    } Else if (t_now - tld >= R) {
        // начальная процедура замедленного старта
        X = max(min(2*X, recv_limit), initial_rate);
        tld = t_now;
    }
  5. При использовании механизма подавления осцилляций рассчитывается мгновенная скорость передачи X_inst в соответствии с параграфом 4.5

  6. Таймер обратной связи сбрасывается и устанавливается на RTO секунд.

    Процедура максимизации X_recv_set сохраняет наибольший элемент X_recv_set и новое значение X_recv:

    Maximize X_recv_set():
        добавить X_recv к X_recv_set;
        удалить начальное значение Infinity из X_recv_set, если оно еще не удалено;
        установить текущее время в качестве временной метки наибольшего элемента;
        удалить все элементы, кроме наибольшего.

Процедура обновления X_recv_set сохраняет набор значений X_recv с временными метками из двух последних периодов кругового обхода.

Update X_recv_set():
    добавить X_recv к X_recv_set;
    Удалить из X_recv_set значения, не относящиеся к двум последним периодам RTT.
2007 - 2017 © Русские переводы RFC, IETF, ISOC.