RFC: 1122
Оригинал: Requirements for Internet Hosts - Communication Layers
Категория: Стандарт Интернета
Дата публикации:
Автор:
Перевод: Николай Малых
4.2.3.3 Когда передавать Window Update

Протокол TCP должен включать алгоритм предотвращения SWS на приемной стороне [RFC813].

  • Реализация
  • Алгоритм предотвращения SWS на приемной стороне определяет когда может быть анонсировано расширение правого края окна (обновление окна — updating the window). Этот алгоритм используют совместно с задержкой подтверждений ACK (см. 4.2.3.2) для определения момента передачи получателю сегмента ACK, содержащего текущее окно. При описании мы будем использовать обозначения, принятые в RFC 793 (см. рис. 4 и 5 в этом документе).

    Решением для приемной стороны является предотвращение анонсов смещения правого края окна RCV.NXT+RCV.WND с небольшим инкрементом даже при получении из сети мелких сегментов.

    Предположим, что на приемной стороне имеется буфер RCV.BUFF. В любой момент времени RCV.USER октетов из этого буфера может быть связано с данными, которые уже получены и подтверждены, но еще не восприняты пользовательским процессом. Когда соединение находится в статичном состоянии, RCV.WND = RCV.BUFF и RCV.USER = 0.

    Сохранение правого края окна неподвижным при получении и подтверждении данных требует чтобы приемник анонсировал пространство, которое меньше его реального буфера, т. е., приемник должен задавать значение RCV.WND, которое позволит сохранить постоянной сумму RCV.NXT+RCV.WND при возрастании RCV.NXT. Таким образом, общее пространство буфера RCV.BUFF в общем случае делится на три части:

        |<------- RCV.BUFF ---------------->|
             1             2            3
    ----|---------|------------------|------|----
               RCV.NXT               ^
                                  (Fixed)
    1. RCV.USER — полученные, но не воспринятые приложением данные;
    2. RCV.WND — пространство, анонсируемое отправителю;
    3. Reduction — доступное, но еще не анонсированное пространство.

    Предлагаемый алгоритм предотвращения SWS для приемной стороны сохраняет фиксированное значение RCV.NXT+RCV.WND до тех пор, пока выполняется условие:

    RCV.BUFF - RCV.USER - RCV.WND  >=
    
           min( Fr * RCV.BUFF, Eff.snd.MSS )

    гле Fr — часть, рекомендуемое значение которой составляет 1/2, а Eff.snd.MSS — эффективное значение MSS для передачи в данном соединении (см. 4.2.2.6). При выполнении условий неравенства устанавливается RCV.WND = RCV.BUFF-RCV.USER.

    Отметим, что общим эффектом этого алгоритма является анонсирование RCV.WND с инкрементом Eff.snd.MSS (для разумных буферов на приемной стороне Eff.snd.MSS < RCV.BUFF/2). Отметим также, что приемная сторона должна использовать свое значение Eff.snd.MSS, предполагая, что оно совпадает со значением для передающей стороны.

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