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

4.4. Завершение отсчета таймера обратной связи

В этом параграфе описано поведение отправителя при завершении отсчета таймера обратной связи. Отсчет этого таймера может завершиться в результате продолжительного бездействия или по причине отбрасывания пакетов обратной связи в сети.

В этом параграфе используется переменная recover_rate. Если отправитель TFRC бездействует с момента запуска таймера обратной связи, допустимая скорость передачи не устанавливается ниже recover_rate. В этой спецификации для recover_rate устанавливается значение initial_rate (см. параграф 4.2). В будущих вариантах спецификации могут быть заданы другие значения recover_rate.

При завершении отсчета таймера обратной связи отправитель должен:

  1. Снизить дозволенную скорость передачи вдвое.

    Если в момент завершения отсчета таймера у отправителя имелось хотя бы одно измерение RTT, допустимая скорость передачи снижается путем изменения X_recv_set в соответствии с приведенным ниже псевдокодом (включая п. 2)). В общем случае скорость передачи ограничена значением не более двух X_recv. Изменение X_recv_set ограничивает скорость передачи, но позволяет отправителю выполнять процедуру замедленного старта с удвоением скорости передачи в каждый период RTT, если пакеты обратной связи не говорят о потерях.

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

    В общем случае допустимая скорость передачи снижается вдвое в ответ на завершение отсчета таймера обратной связи. Детали приведенного ниже псевдокода зависят от состояния отправителя - процесс замедленного старта, предотвращение перегрузки с ограничением по X_recv или предотвращение перегрузки с ограничением на основе уравнения пропускной способности.

    X_recv = max (X_recv_set);
    If (у отправителя нет значения RTT, не было получено пакетов
        обратной связи и не наблюдалось бездействия с момента
        запуска таймера обратной связи) {
        // У отправителя пока нет значений X_Bps и recover_rate.
        // Дозволенная скорость снижается вдвое.
        X = max(X/2, s/t_mbi);
    } Else if (((p>0 && X_recv < recover_rate) or (p==0 && X < 2 * recover_rate))
        и отправитель бездействовал с момента запуска таймера обратной связи) {
        // Не снижать вдвое дозволенную скорость передачи.
        Ничего не делать
    } Else if (p==0) {
        // Еще нет значения X_Bps.
        // Снизить вдвое дозволенную скорость передачи.
        X = max(X/2, s/t_mbi);
    } Else if (X_Bps > 2*X_recv)) {
        // Значение 2*X_recv уже ограничивает скорость передачи.
        // Снизить вдвое дозволенную скорость передачи.
        Update_Limits(X_recv;)
    } Else {
        // Скорость передачи ограничена X_Bps, а не X_recv.
        // Снизить вдвое дозволенную скорость передачи.
        Update_Limits(X_Bps/2);
    }

    Значение s/t_mbi ограничивает снижение скорости (по крайней мере 1 пакет за 64 секунды).

    Процедура Update_Limits() использует переменную timer_limit для ограничения скорости передачи, рассчитанной по завершению отсчета таймера обратной связи, как показано ниже:

    Update_Limits(timer_limit):
        If (timer_limit < s/t_mbi)
            timer_limit = s/t_mbi;
        Заменить содержимое X_recv_set одним элементом timer_limit/2;
        Пересчитать X в соответствии с п. 4) параграфа 4.3;
  2. Запустить таймер обратной связи на max(4*R, 2*s/X) секунд.

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

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

Снижение отправителем TFRC скорости передачи по таймеру обратной связи похоже на уменьшение размера окна насыщения TCP по истечении каждых RTO периода бездействия для TCP с поддержкой Congestion Window Validation [RFC2861].

2007 - 2017 © Русские переводы RFC, IETF, ISOC.