Разное

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

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

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

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

Что такое окно и его размер

Когда две точки обмениваются данными по TCP / IP, это включает механизм подтверждения. Этот механизм подтверждения является причиной синдрома глупого окна, как описано далее. Очки могут относиться к двум компьютерам, клиенту и серверу и т. Д.

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

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

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

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

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

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

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

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

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

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

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

Если вам нужна дополнительная информация, подробное объяснение доступно здесь, в tcpipguide.ком.

Как показать счетчик FPS в играх для Linux
Игры для Linux получили серьезный толчок, когда Valve объявила о поддержке Linux для клиента Steam и своих игр в 2012 году. С тех пор многие игры AAA ...
Как загрузить и играть в Sid Meier's Civilization VI в Linux
Введение в игру Civilization 6 - это современный подход к классической концепции, представленной в серии игр Age of Empires. Идея была довольно просто...
Как установить Doom и играть в него в Linux
Введение в Doom Серия Doom возникла в 90-х годах после выхода оригинальной Doom. Это мгновенно стал хитом, и с тех пор серия игр получила множество на...