پرش به محتوا

پیش‌نویس:برنامه ریز شبکه

از ویکی‌پدیا، دانشنامهٔ آزاد
بسته ها در یک ساختار داده FIFO (اولین ورودی ، اولین خروجی است) صف می کشند.

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

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

در بعضی موارد ممکن است نتوان برای تمام انتقال ها در محدوده محدودیت های سیستم برنامه ریزی کرد. در این موارد ، مسئولیت برنامه ریز شبکه ، تصمیم گیری برای انتقال یا عدم انتقال بخش های ترافیک شبکه (بسته ها) است

اصطلاحات و مسئولیت ها

[ویرایش]

یک برنامه ریز شبکه ممکن است مسئولیت پیاده سازی بخش های به خصوصی از راه حل های مشکلات کنترل ترافیک شبکه را داشته باشد. کنترل ترافیک شبکه یک اصطلاح چتر گونه (کلی) برای تمام اقدامات انجام شده با هدف کاهش ازدحام ، تأخیر و از بین رفتن بسته است. به طور خاص ، مدیریت فعال صف (AQM) عبارت است از حذف انتخابی بسته های موجود در صف انتظار برای رسیدن به هدف بزرگتر جلوگیری از ازدحام بیش از حد شبکه. برنامه ریز شیکه بایستی انتخاب کند کدام یک از بسته ها از قلم انداخته شوند. شکل دادن به ترافیک با به تأخیر انداختن بسته های انتقالی هنگامی که در صف انتظار قرار می گیرند ، نیاز به پهنای باند برای جریان های ترافیکی را هموار می کند. برنامه ریز زمان بندی بسته های ارسالی را تعیین می کند. کیفیت خدمات رسانی (QoS) اولویت بندی ترافیک براساس کلاس خدمات ( سرویس های متفاوت ) یا اتصال اختصاصی ( خدمات مجتمع ) است.

الگوریتم ها

[ویرایش]

در طول زمان تعداد زیادی از قواعد صف بندی شبکه توسعه یافته اند ، که هر یک ، یک تغییر در ترتیب یا از قلم انداختن خاصی از بسته های شبکه را در بافرهای مختلف انتقال یا دریافت ارائه می دهد. [۱] [۲] قواعد صف بندی معمولاً به عنوان تلاشی برای جبران شرایط مختلف شبکه مانند کاهش تأخیر برای کلاسهای خاصی از بسته های شبکه استفاده می شوند و معمولاً به عنوان بخشی از اقدامات QoS استفاده می شوند. [۳] [۴] [۵]

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

  • AVQ (adaptive virtual queue)[۶]
  • CBQ (class-based queueing) discipline
  • CHOKe (CHOose and Keep for responsive flows, CHOose and Kill for unresponsive flows) is a variant of RED
  • CoDel (controlled delay) and fair/flow queue CoDel
  • CAKE (Common Applications Kept Enhanced), implemented in linux kernel[۷]

چندین مورد فوق به عنوان ماژول های هسته لینوکس پیاده سازی شده اند [۱۸] و به صورت رایگان در دسترس هستند .

بافر

[ویرایش]

Bufferbloat پدیده ای در شبکه های بسته-سوئیچ شده است که در آن بافر کردن اضافی بسته ها باعث تأخیر زیاد و تغییر تاخیر بسته می شود . Bufferbloat را می توان توسط یک برنامه ریز شبکه که بسته ها را با استفاده از استراتژی دور می ریزد تا از بافر کردن بیش از حد و غیر ضروری انباشته ها (backlog) جلو گیری شود ، برطرف کرد. به عنوان مثال می توان CoDel و Random early detection را نام برد .

پیاده سازی ها

[ویرایش]

هسته لینوکس

[ویرایش]
برنامه ریز بسته هسته های لینوکس بخشی از پشته شبکه است ، همراه با netfilter ، nftables و Berkeley Packet Filter .

برنامه ریز بسته در هسته لینوکس بخشی جدایی ناپذیر از پشته (stack) شبکه هسته لینوکس است و با کار بر روی لایه 2 از مدل OSI و مدیریت فریم های اترنت ، انتقال و دریافت بافرهای حلقه ای همه NIC ها را مدیریت می کند.

برنامه ریز بسته با استفاده از ابزاری موسوم به tc (مخفف "کنترل ترافیک") پیکربندی شده است. به عنوان قواعد صف بندی پیش فرض ، برنامه ریز بسته از پیاده سازی FIFO به نام pfifo_fast استفاده می کند، [۱۹] هچنین systemd پس از نسخه 217 ، قواعد صف بندی پیش فرض را به fq_codel تغییر می دهد. [۲۰]

برنامه های ifconfig و ip مدیران سیستم را قادر می سازند تا اندازه بافر txqueuelen و rxqueuelen را برای هر دستگاه به طور جداگانه از نظر تعداد فریم اترنت بدون در نظر گرفتن اندازه آنها پیکربندی کنند. پشته (stack) شبکه هسته لینوکس حاوی چندین بافر دیگر است که توسط برنامه ریز شبکه مدیریت نمی شوند. [الف]

فیلترهای بسته برکلی را می توان به طبقه بندی کننده برنامه ریز بسته ها متصل کرد. عملکرد eBPF که توسط نسخه 4.1 هسته لینوکس در سال 2015 ارائه شده است ، طبقه بندی کننده های قابل برنامه ریزی BPF کلاسیک را به eBPF گسترش می دهد. [۲۱] اینها را می توان با استفاده از بک اندLLVM eBPF کامپایل کرد و با استفاده از ابزار tc در هسته در حال بارگذاری بارگذاری کرد. [۲۲]

BSD و OpenBSD

[ویرایش]

ALTQ پیاده سازی یک برنامه ریز شبکه برای BSD ها است . از زمانی که OpenBSD نسخه 5.5 ALTQ با برنامه ریز HFSC جایگزین شد.

همچنین ببینید

[ویرایش]

یادداشت

[ویرایش]


منابع

[ویرایش]
  1. The overall size of all buffers has been the point of critique by the Bufferbloat project, which provided a partial solution with CoDel that has been primarily tested in OpenWrt.
  1. "Traffic Control HOWTO: Classless Queuing Disciplines (qdiscs)". tldp.org. Retrieved November 24, 2013.
  2. Saravanan Radhakrishnan (سپتامبر ۳۰, ۱۹۹۹). "QoS Support in Linux: Queuing Disciplines". qos.ittc.ku.edu. Retrieved March 18, 2014.
  3. "Traffic Control HOWTO: Components of Linux Traffic Control". tldp.org. Retrieved November 24, 2013.
  4. "Traffic Control HOWTO: Traditional Elements of Traffic Control". tldp.org. Retrieved November 24, 2013.
  5. "Queuing Disciplines: Order of Packet Transmission and Dropping" (PDF). tau.ac.il. اکتبر ۲۵, ۲۰۰۶. Retrieved March 18, 2014.
  6. http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.108.4477&rep=rep1&type=pdf
  7. "Let them run CAKE". LWN.net.
  8. "DRR Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  9. "FavorQueue: a Parameterless Active Queue Management to Improve TCP Traffic Performance" (PDF).
  10. "Heavy-Hitter Filter qdisc". kernel.org.
  11. "HTB Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  12. "QFQ Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  13. "Fair Queue packet scheduler committed to Linux kernel 3.12".
  14. "Network emulator Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  15. "Proportional Integral controller Enhanced (PIE)". kernel.org.
  16. "SFQ Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  17. "TBF Linux kernel network scheduler module". kernel.org. Retrieved 2013-09-07.
  18. "The Linux kernel network scheduler". kernel.org. 2012-12-26. Retrieved 2013-09-07.
  19. "Linux Advanced Routing and Traffic Control HOWTO, Section 9.2.1. pfifo_fast". lartc.org. 2012-05-19. Retrieved 2014-09-19.
  20. "systemd System and Service Manager: NEWS file". freedesktop.org. 2015-05-22. Retrieved 2015-06-09.
  21. "Linux kernel 4.1, Section 11. Networking". kernelnewbies.org. 2015-06-21.
  22. "BPF and XDP Reference Guide". Cilium documentation web site.