🌐 چرا بعضی وقتا ارسال پیامهای کوتاه توی شبکه یه لگ عجیب داره؟
تا حالا شده توی یه برنامه یا بازی، وقتی پیامهای خیلی کوتاهی میفرستی، حس کنی یه تأخیر یا لگ غیرمنطقی وجود داره، انگار سیستم منتظره یه چیزی اتفاق بیفته تا دادهها رو بفرسته؟ این اتفاق معمولاً به خاطر یه مکانیزم به اسم Nagle's Algorithm اتفاق میافته که هدفش اینه که از ارسال تعداد زیادی packetهای ریز با payload کم جلوگیری کنه تا ترافیک شبکه بیهوده اشغال نشه.
داستان از اینجا شروع میشه که Nagle's Algorithm میگه تا وقتی که ACK مربوط به packet قبلی برنگشته، اجازه نداره packet جدیدی با اندازه کوچکتر از MSS بفرسته. اما از اون طرف، سیستمهای مدرن از Delayed ACK استفاده میکنن؛ یعنی گیرنده بلافاصله ACK نمیفرسته و یه مدت کوتاه منتظر میمونه تا شاید بتونه ACK رو روی یه payload پاسخ قرار بده یا منتظر میمونه تا packetهای بیشتری برسن. حالا اگه فرستنده طبق قانون Nagle منتظر ACK باشه و گیرنده طبق Delayed ACK منتظر دادههای بیشتر، یه بنبست موقت ایجاد میشه و هر دو طرف تا زمان انقضای timer منتظر میمونن، که باعث یه جهش شدید توی latency میشه.
برای حل این مشکل، توی اکثر برنامههایی که به پاسخ سریع نیاز دارن مثل SSH یا بازیهای آنلاین، گزینهای برای غیرفعال کردن Nagle's Algorithm وجود داره تا دادهها بدون معطلی ارسال بشن. با این کار، هر مقدار دادهای که توی buffer باشه بلافاصله ارسال میشه و دیگه منتظر ACK نمیمونه، هرچند که این کار ممکنه باعث افزایش تعداد packetهای ریز توی شبکه بشه.
❓ نظرتون راجب این پست چیه ؟ برامون تو کامنتا بنویسین :)@things_to_know_channel