علت کاهش سرعت اینترنت و چگونگی رفع آن‌

در سال ۲۰۱۰ یک برنامه‌نویس کهنه‌کار کامپیوتر به نام جیم گتیز که کاشف علت کاهش سرعت اینترنت است و در حال حاضر نیز در گوگل مشغول کار است، در خانه مشغول آپلود یک فایل بزرگ به سرور محل کار خود بود. در همین حین فرزندانش به اتاق کار او آمدند و از سرعت پایین اینترنت شکایت داشتند.

تعجب‌آور این بود که چطور کار آپلود او می‎توانست روی سرعت دانلود کودکانش تاثیر داشته باشد، به همین دلیل او شروع به بررسی کرد و نتیجه تحقیقات او منجر به کشف پدیده مخرب و ناشناخته ‎ای به نام bufferbloat شد.

جیم گتیز با بررسی پینگ‎ها و سطوح مختلفی از بارگذاری اتصال اینترنت به این نتیجه رسید که زمان بازگشت پاسخ درخواست از اینترنت اغلب بین چهار تا ده برابر از آن چه او انتظار داشت طولانی‎تر می‎شد. و این گونه بود که او پدیده‎ای به نام bufferbloat را معرفی کرد. نتیجه گیری او این بود که بسته‎های داده ضروری در بافرهایی گیر افتاده بودند که بیش از حد بزرگ شده بود.

از آن زمان گتیز مشاهدات خود را گردآوری و منتشر کرد. محققانی از شرکت‎هایی مثل سیسکو و گوگل، و همچنین گروه‎های تعیین استاندارد مثل IETF و محققان ارشد دانشگاهی شروع به تحقیق، آزمایش و نوشتن در مورد bufferbloat کردند. آنچه امروز مشخص است این است که پدیده bufferbloat واقعیت دارد، اما هنوز به طور کامل مشخص نشده است که میزان تاثیرwhy  آن روی گردش طبیعی ترافیک اینترنت تا چه اندازه است.

چه کسی بیشترین تاثیر را از کاهش سرعت اینترنت خواهد دید؟

هر کسی که مشغول وبگردی یا استفاده از موتورهای جستجو باشد، درگیر خواهد شد. همچنین کسانی که از اپلیکیشن‎‌های زنده نظیر برنامه‎ های صوتی و تصویری استفاده می‎کنند نیز تحت تاثیر قرار خواهند گرفت. یک مثال در این مورد کارمندانی هستند که در خانه، جاده، هتل یا هات اسپات‎‌های وای‎فای کارهای خود را انجام می‎دهند. تحقیقات نشان می‎دهد که هتل‎ ها و مراکز ارائه خدمات وای‎فای بیشترین تاثیر منفی را از پدیده bufferbloat دریافت می‎کنند.

کدام نوع از ترافیک‎‌ها بیشترین تاثیر را از این پدیده خواهند گرفت؟

جریان ترافیک روی لینک‎هایی که مصرف پهنای باند زیادی دارند درگیر خواهند شد. کاربردهایی مثل VoIP ،DNS و ARP که از بسته‎های داده کوچک استفاده می‎کنند نیز می‎توانند دچار این مشکل شوند. تاثیر روی VoIP به صورت افزایش تاخیر و تغییر صدا ظاهر می‎شود. زمان پاسخ تبادلات DNS نیز ممکن است بین دو تا هشت برابر بیشتر از حالت عادی به طول بیانجامد.


‏Bufferbloat دقیقا چیست؟

به منظور کم کردن تعداد بسته‎های گم شده داده در اینترنت، اپراتورهای شبکه، توسعه دهندگان و مهندسان برای چندین بار متوالی اندازه بافرهای شبکه را افزایش داده‎اند. این کار با وجودی که زمان پاسخ‎گویی را افزایش می‎دهد اما تاثیر کمی‎ روی عملکرد کلی دارد. به تبع آن، بسته‎های کوچک ضروری مثل آنهایی که در VoIP ،DNS و TCP استفاده می‎شود ممکن است در بافرهای بسته‎های بزرگ‎تر مربوط به انتقال فایل و یا سایر نقل و انتقالات دسته‎ای دیگر مثل بیت ریت‎های تطبیقی ویدیو گرفتار شوند.

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

صدمات bufferbloat در عملکرد TCP به چه شکل است؟

بخش عمده‎ای از ترافیک شبکه ما از TCP به عنوان پروتکل نقل و انتقال استفاده می‎کند. آشنایی با نحوه عملکرد TCP مشخص می‎کند که چرا bufferbloat مشکل ساز می‎شود. وقتی یک اتصال TCP برقرار می‎شود یک ارتباط سه جانبه برقرار می‎شود که در آن درخواست‎های ارسال و دریافت TCP در مورد تبادل پارامترهای خود (از جمله شماره توالی‎های اولیه) با یک دیگر گفتگو می‎کنند.

در ادامه موضوع کاهش سرعت اینترنت اکنون فرض کنید که از یک سرور FTP خواسته شده تا یک فایل حجیم را منتقل کند. TCP معمولا عملیات انتقال را با ارسال چهار سگمنت آغاز می‎کند و بعد در انتظار تایید تحویل آنها می‎ماند. سیاست معمول به این صورت است که بعد از هر سگمنت دریافت شده یک نشانه دریافت تاییدیه (ACK) نیز ارسال می‎شود.

بعد از این که هر چهار سگمنت نشانه دریافت را ارسال کردند، گیرنده با ارسال هشت سگمنت نرخ سرعت ارسال را افزایش می‎دهد و در انتظار دریافت تاییدیه می‎ماند. بعد از تایید شدن این سگمنت‎ها به همین ترتیب نرخ ارسال به ۱۶ و بالاتر افزایش میابد.

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

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

این مطلب رو هم بخونید: روش های عیب یابی مودم ADSL

‏Bufferbloat چگونه روی این فرآیند تاثیر می‎گذارد؟

یک اتصال بین یک لینک پر سرعت و یک لینک کم سرعت را در نظر بگیرید. در چنین مواردی است که اهمیت وجود بافر مشخص می‎شود. برای مثال، فرض کنید ما یک مسیر محلی یک گیگابیت در ثانیه مثل کابل یا مودم DSL در اختیار داریم. حالا تصور کنید این مودم به یک خدمات دهنده اینترنت (ISP) متصل شده است که نرخ دانلود ۱۰ مگابیت در ثانیه و آپلود ۲ مگابیت در ثانیه را فراهم می‎کند. سرور FTP بافر ارسال شده به اتصال پر سرعت را خیلی سریع‎تر از نرخ خروج لینک کندتر پر می‎کند.

حالا اگر این بافر بزرگ باشد دو اتفاق ممکن است رخ دهد: اول، اگر بافر پر شود، آخرین بسته رسیده از بین می‎رود. به این اتفاق tail drop گفته می‎شود. نشانه تاییدیه که این از بین رفتن بسته را به ارسال کننده اطلاع می‎دهد تا زمان رسیدن بسته بعدی ارسال نخواهد شد و در چنین شرایطی عملا این پیام غیر قابل استفاده خواهد بود.

گذر این فرآیند از بین یک بافر بزرگ زمان قابل ملاحظه‎ای را تلف می‎کند. آزمایشات انجام گرفته روی بیت ریت‎های تطبیقی ویدیو نشان می‎دهد که قبل از این که ایستگاه بتواند سگمنت از بین رفته را دوباره ارسال کند نزدیک به ۲۰۰ سگمنت باید تحویل داده شود. همچنین اگر در زمان انتشار ویدیو چندین رشته جریان در حال عبور باشد، این صف ممکن است از صف ارسال جلو بزند. با وجود بسته‎های ترمیمی‎ در این صف یک حالت پایدار به وجود می‎آید. اگر این مقدار به اندازه‎ای نباشد که بتواند بافر را سر ریز کند، هیچ بسته‎ای از بین نمی‎رود و کنترل تراکم TCP نیز اتفاق نخواهد افتاد.

اما زمان تاخیر برای تمام کاربران این بافر افزایش پیدا خواهد کرد.

مدیریت بافرها برای جلوگیری از کاهش سرعت اینترنت

برای مدتی عقیده بر این بود که باید صف درخواست‎‌های شبکه را مدیریت کرد. برای اولویت دادن به یک ترافیک خاص می‎توان بیت‎های IP layer diffserv را به گونه ‎ای تنظیم کرد تا به انواع خاصی از ترافیک مثل کنترل شبکه یا VoIP ارجهیت بالاتری داده شود. آنها این کار را با قرار دادن این ترافیک‎‌های اولویت‌‎دار در صف‌‎های جداگانه انجام می‎دادند.

اما انجام این کار از bufferbloat جلوگیری نمی‎کند. بعضی از صف‎هایی که ترافیک بدون اولویت در آن قرار دارد همچنان با مشکل بزرگ شدن بیش از حد مواجه هستند. اینها اغلب شامل سگمنت‎های TCP خیلی بزرگ هستند. بنابراین ما همچنان با مشکل تاثیر منفی مکانیسم تراکم TCP مواجه هستیم.

در سال ۲۰۱۲، کتی نیکولز و ون جیکوبسن یک تکنیک به نام CoDel یا Controlling Queue Delay را معرفی کردند. این شیوه با ردگیری زمانی که یک بسته در صف قرار دارد این صف را مدیریت می‎کند و به این ترتیب کاهش سرعت اینترنت از بین خواهد رفت، چرا که مدت زمان اشغال یک صف مسئله بسیار مهمی‎ است.

دو پارامتر فاصله و آستانه از اهمیت بسیار بالایی برخوردار هستند. اگر تاخیر فاصله بین بسته‎ها طولانی‎تر از مقصد باشد، بسته‎ها به طور تصادفی شروع به از بین رفتن می‎کنند. توجه داشته باشید که این تکنیک به اندازه صف‎ها و tail-drop وابسته نیست.

نتایج آزمایشات انجام گرفته نشان می‎دهد که در حالت کلی وضعیت تاخیر در پاسخ‎دهی در این شیوه بهتر از تکنیک RED م(Random Early Discard) رفتار می‎کند و نتایج کلی به مراتب بهتر است. این موضوع در زمان استفاده از لینک‎های بی‎سیم بیشتر دیده می‎شود.

توصیه بعدی برای کاهش تاثیر پدیده bufferbloat توسط دیو تات، اریک دومازت، جیم گتیز و چند نفر دیگر مطرح شده است. نام این شیوه fq-codel است و هدف از آن ایجاد یک تاثیر یکنواخت‎تر در جریان‎های عبوری از طریق صف‎ها است. حتی کتی نیکولز و ون جیکوبسن نیز تاثیرات مثبت استفاده از fq-codel را تایید کرده‎اند.

این شیوه به طور پیش فرض صف‎ها را به زیر شاخه‎های ۱۰۲۴ تقسیم می‎کند. سپس به طور تصادفی به هر جریان جدید یک صف جداگانه اختصاص می‎دهد. داخل هر زیر شاخه از Codel برای کمک به کنترل تراکم TCP استفاده می‌‎شود.

‏Codel و fq-codel چه کاری انجام می‎دهند؟

اول، این دو تکنیک وظیفه نظارت بر انجام صحیح عملیات کنترل تراکم TCP را بر عهده دارند. دوم، با ترکیب بسته‎های موجود در صف‎ها، باعث می‎شوند تا بسته‎های کوچک ضروری مثل پاسخ‎های DNS و نشانه‎های TCP در دام صف‎های طولانی گرفتار نشوند. به عبارت دیگر، با استفاده از این شیوه نحوه برخورد با بسته‎های بزرگ و کوچک با تساوی بیشتری انجام خواهد شد. تحقیقات زیادی نشان داده است که مزایای استفاده از fq-codel به مراتب بیشتر است. fq-codel تنها در آخرین توزیع‎های لینوکس به کار گرفته شده است.

آینده به چه سمتی پیش خواهد رفت؟

متاسفانه آگاهی از وجود پدیده bufferbloat هنوز فراگیر نشده و کاهش سرعت اینترنت یا Decrease internet speed نیز هنوز برای بسیاری از افراد قابل درک نیست. ما به اپراتورهای شبکه و کاربران بیشتری نیاز داریم تا از آزمون‎های در دسترسی مثل ICSI Netylyzr و www.DSLReports/speedtest/ استفاده کنند. بعد از انجام این آزمایشات در صورتی که به میزان قابل ملاحظه‎ای از مشکلات bufferbloat برخورد کردید، می‎‎توانید از چندین روش جایگزین استفاده کنید:

۱- دسترسی سخت‌افزار خود را به دستگاه‎هایی که از یک توزیع جدید لینوکس مجهز به fq-codel استفاده می‎کنند تغییر دهید. اطمینان حاصل کنید که این قابلیت فعال باشد.

۲- یک دستگاه بین کامپیوتر و روتری که قابلیت fq-codel در آن فعال است قرار دهید. این کار باعث محدود شدن استفاده از بافرهای حجیم روتر می‎شود.

۳- اگر تمام موارد مطرح شده با شکست مواجه شد، روی لینک‎های آپلود و دانلود محدودیت نرخ تبادل به میزان کمی‎ کمتر از نرخ ظرفیت آنها اعمال کنید. این کار کمک می‎کند تا از تشکیل بافرهای حجیم جلوگیری شود. انجام این کار اگرچه ممکن است در بارهای کاری سبک به میزان اندکی‎ توان عملیاتی را کاهش دهد، اما به شکل قابل ملاحظه‎ای وضعیت جریان‎های ضروری مثل تاییدیه‎های DNS ، ARP و TCP را بهبود می‎بخشد.

در حال حاضر چندین فروشنده تجهیزات شبکه مشتاق برای کاستن از اثرات مخرب bufferbloat وجود دارد. سیسکو طی یک همکاری مشترک با کامکست، یک تکنیک مدیریت صف به نام  PIEو(Proportional Integral controller Enhanced) را توسعه داده است.

‏Time-Warner Cable نیز گام‎های مثبتی را در جهت کم کردن اثرات bufferbloat برداشته است. Actiontec که یک تامین کننده عمده برای شاهراه‎های محلی Verizon و Centurylink است، تحقیقاتی زیادی در مورد bufferbloat کرده است. آنها مدعی هستند پیشرفت‎های زیادی در راه کم کردن تاثیرات این پدیده داشته‌‎اند.

اما برخی از فروشندگان دیگر نیز هستند که به نظر می‎رسد اطلاع چندانی از bufferbloat ندارند. این وضعیتی است که باید هر چه زودتر تغییر کند. بسیار حیاتی است که یک درک همه جانبه از این موضوع شکل گیرد که نتیجه کلی به ویژه در فعالیت‎هایی مثل وبگردی، مهمترین عامل ضرر و زیان نیست. بلکه اصلی‎ترین عامل تاخیر در تبادل است.

پاسخ‎های دریافتی از فرامین HTTP GET اغلب به شکل حجم انبوهی از انتقالات فایل‎های کوچک انجام می‌‎شود که در آن فرآیند شروع کند به ندرت اتفاق می‎افتد. بنابراین تاخیر در برقراری و خاتمه session ها به یک تاثیر مخرب قابل توجه در مدت برقراری این sessionها تبدیل و باعث کاهش سرعت اینترنت می‎‌شود.