سندرم پنجره احمقانه چیست - توضیح و پیشگیری

داده ها(Data) از طریق شبکه و اینترنت(Internet) با استفاده از TCP/IP Protocol منتقل می شوند. TCP/IP کامل نیست، اما در مقایسه با سایر پروتکل‌های تئوری‌شده برای ارتباطات داده مانند مدل ISO OSI(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 1000B را به عنوان اندازه پنجره ارسال کند، A آن را به دو 500B تقسیم کرده و دو بسته 500B ارسال می کند. پس از دریافت بسته اول، B یک تأییدیه ارسال می کند که می گوید 500B برای پنجره موجود است زیرا بسته دوم هنوز دریافت نشده است. A فرض می کند 500B اندازه پنجره است و در نتیجه دو بسته 250B ارسال می کند. در حالی که در B، 500B استفاده می شود و 500 به تازگی دریافت می شود، 0B را در صورت موجود ارسال می کند. در این مرحله، A فرض می‌کند که هیچ پنجره‌ای در دسترس نیست، اگرچه ممکن است رخ دهد که بافر خالی باشد زیرا پردازنده از داده‌های موجود در آنجا استفاده کرده است. A همچنان یک بسته کوچکتر ارسال می کند تا ببیند آیا پنجره ای در دسترس است یا خیر. اگر محتویات بافر در B هنوز حذف نشده باشد، همچنان 0 را به عنوان پاسخ/تأیید دریافت می کند.

بنابراین، اندازه پنجره همچنان کاهش می یابد، زیرا B هر بار که بسته ای را از A دریافت می کند، تأیید می کند. اگر A بتواند بسته ای به اندازه کافی بزرگ بفرستد که اندازه بافر روی B را در هر لحظه پوشش دهد، مشکلی وجود نخواهد داشت. اما این نیاز به مکانیسم های اضافی و در نتیجه سندرم پنجره احمقانه(Silly Window Syndrome) دارد. پس از اینکه A دو یا سه بار 0 را دریافت کرد، ارتباط متوقف می شود.

نحوه پیشگیری از سندرم پنجره احمقانه(Silly Window Syndrome) ( SWS )

یک الگوریتم ساده برای خلاص شدن از شر SWS وجود دارد. با دریافت بسته اولیه، B نیمی از فضای واقعا موجود را به عنوان پنجره ارسال می کند. این باعث می شود A بسته های کوچکتری ارسال کند. در نتیجه، وقتی بسته‌ها خیلی کوچکتر می‌شوند، B کل اندازه بافر را ارسال می‌کند تا A بتواند دوباره بایت‌های داده بزرگ‌تر را ارسال کند.

به عبارت دیگر، اگر 1000B موجود باشد، B 500B را به عنوان تایید ارسال می کند. بر این اساس، A 250B x ​​2 بسته ارسال می کند. برای این کار، A 100B به عنوان تصدیق دریافت می کند. وقتی بسته 50B را دریافت می کند، B 1000B - 50B را به A ارسال می کند. این باعث می شود کل مکالمه دوباره عملیاتی شود. این ممکن است باعث تاخیر کمی در پردازش شود، اما از بروز سندرم پنجره احمقانه(Silly Window Syndrome) جلوگیری می کند و کل مکالمه را متوقف می کند.

به طور خلاصه، SWS بر اساس اندازه بافر در دسترس برای گیرنده و اندازه فرضی محاسبه شده توسط فرستنده است. برای جلوگیری از SWS ، یک تاخیر ایجاد می شود و یک اندازه پنجره کوچکتر عمدی متقابل می شود تا اندازه بسته خیلی کوچک شود. سپس گیرنده اندازه پنجره واقعی موجود را فاش می کند. کل فرآیند تا زمانی که ارتباط کامل شود تکرار می شود.

اگرچه ممکن است از کلمات window و buffer به جای هم استفاده کرده باشم. منظورم تفاوتی بین آنها نیست. در مطالعات SWS ، بافر پنجره است.



About the author

من یک توسعه دهنده ماهر iOS با بیش از دوازده سال تجربه هستم. من روی هر دو پلتفرم iPhone و iPad کار کرده‌ام و می‌دانم چگونه برنامه‌ها را با استفاده از آخرین فناوری‌های اپل ایجاد و سفارشی‌سازی کنم. علاوه بر مهارت‌هایم به‌عنوان توسعه‌دهنده aiOS، تجربه قوی در استفاده از Adobe Photoshop و Illustrator و همچنین توسعه وب از طریق چارچوب‌هایی مانند WordPress و Laravel دارم.



Related posts