حمل و نقل قابلیت اطمینان TCP
همه ما با پروتکل TCP به عنوان یک پروتکل حمل و نقل قابل اعتماد آشنا هستیم ، اما چگونه اطمینان از حمل و نقل را تضمین می کند؟
برای دستیابی به انتقال قابل اعتماد ، بسیاری از عوامل باید در نظر گرفته شوند ، مانند فساد داده ، از دست دادن ، تکثیر و قسمتهای خارج از سفارش. اگر این مشکلات حل نشود ، انتقال قابل اعتماد قابل دستیابی نیست.
بنابراین ، TCP از مکانیسم هایی مانند شماره دنباله ، پاسخ تأیید ، کنترل مجدد ، مدیریت اتصال و کنترل پنجره برای دستیابی به انتقال قابل اعتماد استفاده می کند.
در این مقاله ، ما روی پنجره کشویی ، کنترل جریان و کنترل احتقان TCP تمرکز خواهیم کرد. مکانیسم انتقال مجدد در بخش بعدی به طور جداگانه پوشش داده می شود.
کنترل جریان شبکه
کنترل جریان شبکه یا دانستن به عنوان کنترل ترافیک شبکه در واقع جلوه ای از رابطه ظریف بین تولید کنندگان و مصرف کنندگان است. احتمالاً در محل کار یا مصاحبه ها به این سناریو رسیده اید. اگر ظرفیت تولید کننده برای تولید بسیار زیاد از ظرفیت مصرف کننده برای مصرف باشد ، باعث می شود صف به طور نامحدود رشد کند. در یک مورد جدی تر ، ممکن است بدانید که وقتی پیام های RabbitMQ بیش از حد جمع می شوند ، می تواند باعث تخریب عملکرد کل سرور MQ شود. همین مورد در مورد TCP نیز صادق است. در صورت عدم بررسی ، پیام های زیادی در شبکه قرار می گیرند و مصرف کنندگان از ظرفیت خود فراتر می روند ، در حالی که تولید کنندگان به ارسال پیام های تکراری ادامه می دهند ، که این امر تا حد زیادی بر عملکرد شبکه تأثیر می گذارد.
برای پرداختن به این پدیده ، TCP مکانیسمی را برای فرستنده فراهم می کند تا میزان داده های ارسال شده را بر اساس ظرفیت دریافت واقعی گیرنده ، که به عنوان کنترل جریان شناخته می شود ، کنترل کند. گیرنده یک پنجره دریافت را حفظ می کند ، در حالی که فرستنده یک پنجره ارسال را حفظ می کند. لازم به ذکر است که این پنجره ها فقط برای یک اتصال TCP واحد هستند و همه اتصالات یک پنجره را به اشتراک نمی گذارند.
TCP با استفاده از متغیر برای پنجره دریافت ، کنترل جریان را فراهم می کند. پنجره دریافت کننده نشانگر این است که فضای حافظه نهان هنوز در دسترس است. فرستنده میزان داده های ارسال شده را با توجه به ظرفیت پذیرش واقعی گیرنده کنترل می کند.
میزبان گیرنده به فرستنده از اندازه داده هایی که می تواند دریافت کند ، اطلاع می دهد و فرستنده به این حد ارسال می کند. این حد اندازه پنجره است ، هدر TCP را به خاطر می آورید؟ یک قسمت پنجره دریافت وجود دارد که برای نشان دادن تعداد بایت هایی که گیرنده قادر یا مایل به دریافت آن است استفاده می شود.
میزبان فرستنده بطور دوره ای یک بسته کاوشگر پنجره را ارسال می کند ، که برای تشخیص اینکه آیا میزبان گیرنده هنوز قادر به پذیرش داده ها است ، استفاده می شود. هنگامی که بافر گیرنده در معرض خطر سرریز قرار دارد ، اندازه پنجره روی یک مقدار کوچکتر تنظیم می شود تا به فرستنده دستور دهد تا میزان داده های ارسال شده را کنترل کند.
در اینجا یک نمودار کنترل جریان شبکه وجود دارد:
کنترل احتقان شبکه
قبل از معرفی کنترل احتقان ، باید درک کنیم که علاوه بر پنجره دریافت و پنجره ارسال ، یک پنجره تراکم نیز وجود دارد که عمدتاً برای حل مشکل با چه میزان ارسال کننده شروع به ارسال داده به پنجره دریافت می کند. بنابراین ، پنجره احتقان نیز توسط فرستنده TCP نگهداری می شود. ما به یک الگوریتم نیاز داریم تا تصمیم بگیریم چقدر داده برای ارسال مناسب است ، زیرا ارسال داده های خیلی کم یا زیاد ایده آل نیست ، از این رو مفهوم یک پنجره تراکم.
در کنترل جریان شبکه قبلی ، آنچه ما از آن اجتناب کردیم این بود که فرستنده حافظه نهان گیرنده را با داده ها پر می کرد ، اما ما نمی دانستیم که در شبکه چه اتفاقی می افتد. به طور معمول ، شبکه های رایانه ای در یک محیط مشترک قرار دارند. در نتیجه ، ممکن است به دلیل ارتباط بین سایر میزبان ، ازدحام شبکه وجود داشته باشد.
هنگامی که شبکه احتقان است ، اگر تعداد زیادی از بسته ها ارسال شوند ، ممکن است مشکلاتی مانند تأخیر و از بین رفتن بسته ها ایجاد کند. در این مرحله ، TCP داده ها را دوباره ارسال می کند ، اما انتقال مجدد بار در شبکه را افزایش می دهد و در نتیجه تأخیرهای بزرگتر و ضررهای بسته بیشتری به همراه خواهد داشت. این می تواند به یک چرخه شرور وارد شود و بزرگتر شود.
بنابراین ، TCP نمی تواند آنچه را که در شبکه اتفاق می افتد نادیده بگیرد. هنگامی که شبکه احتقان می شود ، TCP با کاهش میزان داده ای که ارسال می کند ، خود را فدا می کند.
بنابراین ، کنترل احتقان ارائه شده است ، که هدف آن جلوگیری از پر کردن کل شبکه با داده های فرستنده است. برای تنظیم میزان داده هایی که فرستنده باید ارسال کند ، TCP مفهومی به نام پنجره تراکم را تعریف می کند. الگوریتم کنترل احتقان اندازه پنجره احتقان را با توجه به درجه احتقان شبکه تنظیم می کند ، تا میزان داده های ارسال شده توسط فرستنده را کنترل کند.
پنجره احتقان چیست؟ این چه ارتباطی با پنجره ارسال دارد؟
پنجره تراکم یک متغیر حالت است که توسط فرستنده نگهداری می شود و میزان داده ای را که فرستنده می تواند ارسال کند تعیین می کند. پنجره احتقان با توجه به سطح احتقان شبکه به صورت پویا تغییر می کند.
پنجره ارسال یک اندازه پنجره توافق شده بین فرستنده و گیرنده است که نشان دهنده میزان داده ای است که گیرنده می تواند دریافت کند. پنجره احتقان و پنجره ارسال مرتبط است. پنجره ارسال معمولاً برابر با حداقل ویندوزهای احتقان و دریافت کننده است ، یعنی SWND = دقیقه (CWND ، RWND).
پنجره احتقان cwnd به شرح زیر است:
اگر در شبکه احتقان وجود نداشته باشد ، یعنی هیچ زمان بازپرداخت مجدد رخ نمی دهد ، پنجره تراکم افزایش می یابد.
اگر در شبکه ازدحام وجود داشته باشد ، پنجره تراکم کاهش می یابد.
فرستنده با مشاهده اینکه آیا بسته تأیید ACK در مدت زمان مشخص شده دریافت می شود ، تعیین می کند که آیا این شبکه احتقان می شود. اگر فرستنده بسته تأیید ACK را در مدت زمان مشخص دریافت نکند ، در نظر گرفته می شود که این شبکه ازدحام است.
علاوه بر پنجره احتقان ، زمان آن است که در مورد الگوریتم کنترل تراکم TCP بحث کنیم. الگوریتم کنترل تراکم TCP از سه بخش اصلی تشکیل شده است:
شروع آهسته:در ابتدا ، پنجره تراکم CWND نسبتاً اندک است و فرستنده به صورت تصاعدی پنجره تراکم را به صورت تصاعدی افزایش می دهد تا به سرعت با ظرفیت شبکه سازگار شود.
اجتناب از احتقان:پس از گذشت پنجره تراکم از آستانه خاصی ، فرستنده پنجره احتقان را به صورت خطی افزایش می دهد تا سرعت رشد پنجره احتقان را کند و از اضافه بار شبکه جلوگیری کند.
بازیابی سریع:در صورت بروز احتقان ، فرستنده پنجره احتقان را نصف می کند و وارد حالت بازیابی سریع می شود تا محل بازیابی شبکه را از طریق ACK های کپی دریافتی تعیین کند و سپس به افزایش پنجره احتقان ادامه می دهد.
شروع آهسته
هنگامی که اتصال TCP برقرار شد ، پنجره احتقان CWND در ابتدا به حداقل مقدار MSS (حداکثر اندازه بخش) تنظیم می شود. به این ترتیب ، نرخ ارسال اولیه در مورد MSS/RTT بایت/ثانیه است. پهنای باند واقعی موجود معمولاً بسیار بزرگتر از MSS/RTT است ، بنابراین TCP می خواهد نرخ ارسال بهینه را پیدا کند ، که با استفاده از شروع آهسته می تواند حاصل شود.
در فرآیند شروع آهسته ، مقدار پنجره احتقان cwnd به 1 mss آغاز می شود ، و هر بار که بخش بسته منتقل شده تأیید می شود ، مقدار CWND توسط یک MSS افزایش می یابد ، یعنی مقدار CWND به 2 MSS تبدیل می شود. پس از آن ، مقدار CWND برای هر انتقال موفق یک بخش بسته و غیره دو برابر می شود. فرآیند رشد خاص در شکل زیر نشان داده شده است.
با این حال ، نرخ ارسال همیشه نمی تواند رشد کند. رشد باید مدتی به پایان برسد. بنابراین ، چه زمانی نرخ ارسال افزایش می یابد؟ شروع آهسته به طور معمول افزایش نرخ ارسال را از چند روش به پایان می رساند:
اولین راه مورد از دست دادن بسته در طی فرآیند ارسال شروع آهسته است. هنگامی که از دست دادن بسته رخ می دهد ، TCP پنجره احتقان فرستنده را به 1 تنظیم می کند و روند شروع آهسته را مجدداً راه اندازی می کند. در این مرحله ، مفهومی از آستانه شروع آهسته SSTHRESH معرفی شده است که مقدار اولیه آن نیمی از مقدار CWND است که باعث از بین رفتن بسته می شود. یعنی وقتی احتقان تشخیص داده می شود ، مقدار SSTHRESH نیمی از مقدار پنجره است.
راه دوم این است که مستقیماً با مقدار آستانه شروع آهسته SSTHRESH ارتباط داشته باشید. از آنجا که مقدار SSThresh نیمی از مقدار پنجره هنگام تشخیص احتقان است ، ممکن است از دست دادن بسته با هر دو برابر شدن در هنگام بزرگتر بودن CWND از SSTHRESH رخ دهد. بنابراین ، بهتر است CWND را به SSTHRESH تنظیم کنید ، که باعث می شود TCP به حالت کنترل احتقان تغییر یابد و شروع کند به پایان برساند.
آخرین روشی که شروع آهسته می تواند به پایان برسد ، در صورت تشخیص سه ACK اضافی ، TCP یک انتقال سریع انجام می دهد و وارد حالت بازیابی می شود. (اگر مشخص نیست که چرا سه بسته ACK وجود دارد ، به طور جداگانه در مکانیسم انتقال مجدد توضیح داده می شود.)
اجتناب از احتقان
هنگامی که TCP وارد حالت کنترل احتقان می شود ، CWND به نیمی از آستانه احتقان SSTHRESH تنظیم می شود. این بدان معنی است که هر بار که یک قطعه بسته دریافت می شود ، مقدار CWND نمی تواند دو برابر شود. در عوض ، یک رویکرد نسبتاً محافظه کارانه اتخاذ شده است که در آن مقدار CWND تنها با یک MSS (حداکثر طول قطعه بسته) پس از اتمام هر انتقال افزایش می یابد. به عنوان مثال ، حتی اگر 10 بخش بسته تصدیق شود ، مقدار CWND فقط با یک MSS افزایش می یابد. این یک مدل رشد خطی است و همچنین از رشد بالایی برخوردار است. هنگامی که از دست دادن بسته رخ می دهد ، مقدار CWND به MSS تغییر می یابد و مقدار SSTHRESH به نیمی از CWND تعیین می شود. یا همچنین در هنگام دریافت 3 پاسخ ACK اضافی ، رشد MSS را متوقف می کند. اگر سه ACK اضافی پس از نصف کردن مقدار CWND دریافت شود ، مقدار SSTHRESH به عنوان نیمی از مقدار CWND ثبت می شود و حالت بازیابی سریع وارد می شود.
بهبودی سریع
در حالت بازیابی سریع ، مقدار پنجره احتقان CWND برای هر یک از ACK دریافت شده توسط یک MSS افزایش می یابد ، یعنی ACK که به ترتیب به نتیجه نمی رسد. این برای استفاده از بخش های بسته ای است که با موفقیت در شبکه منتقل شده اند تا تا حد امکان راندمان انتقال را بهبود بخشند.
هنگامی که یک ACK از بخش بسته از دست رفته وارد می شود ، TCP مقدار CWND را کاهش می دهد و سپس وارد حالت اجتناب از احتقان می شود. این برای کنترل اندازه پنجره احتقان و جلوگیری از افزایش احتقان بیشتر شبکه است.
اگر یک زمان پس از حالت کنترل احتقان رخ دهد ، وضعیت شبکه جدی تر می شود و TCP از حالت اجتناب از احتقان به حالت شروع آهسته مهاجرت می کند. در این حالت ، مقدار پنجره احتقان cwnd روی 1 mss ، حداکثر طول قطعه بسته تنظیم شده است و مقدار آستانه SSTHOLD SLEL START SSTHRESH به نیمی از CWND تنظیم شده است. هدف از این امر ، افزایش مجدد اندازه پنجره احتقان پس از بازیابی شبکه برای تعادل نرخ انتقال و میزان احتقان شبکه است.
خلاصه
به عنوان یک پروتکل حمل و نقل قابل اعتماد ، TCP حمل و نقل قابل اعتماد را با شماره توالی ، تأیید ، کنترل انتقال مجدد ، مدیریت اتصال و کنترل پنجره پیاده سازی می کند. در میان آنها ، مکانیسم کنترل جریان میزان داده های ارسال شده توسط فرستنده را با توجه به ظرفیت دریافت واقعی گیرنده کنترل می کند ، که از مشکلات احتقان شبکه و تخریب عملکرد جلوگیری می کند. مکانیسم کنترل احتقان با تنظیم میزان داده های ارسال شده توسط فرستنده از بروز احتقان شبکه جلوگیری می کند. مفاهیم پنجره احتقان و پنجره ارسال به یکدیگر مربوط می شود و میزان داده در فرستنده با تنظیم پویا اندازه پنجره احتقان کنترل می شود. شروع آهسته ، جلوگیری از احتقان و بازیابی سریع سه بخش اصلی الگوریتم کنترل تراکم TCP است که اندازه پنجره تراکم را از طریق استراتژی های مختلف تنظیم می کند تا با ظرفیت و درجه احتقان شبکه سازگار شود.
در بخش بعدی ، مکانیسم انتقال مجدد TCP را با جزئیات بررسی خواهیم کرد. مکانیسم انتقال مجدد بخش مهمی از TCP برای دستیابی به انتقال قابل اعتماد است. این انتقال قابل اعتماد از داده ها را با انتقال داده های از دست رفته ، فاسد یا تأخیر تضمین می کند. اصل و استراتژی اجرای مکانیسم انتقال مجدد در بخش بعدی با جزئیات معرفی و مورد تجزیه و تحلیل قرار می گیرد. با ما همراه باشید!
زمان پست: فوریه 24-2025