📌 یه کانال جمعوجور برای چیزهایی که باید بدونی!
از تکنولوژی روز تا ترفندهای برنامهنویسی ⌨️⚙️
Post #453
123
#network_time
🌐 چرا یه سرور شلوغ یهو نمیتونه connection جدید برقرار کنه؟
تا حالا شده یه سرور که ترافیکش زیاده، یهو با خطاهایی مواجه بشه که انگار دیگه نمیتونه به دیتابیس یا یه سرویس دیگه وصل بشه، در حالی که CPU و RAM کاملاً آزادن؟ این مشکل معمولاً به خاطر تموم شدن چیزی به اسم Ephemeral Ports اتفاق میافته؛ portهای موقتی که kernel برای هر اتصال خروجی به صورت خودکار انتخاب میکنه تا بتونه جوابهای برگشتی رو به برنامه درست برسونه.
وقتی یه برنامه میخواد یه connection بسازه، kernel باید یه source port تعیین کنه تا یه 4-tuple منحصربهفرد (شامل Source IP, Source Port, Destination IP, Destination Port) ایجاد بشه. چون portهای پایین رزرو شدهان، kernel از یه بازه خاصی از portهای بالا استفاده میکنه که بهشون ephemeral port میگن. نکته اینجاست که هر socket برای شناسایی دقیق توی stack شبکه، نیاز به این ترکیب چهارگانه داره؛ پس اگه سرور بخواد هزاران اتصال همزمان به یه IP و port خاص (مثلاً دیتابیس) بزنه، به سرعت تمام portهای اون بازه تموم میشه.
این وضعیت باعث میشه پدیده Port Exhaustion رخ بده و kernel دیگه port آزاد برای باز کردن socket جدید نداشته باشه. این مشکل معمولاً با افزایش بازه portهای موقت یا فعال کردن قابلیتهایی مثل TCP reuse حل میشه تا سیستم بتونه از portهایی که هنوز توی حالت TIME_WAIT هستن دوباره استفاده کنه.
🌐 چرا یه سرور شلوغ یهو نمیتونه connection جدید برقرار کنه؟
تا حالا شده یه سرور که ترافیکش زیاده، یهو با خطاهایی مواجه بشه که انگار دیگه نمیتونه به دیتابیس یا یه سرویس دیگه وصل بشه، در حالی که CPU و RAM کاملاً آزادن؟ این مشکل معمولاً به خاطر تموم شدن چیزی به اسم Ephemeral Ports اتفاق میافته؛ portهای موقتی که kernel برای هر اتصال خروجی به صورت خودکار انتخاب میکنه تا بتونه جوابهای برگشتی رو به برنامه درست برسونه.
وقتی یه برنامه میخواد یه connection بسازه، kernel باید یه source port تعیین کنه تا یه 4-tuple منحصربهفرد (شامل Source IP, Source Port, Destination IP, Destination Port) ایجاد بشه. چون portهای پایین رزرو شدهان، kernel از یه بازه خاصی از portهای بالا استفاده میکنه که بهشون ephemeral port میگن. نکته اینجاست که هر socket برای شناسایی دقیق توی stack شبکه، نیاز به این ترکیب چهارگانه داره؛ پس اگه سرور بخواد هزاران اتصال همزمان به یه IP و port خاص (مثلاً دیتابیس) بزنه، به سرعت تمام portهای اون بازه تموم میشه.
این وضعیت باعث میشه پدیده Port Exhaustion رخ بده و kernel دیگه port آزاد برای باز کردن socket جدید نداشته باشه. این مشکل معمولاً با افزایش بازه portهای موقت یا فعال کردن قابلیتهایی مثل TCP reuse حل میشه تا سیستم بتونه از portهایی که هنوز توی حالت TIME_WAIT هستن دوباره استفاده کنه.
❓ به نظرتون برای جلوگیری از Port Exhaustion بهتره بازه portهای موقت رو زیاد کنیم یا روی تنظیمات TCP reuse متمرکز بشیم؟ دلیل انتخابتون رو تو کامنتا برامون بگین@things_to_know_channel
- ❤ 5
- 🔥 1
