TAHA
04-23-2010, 10:19 PM
راه حل مربوط به time-out در کرنل 2.6.17 و بالاتر
امين ايزدپناه
به دلیل به وجود آمدن یک تغییر جدید در تنظیمات اندازهبندی پنجره TCP در کرنل 2.6.17 و بالاتر لینوکس، این احتمال وجود دارد که در اتصال به وب سایتهای خاص با مشکلاتی مواجه شوید. در این مقاله کوتاه من راهبردی را برای مشکل time-out به شما ارائه خواهم داد اما ابتدا اجازه دهید اندکی در مورد این مشکل توضیح دهم.
یک پکت نوعی TCP دارای یک فیلد پنجره است که حداکثر اندازه پنجره برابر با 64 کیلوبایت را امکانپذیر میسازد. این میزان هنگامی که اینترنت نوپا بود کفایت میکرد و اغلب سیستمها توان اداره چیز بزرگتری را نداشتند، اما این اندازه برای برنامههای خاص باند پهن امروزی کاملا کم است.
در نتیجه، یک راهکار به نام window scaling (اندازهبندی پنجره) در سال 1992 تدوین گردید؛ این یک گزینه TCP اضافی را فراهم میکند که حاوی یک فاکتور اندازه هشت بیتی میباشد. مقدار این فیلد مشخص میکند که اندازه پنجره باید چه میزان بزرگتر باشد، این کار با شیفت دادن مقدار اندازه پنجرهها به تعداد معینی از بیتها صورت میپذیرد. برای نمونه، اگر فاکتور اندازه 5 باشد، اندازه پنجره به میزان 5 بیت شیفت داده میشود یا در 32 ضرب میشود.
مسئله این است که در 2.6.16 و قبل از آن، فاکتور اندازه پیشفرض صفر بود، از این رو هیچ افزایشی در اندازه پنجره TCP وجود نداشت. در کرنل 2.6.17، این به مقدار 7 تغییر داده شد. در یک دنیای ایدهآل، این مشکلی محسوب نمیشود. در عمل، اما، برخی روترهای شکسته شده گزینه TCP اندازه پنجره را بازنویسی میکنند – تبدیل فاکتور اندازه به صفر اما باقی گذاشتن گزینه فعال کننده واقعی.
اساسا، همه این حرفها بدان معنی است که وب سایتهایی وجود دارد که نمیتوان از یک سیستم با استفاده از کرنل 2.6.17 و بالاتر به آنها متصل شد. عقیده توسعه دهندگان کرنل این است که روترهای مذکور شکسته شدهاند و باید جایگزین گردند. در دنیای واقعی، ممکن است این روترها قبل از اصلاح یا جایگزینی سالها کار کنند.
یک راهکار، reset کردن گزینه اندازهبندی پنجره کرنل لینوکس است. این کار باعث اصلاح روترهای شکسته شده نمیشود، اما این امکان را برای سیستم شما فراهم میسازد که اگر احساس کردید با مشکل اندازهبندی پنجره روبرو هستید به یک سایت دور متصل شود. اگر شما اطمینان دارید که این مشکلی است که با آن مواجه هستید، میتوانید آن را با اجرای این دستور تست نمایید:
echo 0 > /proc/sys/net/ipv4/tcp_default_win_scale
برای آن که این تنظیمات را دائمی کنید، /etc/sysctl.conf را ویرایش کرده و این را به آن بیافزایید:
net.ipv4.tcp_default_win_scale = 0
این اندازهبندی پنجره را کاملا غیر فعال خواهد کرد، که در نتیجه شما امکان دسترسی به برخی سایتها را خواهید یافت که قبلا قادر به دسترسی به آنها نبودید. درست یا اشتباه، توسعه دهندگان کرنل از برگرداندن تغییرات خودداری میکنند، بنابراین گزینههای موجود شامل غیر فعال کردن اندازهبندی پنجره و بازگشت به پیشفرضهای pre-2.6.17، یا تماس با آن سایتهایی است که دسترسی به آنها امکانپذیر نیست و تلاش برای متقاعد کردن آنها برای یافتن و جایگزینی روترهای شکسته شده.
امين ايزدپناه
به دلیل به وجود آمدن یک تغییر جدید در تنظیمات اندازهبندی پنجره TCP در کرنل 2.6.17 و بالاتر لینوکس، این احتمال وجود دارد که در اتصال به وب سایتهای خاص با مشکلاتی مواجه شوید. در این مقاله کوتاه من راهبردی را برای مشکل time-out به شما ارائه خواهم داد اما ابتدا اجازه دهید اندکی در مورد این مشکل توضیح دهم.
یک پکت نوعی TCP دارای یک فیلد پنجره است که حداکثر اندازه پنجره برابر با 64 کیلوبایت را امکانپذیر میسازد. این میزان هنگامی که اینترنت نوپا بود کفایت میکرد و اغلب سیستمها توان اداره چیز بزرگتری را نداشتند، اما این اندازه برای برنامههای خاص باند پهن امروزی کاملا کم است.
در نتیجه، یک راهکار به نام window scaling (اندازهبندی پنجره) در سال 1992 تدوین گردید؛ این یک گزینه TCP اضافی را فراهم میکند که حاوی یک فاکتور اندازه هشت بیتی میباشد. مقدار این فیلد مشخص میکند که اندازه پنجره باید چه میزان بزرگتر باشد، این کار با شیفت دادن مقدار اندازه پنجرهها به تعداد معینی از بیتها صورت میپذیرد. برای نمونه، اگر فاکتور اندازه 5 باشد، اندازه پنجره به میزان 5 بیت شیفت داده میشود یا در 32 ضرب میشود.
مسئله این است که در 2.6.16 و قبل از آن، فاکتور اندازه پیشفرض صفر بود، از این رو هیچ افزایشی در اندازه پنجره TCP وجود نداشت. در کرنل 2.6.17، این به مقدار 7 تغییر داده شد. در یک دنیای ایدهآل، این مشکلی محسوب نمیشود. در عمل، اما، برخی روترهای شکسته شده گزینه TCP اندازه پنجره را بازنویسی میکنند – تبدیل فاکتور اندازه به صفر اما باقی گذاشتن گزینه فعال کننده واقعی.
اساسا، همه این حرفها بدان معنی است که وب سایتهایی وجود دارد که نمیتوان از یک سیستم با استفاده از کرنل 2.6.17 و بالاتر به آنها متصل شد. عقیده توسعه دهندگان کرنل این است که روترهای مذکور شکسته شدهاند و باید جایگزین گردند. در دنیای واقعی، ممکن است این روترها قبل از اصلاح یا جایگزینی سالها کار کنند.
یک راهکار، reset کردن گزینه اندازهبندی پنجره کرنل لینوکس است. این کار باعث اصلاح روترهای شکسته شده نمیشود، اما این امکان را برای سیستم شما فراهم میسازد که اگر احساس کردید با مشکل اندازهبندی پنجره روبرو هستید به یک سایت دور متصل شود. اگر شما اطمینان دارید که این مشکلی است که با آن مواجه هستید، میتوانید آن را با اجرای این دستور تست نمایید:
echo 0 > /proc/sys/net/ipv4/tcp_default_win_scale
برای آن که این تنظیمات را دائمی کنید، /etc/sysctl.conf را ویرایش کرده و این را به آن بیافزایید:
net.ipv4.tcp_default_win_scale = 0
این اندازهبندی پنجره را کاملا غیر فعال خواهد کرد، که در نتیجه شما امکان دسترسی به برخی سایتها را خواهید یافت که قبلا قادر به دسترسی به آنها نبودید. درست یا اشتباه، توسعه دهندگان کرنل از برگرداندن تغییرات خودداری میکنند، بنابراین گزینههای موجود شامل غیر فعال کردن اندازهبندی پنجره و بازگشت به پیشفرضهای pre-2.6.17، یا تماس با آن سایتهایی است که دسترسی به آنها امکانپذیر نیست و تلاش برای متقاعد کردن آنها برای یافتن و جایگزینی روترهای شکسته شده.