Оценка времени оборота
Первый вопрос, который мы рассмотрим в контексте протокола TCP, — это вопрос об оценке времени оборота между передающей и принимающей сторонами. Под выборочным временем оборота (значение SampleRTT) будем понимать время, проходящее с момента передачи сегмента протоколу сетевого уровня (протоколу IP) передающей стороны до получения квитанции для этого сегмента. Вместо того чтобы измерять каждое значение SampleRTT, TCP делает измерение лишь для одного из переданных, но не квитированных сегментов. Таким образом, оказывается, что с периодичностью приблизительно в одно время оборота значение SampleRTT обновляется. Кроме того, SampleRTT никогда не измеряется для сегментов, передаваемых повторно (одно из упражнений, приведенных в конце этой главы, предлагает вам объяснить, почему).
Вследствие возможных перегрузок в маршрутизаторах на пути сегментов, а также изменения загрузок оконечных систем значение SampleRTT постоянно меняется. Это означает, что в любой момент времени оно может значительно отклониться от типичного значения. Для получения типичного значения необходимо некоторым способом усреднить величину SampleRTT. Для этого в протоколе TCP вводится величина EstimatedRTT, вычисляемая вместе с каждым новым значением SampleRTT по формуле
EstimatedRTT = (1 — а) х EstimatedRTT + а х SampleRTT.
Подобная запись похожа на оператор языка программирования: новое значение EstimatedRTT вычисляется с использованием старого значения и значения SampleRTT. Величину а рекомендуется (RFC 2988) принимать равной 0,125 (то есть 1/8); при этом формула принимает вид
EstimatedRTT = 0,875 х EstimatedRTT + 0,125 х SampleRTT
Таким образом, EstimatedRTT является весовым средним значением SampleRTT. В упражнениях, приведенных в конце главы, демонстрируется, что при использовании данной формулы наибольший вес имеют последние измерения значения SampleRTT. Это придает величине EstimatedRTT актуальность, поскольку она в большей степени отражает текущую ситуацию в сети, чем ее предыдущие состояния. В статистике подобные величины называют экспоненциальным весовым скользящим средним.
Термин «экспоненциальное» означает, что вес каждого значения SampleRTT экспоненциально убывает с появлением новых значений. В упражнениях, приведенных в конце главы, вам будет предложено извлечь экспоненциальный член из формулы EstimatedRTT.
На рис. 3.29 показаны значения SampleRTT и EstimatedRTT для TCP-соединения между хостами gaia.cs.umass.edu в штате Массачусетс и fantasia.eurecom.fr на юге Франции при а = 0,125. Как видно, график EstimatedRTT значительно сглажен по сравнению с графиком SampleRTT.
Кроме усредненного значения времени оборота полезно располагать мерой его изменчивости. В RFC 2988 описывается величина DevRTT как приближенное отклонение SampleRTT от EfstimatedRTT:
DevRTT = (1 — B) x DevRTT + B x | SampleRTT — EstimatedRTT |.
Обратите внимание на то, что DevRTT представляет собой экспоненциальное весовое скользящее среднее разности между SampleRTT и EstimatedRTT. Чем меньше разброс значений SampleRTT, тем меньшей является величина DevRTT.
Коэффициент Р рекомендуется считать равным 0,25.