Синдром "глупого окна"
Синдром "глупого окна"
Механизм подтверждения получения данных является ключевым в протоколе TCP. Стандарт указывает, что подтверждение должно быть передано без задержки, но не определяет конкретно, насколько быстро данные должны быть подтверждены, и объем подтверждаемых данных. К сожалению, корректная с точки зрения спецификации протокола, но неоптимальная реализация стратегии подтверждения приводит к неудовлетворительной работе механизма управления потоком данных (оконного механизма), что приводит к синдрому "глупого окна" (SWS).
Для иллюстрации этого явления рассмотрим передачу файла большого размера между двумя приложениями, использующими протокол TCP. Допустим, что модуль протокола осуществляет передачу сегментами, размер которых составляет 200 октетов. В начале передачи предлагаемое окно отправителя — 1000 октетов. Он полностью использует этот кредит, послав пять сегментов по 200 октетов каждый. После обработки первого полученного сегмента адресат отправляет подтверждение (сегмент ACK), которое также содержит обновленное значение предлагаемого окна. Предположим, что адресат передал полученные данные приложению, и таким образом его буфер приема вновь содержит 1000 байтов свободного места. Поэтому обновленное значение окна будет также равным 1000 октетов. Эта ситуация показана на рис. 6.15.
Рис. 6.15. Возникновение SWS
При получении подтверждения отправитель вычисляет доступное окно. Поскольку получение 800 октетов данных еще не подтверждено, значение доступного окна получается равным 200.
Рассмотрим теперь процесс возникновения SWS. Предположим, что отправитель вынужден передать сегмент размером 50 октетов (например, если приложение указало флаг PSH). Таким образом, он отправляет 50 байтов, и вслед за этим следующий сегмент, размером 150 октетов (поскольку размер доступного окна равен 200). Через некоторое время адресат получит 50 байтов, обработает их и подтвердит получение, не изменяя значения предлагаемого окна (1000 октетов). Однако теперь при вычислении доступного окна, отправитель обнаружит, что не подтверждены 950 байтов, и, таким образом, его окно равняется всего 50 октетам. В результате отправитель вновь вынужден будет передать всего 50 байтов, хотя приложение этого уже не требует.
Если мы продолжим анализировать передачу данных, то заметим, что рисунок транзакций будет периодически повторяться, т.е. отправитель будет вынужден периодически передавать сегмент необоснованно малого размера. Этот порочный круг не может быть разорван естественным образом. Происхождение сегментов малого размера очевидно: периодически у отправителя возникает необходимость разделить доступное окно на несколько мелких сегментов. При непрерывной передаче больших объемов данных такие ситуации будут время от времени возникать, оставляя неизгладимый след на характере транзакций. В результате это может привести к "засорению" сети множеством мелких пакетов в одну сторону и множеством подтверждений в другую.
Описанный синдром может также порождаться и принимающей стороной, которая анонсирует чересчур маленькие окна. Таким образом, для преодоления этих ситуаций, необходима модификация алгоритмов TCP как для отправления, так и для приема данных. К счастью, SWS легко избежать, обязав модули выполнять следующие правила:
1. Принимающая сторона не должна анонсировать маленькие окна. Говоря более конкретно, адресат не должен анонсировать размер окна, больший текущего (который скорее всего равен 0), пока последний не может быть увеличен либо на размер максимального сегмента (Maximum Segment Size, MSS), либо на ? размера буфера приема, в зависимости от того, какое значение окажется меньшим.
2. Отправитель должен воздержаться от передачи, пока он не сможет передать сегмент максимального размера или сегмент, размер которого больше половины максимального размера окна, который когда-либо анонсировался принимающей стороной.
Однако как мы уже заметили, анализируя причины возникновения SWS, поспешные подтверждения полученных данных сыграли не последнюю роль в этом процессе. С одной стороны, немедленное подтверждение позволяет постоянно держать отправителя "в курсе дела", тем самым избегая ненужных повторных передач. Подтверждение также приводит к смещению окна, и таким образом, позволяет отправителю продолжить передачу данных. С другой стороны, немедленное подтверждение может привести к возникновению SWS и дополнительным накладным расходам.
Хорошим компромиссом между немедленным и отложенным подтверждением можно считать следующую схему. При получении сегмента адресат не отправляет подтверждение, если, во-первых, сегмент не содержит флага PSH (дающего основание полагать, что вслед за полученным сегментом вскоре последуют дополнительные данные), и, во-вторых, отсутствует необходимость отправки обновленного значения окна.
Тем не менее получатель должен установить таймер, который позволит послать подтверждение, если в передаче данных произошел определенный перерыв, что может быть вызвано, например, потерей сегментов.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
10.13.2 Синдром "бестолкового окна"
10.13.2 Синдром "бестолкового окна" В первых реализациях TCP/IP разработчики столкнулись с феноменом синдрома "бестолкового окна" (Silly Window Syndrome — SWS), который проявлялся достаточно часто. Для понимания происходящих событий рассмотрим следующий сценарий, приводящий к
Китайский синдром
Китайский синдром Летом 2005 года Билл Гейтс и Microsoft готовились к наступлению. Они не могли позволить Google и дальше расти такими же темпами. Гейтс создал в Microsoft группу, члены которой должны были сосредоточиться исключительно на конкуренции с Google. Группа представила
Синдром Диогена
Синдром Диогена Этот титан древнегреческой мысли имел обыкновение изредка выбираться из своей обустроенной бочки и шататься с фонарем по местному базару, пугая случайных прохожих дикими воплями «Ищу человека!». Почтенный философ преуспел лишь отчасти – в учебники
Синдром Гриффина
Синдром Гриффина Почтенный уэллсовский герой, как мы помним, добровольно довел до максимума коэффициент прозрачности собственной шкуры. А впоследствии искренне недоумевал, почему его, такого исключительного и талантливого, окружающий плебс в упор замечать не хочет. «Я
Синдром Демьяна
Синдром Демьяна Помните «демьянову уху» из басни Крылова? Вроде бы всем хорош был этот супчик… Да вот только с дозировкой достославный кулинар малость перемудрил. Что и привело к вполне понятным последствиям – «синдром отторжения» во всей красе.Мораль сей басни проста
Синдром Торопыжки
Синдром Торопыжки Древний и очень умный грек Зенон придумал когда-то знаменитый парадокс о быстроногом Ахилле, который никогда не обгонит черепаху, ползущую на метр впереди. Пока обладатель уникальной пяты пробежит этот метр, черепаха проползет полметра, преодолел
Синдром Робинзона
Синдром Робинзона Душа заброшенного на необитаемый остров моряка взалкала общения – и начал несчастный Робинзон лепить себе друзей. Из того, что было, – от не слишком интеллектуальных попугаев с козами, до подвернувшегося под руку дикаря. Правда, в своем естественном
Синдром Лермонтова
Синдром Лермонтова Одно из стихотворений классика (из тех, что не проходят в школах) звучит так: Делись со мною тем, что знаешь, И благодарен буду я. Но ты мне душу предлагаешь; На кой мне черт душа твоя!.. Эгоистично? Грубо? Однако именно такой схеме соответствует львиная
Синдром Нео
Синдром Нео Персонаж культового (хотя почему – непонятно) фильма братьев Вачовски долго и мучительно путал виртуальность с реальностью… Причем запутать он сумел не только себя, но и миллионы следящих за его похождениями зрителей, многие из которых до сих пор
Синдром компьютерных игр
Синдром компьютерных игр Целью покупки большинства домашних компьютеров является использование их в качестве развлекательной платформы. В первую очередь это игры. Синдром зависимости от компьютерных игр до сих пор не исследован, и при его изучении можно столкнуться с
Слуховые окна и окна в крыше
Слуховые окна и окна в крыше Фактически наш дом, с конструктивной точки зрения, принял уже вполне законченный вид. Однако попробуем добавить к нему еще некоторые элементы, которые хоть и не обязательны, но нередко встречаются в различных коттеджах. Сначала построим одно
Синдром запястного канала
Синдром запястного канала Синдром запястного канала в целом является травмой запястья. Для распознавания его сущности, разберемся в физиологии. Запястье — это место соединения лучевой и локтевой костей (костей предплечья) и восьми костей кисти (мелких костей ладони).
Компьютерный зрительный синдром
Компьютерный зрительный синдром Новое в современной медицине заболевание – компьютерный зрительный синдром – уже стало профессиональным для всех, кто проводит за компьютером много часов в день. Глаза, которые практически постоянно смотрят на монитор с небольшого
Синдром хронической усталости
Синдром хронической усталости В последнее время все больше людей, живущих в крупных городах, обращаются к врачам с жалобами на усталость, быструю утомляемость, сонливость и общую слабость. Часто эти ощущения сопровождают расстройства нервной системы, нарушения
Синдром фальшивых данных
Синдром фальшивых данных Еще одна коварная проблема с океаном информации – это то, что я называю «синдром фальшивых данных» [false data syndrom]. Поскольку большинство данных в этом океане информации корректно, мы все предрасположены верить, что они корректны полностью –