Какво е синдром на глупав прозорец - обяснение и превенция

Данните(Data) се прехвърлят през мрежата и Интернет(Internet) с помощта на TCP/IP Protocol . 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.

Когато компютър, да речем А, изпрати пакет данни на друг компютър Б, последният трябва да потвърди и да отговори, че е получил пакета данни. Заедно с потвърждението, той също трябва да изпрати размера на буфера, отделен за тази комуникационна нишка. Това обикновено е броят на байтовете, освободени за комуникация.

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

Как работи синдромът на глупавия прозорец

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

По този начин размерът на прозореца продължава да намалява, тъй като B изпраща потвърждение всеки път, когато получи пакет от A. Този размер обикновено е по-малък от предишното потвърждение, тъй като B получава пакети с данни на части. Няма да има проблем, ако A може да изпрати пакет, достатъчно голям, за да покрие размера на буфера на B наведнъж. Но това ще изисква допълнителни механизми и оттам Синдром на глупав прозорец(Silly Window Syndrome) . Комуникацията спира, след като A получи 0 два или три пъти.

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

Има прост алгоритъм, който трябва да се приложи, за да се отървете от SWS . При получаване на първоначалния пакет, B изпраща половината от реално наличното пространство като прозорец. Това ще накара A да изпраща по-малки пакети. Следователно, когато пакетите станат твърде по-малки, B изпраща общия размер на буфера, така че A може да започне да изпраща отново по-големи байтове данни.

С други думи, ако 1000B е наличен, B изпраща 500B като потвърждение. Съответно, А изпраща 250B x ​​2 пакета. За това A получава 100B като потвърждение. Когато получи 50B пакет, B изпраща 1000B – 50B до A. Това прави целия разговор отново оперативен. Това може да предизвика малко забавяне на обработката, но ще предотврати появата на синдрома на глупавия прозорец(Silly Window Syndrome) и ще спре целия разговор.

За да обобщим, SWS се основава на размера на буфера, достъпен за получателя, и предполагаемия размер, изчислен от подателя. За да се предотврати SWS , се въвежда забавяне и умишлено по-малък размер на прозореца се възстановява, докато размерът на пакета стане твърде малък. След това получателят разкрива действително наличния размер на прозореца. Целият процес продължава да се повтаря, докато комуникацията приключи.

Въпреки че може да съм използвал думите прозорец и буфер взаимозаменяемо. Нямам предвид никаква разлика между тях. В проучванията на SWS буферът е прозорецът.



About the author

След близо 20 години в технологичната индустрия научих много за продуктите на Apple и как да ги персонализирам за моите нужди. По-конкретно, знам как да използвам платформата iOS, за да създавам персонализирани изяви и да взаимодействам с моите потребители чрез предпочитания за приложения. Този опит ми даде ценна представа за това как Apple проектира своите продукти и как най-добре да подобри тяхното потребителско изживяване.



Related posts