10.13.10 Снижение перегрузок за счет уменьшения пересылаемых по сети данных
10.13.10 Снижение перегрузок за счет уменьшения пересылаемых по сети данных
Сокращение объема пересылаемых данных несколько сложнее, чем рассмотренные выше механизмы. Оно начинает работать, как и уже упомянутый медленный старт. Но, поскольку устанавливается граница для уровня трафика, который может в начальный момент привести к проблемам, будет реально замедляться скорость обмена вследствие увеличения размера нагрузочного окна по одному сегменту. Нужно установить значения границы для реального сокращения скорости отправки. Сначала вычисляется граница опасности (danger threshold):
Граница – 1/2 minimum (текущее нагрузочное окно, приемное окно партнера)
Если полученная величина будет более двух сегментов, ее используют как границу. Иначе размер границы устанавливается равным двум сегментам. Полный алгоритм восстановления требует:
? Установить размер нагрузочного окна в один сегмент.
? Для каждого полученного ACK увеличивать размер нагрузочного окна на один сегмент, пока не будет достигнута граница (что очень напоминает механизм медленного старта).
? После этого с каждым полученным ACK к нагрузочному окну добавлять меньшее значение, которое выбирается на основе скорости увеличения по одному сегменту для времени цикла (увеличение вычисляется как MSS/N, где N — размер нагрузочного окна в сегментах).
Сценарий для идеального варианта может упрощенно представить работу механизма восстановления. Предположим, что приемное окно партнера (и текущее нагрузочное окно) имело до выявления тайм-аута размер в 8 сегментов, а граница определена в 4 сегмента. Если принимающее приложение мгновенно читает данные из буфера, размер приемного окна останется равным 8 сегментам.
? Отправляется 1 сегмент (нагрузочное окно = 1 сегмент).
? Получен ACK — отправляется 2 сегмента.
? Получен ACK для 2 сегментов — посылается 4 сегмента, (достигается граница).
? Получен ACK для 4 сегментов. Посылается 5 сегментов.
? Получен ACK для 5 сегментов. Посылается 6 сегментов.
? Получен ACK для 6 сегментов. Посылается 7 сегментов.
? Получен ACK для 7 сегментов. Посылается 8 сегментов (нагрузочное окно по размеру снова стало равно приемному окну).
Поскольку во время повторной пересылки по тайм-ауту требуется подтверждение приема всех отправленных данных, процесс продолжается до достижения нагрузочным окном размера приемного окна. Происходящие события показаны на рис. 10.20. Размер окна увеличивается экспоненциально, удваиваясь во время периода медленного старта, а по достижении границы увеличение происходит по линейному закону.
Рис. 10.20. Ограничение скорости пересылки во время перегрузки