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/Dtk; Dtk = 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; |
В случае, когда потеря пакета индицируется по таймауту, значения 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).