48. Протокол ТСР Westwood: особливості реалізації, переваги та недоліки.

Среди множества предлагаемых моделей реализации ТСР можно выделит еще одну - TCPW (TCP Westwood). Эта модель позволяет достичь большей эффективности использования канала. В этой модификации протокола используется новый алгоритм управления окном перегрузки, основанный на оценке потока данных (RE - Rate Estimation) и текущего значения полосы пропускания. На основе этих оценок производится вычисление cwin и ssthresh. Для больших произведений полоcы на RTT этот алгоритм может дать лучший результат, чем NewReno.

 

if(получено 3 DUPACK)

ssthresh = (BE*RTTmin)/seg_size;
if(cwin > ssthresh)     /* исключение перегрузки */

cwin=ssthresh;

endif
endif

 

где seg_size идентифицирует длину ТСР-сегмента в битах, а DUPACK -задублированное подтверждение, BE - (bandwidth estimation) оценка полосы. Заметим, что после получения n DUPACK следует повторная пересылка потерянных сегментов, как это делается в стандартном режиме быстрой повторной пересылке ТСР Reno. Окно ростет после установление его ширины равной ssthresh согласно правилам алгоритма быстрой повторной пересылки (cwin=cwin+1 при получении каждого ACK и делается равным ssthresh при получении ACK для новых данных). Следовательно, когда получено n DUPACK, мы достигли предела пропускной способности сети. window = BE × RTTmin.

Переход к фазе исключения перегрузки связан с плавным поиском доступного значения полосы пропускания канала. Значение RTTmin равно наименьшему значению измеренному протоколом ТСР. Заметим, что после установления ssthresh значение ширины окна перегрузки делается равным порогу медленного старта, только если cwin > ssthresh. В протоколе TCPW для оценки BE используются ACK. Для этого регистрируется частота ACK и измеряется объем данных, доставленных в единицу времени. bk=dk/DtkDtk = tk-tk-1, где tk время прихода k-го ACK отправителю, dk - длина подтвержденного сегмента.

В случае, когда потеря пакета индицируется истечением времени таймаута, значения cwin и sstresh устанавливаются согласно:

 

if(произошел таймаут RTO)

cwin=1;

ssthresh=(BE*RTTmin/seg_size;

if(ssthresh<2)

ssthresh=2;

endif
endif

 

В случае использования комбинированного алгоритма CRB (Combined RE/BE), где применен более сложный алгоритм оценки загрузки и доступной полосы пропускания, присвоение значений cwin и ssthresh производится согласно следующим соотношениям: (вариант потери с индикацией посредством присылки 3 DUPACK)

 

if(получено 3 DUPACK)

if(cwin/((RE*RTTmin)/seg_size>0)

/* сеть перегружена */

ssthresh = (RE*RTTmin)/seg_size;

else

/* перегрузки нет */

ssthresh = (BE*RTTmin)/seg_size;

endif

if(cwin> ssthresh)

/* исключение перегрузки */

cwin = ssthresh;

endif;
endif

 

В случае, когда потеря пакета индицируется по таймауту, значения cwin и ssthresh вычисляются следующим образом.

 

if(произошел таймаут RTO)
cwin=1;
ssthresh=(BE*RTTmin/seg_size;
if(ssthresh<2)
ssthresh=2;

endif;
endif

 

Заметим также, что объекты, вовлеченные в соединения, оказываются в определенной мере синхронизованными. Это связано с тем, что когда происходит любое столкновение, сопряженное с увеличением ширины окна, когда буфер полон, все приходящие ячейки, принадлежащие пакетам, отбрасываются. В предположении о постоянной готовности отправителя к передаче и о том, что временной разброс ячеек не превосходит время пересылки пакета во входном канале, все соединения будут передавать ячейки в течение времени транспортировки пакетов вовлеченных в столкновение. Следовательно, все соединения теряют пакеты и сокращают вдвое ширину окна в пределах RTT.

Помимо таймаута, в протоколе TCP предусмотрена еще одна возможность уведомления отправителя о потере сегмента. Получатель, контролируя номера приходящих сегментов и обнаружив потерю, может начать посылать двойные ACK для пакетов, следующих за потерянным сегментом. Приход таких дублированных ACK позволяет разрешить проблему до истечения времени таймаута RTO (смотри описание алгоритма TCP-reno). Понятно, что для последнего сегмента в сообщении этот метод не работает и остается только таймаут. Получения двойного ACK не является надежным сигналом потери пакета. Двойные ACK возникают и при смене маршрута обмена. По этой причине сигналом потери считается получение трех ACK пакетов подряд (сигнал быстрой повторной посылки сегмента - fast retransmit). В этом режиме при потере одиночного пакета (Fast Recovery) CWND устанавливается на три сегмента больше, чем значение ssthreshПосле получения сигнала ACK значение CWND становится равным ssthresh с дальнейшим линейным увеличением. Здесь приход очередного ACK увеличивает CWND на (MSS*MSS)/CWND. Область линейного увеличения CWND часто называется режимом исключения перегрузки (congestion avoidance) или AIMD (Additive Increase, Multiple Decrease).

 

Hosted by uCoz