SRE at Asa Co. / Agah Group
آشنایی با QoS – بخش هفتم (Congestion Avoidance) - قسمت نهایی
با سلام و عرض خسته نباشید خدمت تمام نتورکباز های عزیز ، در ادامه ی قسمت قبلی از این سری آموزشی، امروز میخواهیم درمورد آخرین مبحث مورد نظرمون در این سری آموزشی، یعنی مبحث جلوگیری از تراکم ویا همان Congestion Avoidance صحبت کنیم.
ـCongestion Avoidance ، یک featureـه QoSـی است که با استفاده از discard کردن یکسری از پکت های استفاده شده در کانکشنهای TCP ، تلاش بر کاهشدادنه Loss در شبکه را دارد. برای اینکه متوجه شوید که این فیچر به چه صورت عمل میکند، ابتدا میبایستی به فرایند و پروسه ی windowing در TCP نگاهی بیاندازیم و سپس نحوه ی عملکرد این سیستم را بررسی کنیم.
مفاهیم TCP Windowing
پروتکل TCP از یک مکانیزمی با نام windowing برای کنترل جریان(Flow) استفاده میکند،هر TCP Receiver (دریافت کننده) یک window به TCP Sender (ارسال کننده) تحویل میدهد. "Window" عددی است که نشان میدهد sender(ارسال کننده) قبل از دریافت TCP Acknowledgement از سمت Receiver(دریافت کننده) چه تعداد بایت در طول اتصال TCP (یا همان TCP Connection) میتواند ارسال کند. بخواهیم دقیقتر بگوئیم، window تعداد بایت های unacknowledged میباشد که sender تا قبل از اینکه وارد پروسهی Stop(توقف) و Wait(انتظار) شود، میتواند ارسال کند.
این مکانیزم به Receiver قدرته کنترل سرعت ارسال دیتایی که توسط sender ارسال میشود را میدهد. هر سگمنت جدیدی که از طرف Receiver به سمت Sender ارسال میشود ، باعث ایجاد و تحویل دادن یک window جدید میشود که این عدد میتواند کم ویا زیادتر از عدد قبلی (Previous window) باشد. با بالا پایین بردن این عدد ، Receiver میتواند Sender را مجبور به توقفهای طولانیتر کند ویا کاری کند که Sender هیچوقت توقف نکند و دست از ارسال دیتا برندارد!
نکته: هر کانکشن TCP ، دارای 2 ارسالکننده و 2 دریافتکننده است؛چراکه هر Host دیتاهارا هم ارسال و هم دریافت میکند. در این وضعیت فعلی که سعی بر درکه این سیستم داریم، شما این اتصال و کانکشن را یکطرفه درنظر بگیرید (بدین معنی که فقط یک host ارسال کننده و دیگری دریافت کننده است) ، در این شرایط در نظر داشته باشید که با وجود یک ارسال کننده و یک دریافت کننده؛ acknowledge ها از طرف دریافتکننده به سمت ارسال کننده ارسال میشوند. زمانی که همه چیز به درستی پیشمیرود، Receiver هربار که دیتاهارا acknowledge میکند، سعی میکند که window را بالا ببرد(هربار آنرا دو برابر میکند)؛ در نهایت window به نقطه ای میرسد که Sender هیچوقت نباید دستنگه دارد(Stop کند)؛ Sender مرتبا بسته های TCP Ack را قبل ارسال تمام دادهها در Windowـه قبل،دریافت میکند.هر acknowledgemenـه جدید ، یک window جدید به sender تحویل میدهد. همچنین زمانی که TCP Revicer احساس میکند که Loss درحال اتفاق افتادن است(یعنی زمانی که یک سگمنت TCP را از دست میدهد)، برعکس روال بالا را انجام میدهد و Windowـی که میخواهد به Sender ارسال کند را Shrink میکند. با هر بار اتفاق افتادن این موضوع(از دست رفتن TCP Segment) ، عدد(Window)نصف میشود که باعث پایین آمدن سرعت و rateـه sender میشود، تا از این دوباره اتفاق افتادن این موضوع جلوگیری کند.
حالا برای یک لحظه بیاید Queue های روتر را در نظر بگیریم.بدون ابزار Congestion avoidance، رویدادی با نام Tail drop باعث بیشترین Drop ها در شبکه میشود.شکل زیر ایده ی صفبندی و همان سیستم Queuing قدیم را نمایش میدهد ، اما در سه موقعیت متفاوت:
- تراکم کم(little congestion)
- تراکم متوسط(medium congestion)
- تراکم زیاد(much congestion)
در قسمته سمت چپ ، با تراکم کم ، صفهای خروجی بروی یک اینترفیس ، هنوز پُر(filled) نشده اند. در قسمت میانی ، صفهای دیگر با پر شدنه یک صف ، شروع به پر شدن میکنند. در این لحظه هر پکتی که برای آن صف از راه برسد ، drop میشود ، چراکه هیچ جایی برای قرار دادن آن پکت وجود ندارد.
بدترین حالتی که میتواند پیش بیآید، موقعیتی مشابه قسمت سمت راست یعنی تراکم زیاد میباشد، مقدار زیادی tail drop انجام میشود و بسته های بسیاری از بین میروند.
هرچه تراکم بیشتر شود ، تاثیر منفی آن بر ترافیک شبکه هم بیشتر خواهد شد چراکه باعث loss و delay بسیاری میشود.
آشناییبا Congestion Avoidance Tools (ابزارهای جلوگیری از تراکم)
ابزارهای جلوگیری از تراکم ، همانطور که از نامشان مشخص است تلاش بر جلوگیری از ایجاد تراکم دارند؛با استفاده از همان مکانیزم windowingـه TCP.
این ابزارها تعدادی از سگمنت های TCP را قبل از اینکه صفها پر شوند ، Discard میکنند ... به امید آنکه TCP Connection هایه باقی سرعته خودرا کم کرده ، تراکم را پایین بیاورند و از ایجاد مشکله اصلی یعنی tail drop تعداد زیادی از پکت های باقی مانده ، جلوگیری کنند.
استراتژی مورد استفاده ساده است : تعدادی از کم اهمیت هارا همین الان خودت از بین ببر و امیدوار باش و باعث شو که Device ، مقدار بسیار کمتری را در طولانی مدت از بین ببرد.
ابزارهای جلوگیری از تراکم یا همان Congestion avoidance ، هربار عمق صفها را میانگین گیری میکنند و موقعیتی برای بررسی دقیقتر و عمقی تره سطح صفها فراهم میکنند(شکل زیر).
طول شکل زیر (طول مستطیل) ، نشان دهنده ی عمقه صف ویا همان تعداد پکت های داخل صف میباشد؛ زمانی که عمق صف کم میباشد (کمتر از آستانه ی مشخص شده ی minimum میباشد) ، ابزار Congestion avoidance ، هیچ کاری انجام نمیدهد. زمانی که این عُمق بینه آستانه ی کم و زیاد (maximum و minimum) باشد، ابزاره Congestion avoidance، درصدی از پکت هارا discard میکند؛ عموما درصدهای کم مانند 5% ، 10% ویا 20%.
اگر این عمق از آستاده ی maximum عبور کند ، این ابزار تمام پکت ها را در عملی که به آن full drop گفته میشود ، drop میکند.
البته مانند تمام ابزار های QoSـی که طی این دوره با آنها آشنا شدید، ابزار جلوگیری از تراکم را میتواند طوری تنظیم کرد که با یکسری پکتهای خاص بهتر رفتار کند و اولویت کمتری برای discard کردن انها در نظر بگیرد.
این دوره ی آموزشی که در آن درمورد مباحث متفاوت و مفاهیم QoS صحبت کردیم ، در اینجا به پایان میرسد.امیدوارم که تا اینجا برای تمامی دوستان مفید واقع شده باشه و به پیشرفت دوستان کمک کرده باشه ، چراکه حالا تا حد قابل قبولی با این سیستم آشنا شده اید.
انشاالله در سطوح بالاتر و یک سری آموزشی جدید در آینده ای نزدیک،با دیگر تکنولوژی و راهکار ها و نحوه ی پیکربندی های این سیستم ها آشنا خواهیم شد که در سطح CCIE به آنها میپردازند... اما در این میان میبایست سری های آموزشی دیگری که همگی جذاب هستند داشته باشیم ;) .
با آرزوی موفقیت.
مطلبی دیگر از این انتشارات
آشنایی با QoS – بخش ششم (Shaping)
مطلبی دیگر از این انتشارات
پروازی بر دنیای امنیت شبکه (قسمت چهارم) – شناسایی تهدیدات (2)
مطلبی دیگر از این انتشارات
پروازی بر دنیای امنیت شبکه (قسمت دوم) – طبقهبندی