Что такое синдром глупого окна - объяснение и профилактика

Данные(Data) передаются по сети и Интернету(Internet) с использованием TCP/IP Protocol . TCP / TCP/IP не идеален, но его проще реализовать по сравнению с другими протоколами, предназначенными для передачи данных… такими как модель ISO OSI . Как и любая техническая вещь, TCP/IP также имеет некоторые недостатки, и синдром глупого окна(Silly Window Syndrome) является порождением одного из этих недостатков. Чтобы понять, что такое синдром глупого окна(Silly Window Syndrome) или SWS , вам сначала нужно понять лежащий в основе механизм передачи данных в TCP/IP .

Синдром глупого окна

синдром глупого окна

Понимание окна и его размера

Когда две точки взаимодействуют по TCP/IP , используется механизм подтверждения. Этот механизм подтверждения является причиной синдрома глупого окна(Silly Window Syndrome) , как объясняется далее. Баллы могут относиться к двум компьютерам, клиентскому и серверному и т. д.

SWS is caused by the receiver advancing the right window edge whenever it has any new buffer space available to receive data and by the sender using any incremental window, no matter how small, to send more data. The result can be a stable pattern of sending tiny data segments, even though both sender and receiver have a large total buffer space for the connection, says MSDN.

Когда компьютер, скажем A, посылает пакет данных другому компьютеру B, последний должен подтвердить и ответить, что он получил пакет данных. Наряду с подтверждением он также должен отправить размер буфера, выделенного для этого потока связи. Обычно это количество байтов, освобождаемых для связи.

Таким образом, когда B говорит, что 100B доступно для следующего сообщения, 100B — это окно в синдроме глупого окна(Silly Window Syndrome) . То есть это размер буфера. Со своим недостатком механизм TCP/IP может уменьшать размер буфера для каждой связи/данных, поступающих от A. То есть всякий раз, когда A отправляет сообщение, B предполагает, что размер буфера уменьшен, и отправляет меньшее число. Таким образом, размер окна продолжает уменьшаться, и в какой-то момент связь просто прекращается, когда B отправляет 0B в качестве размера окна.

Как работает синдром глупого окна

Согласно приведенному выше примеру A и B, если B отправляет 1000 байт в качестве размера окна, A разделит его на два 500 байт и отправит два пакета по 500 байт. После получения первого пакета B отправит подтверждение о том, что 500B доступно для окна, поскольку второй пакет еще не получен. A предполагает, что 500 байт — это размер окна, и последовательно отправляет два пакета по 250 байт. В то время как в B используется 500B и только что получено 500, он отправит 0B как доступный. В этот момент A будет считать, что окно недоступно, хотя может случиться так, что буфер пуст, так как процессор израсходовал там данные. A по-прежнему будет отправлять меньший пакет, чтобы увидеть, доступно ли какое-либо окно. Если содержимое буфера в B еще не удалено, он все равно получит 0 в качестве ответа/подтверждения.

Таким образом, размер окна продолжает уменьшаться, поскольку B отправляет подтверждение каждый раз, когда он получает пакет от A. Этот размер обычно меньше, чем предыдущее подтверждение, поскольку B получает пакеты данных частями. Не было бы проблем, если бы A мог отправить пакет, достаточно большой, чтобы покрыть размер буфера на B за один раз. Но для этого потребуются дополнительные механизмы и, следовательно, синдром глупого окна(Silly Window Syndrome) . Связь прекращается после того, как А получает 0 два или три раза.

Как предотвратить синдром глупого окна(Silly Window Syndrome) ( SWS )

Существует простой алгоритм, который необходимо реализовать, чтобы избавиться от SWS . Получив начальный пакет, B отправляет половину действительно доступного пространства в качестве окна. Это заставит A отправлять пакеты меньшего размера. Следовательно, когда пакеты становятся слишком маленькими, B отправляет общий размер буфера, чтобы A мог снова начать отправлять большие байты данных.

Другими словами, если доступно 1000 байт, B отправляет 500 байт в качестве подтверждения. Соответственно, A отправляет 250B x ​​2 пакета. Для этого A получает 100B в качестве подтверждения. Когда он получает пакет 50B, B отправляет 1000B - 50B в A. Это делает весь диалог снова работоспособным. Это может вызвать небольшую задержку в обработке, но предотвратит возникновение синдрома глупого окна(Silly Window Syndrome) и остановку всего разговора.

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

Хотя, возможно, я использовал слова «окно» и «буфер» как синонимы. Я не имею в виду никакой разницы между ними. В исследованиях SWS буфер — это окно.



About the author

Я iOS-разработчик с более чем 10-летним опытом. Я специализируюсь на разработке приложений для iPhone и iPad. У меня есть опыт создания пользовательских потоков, создания пользовательских комплектов разработки (CDK) и работы с различными средами разработки приложений. В своей предыдущей работе я также разработал инструменты для управления магазином приложений Apple, в том числе инструмент управления продуктами и инструмент отправки приложений.



Related posts