تأخیر (Latency) چیست و چرا با پینگ یکی نیست
تأخیر، مدتزمان رفتوبرگشت یک بسته از مبدأ تا مقصد و برگشت به مبدأ است. واحد آن میلیثانیه (ms) است. وقتی میگویی «پینگم ۴۰ است»، در واقع داری RTT (Round-Trip Time) را میگویی، نه تأخیر یکطرفه. تأخیر یکطرفه معمولاً نصف RTT است، اما در مسیرهای نامتقارن این قانون شکسته میشود؛ مسیر رفت از یک اپراتور میرود و برگشت از اپراتور دیگر.
برای اندازهگیری از ping با پرچم -c برای تعداد بسته استفاده کن:
ping -c 10 8.8.8.8
خروجی شامل min/avg/max است. عدد avg را نگاه کن، نه min را. حداقل تأخیر همیشه فریبنده است؛ میانگین واقعیت مسیر را نشان میدهد.
تأخیر ۱ تا ۲۰ میلیثانیه در شبکه محلی عادی است. بالای ۱۰۰ میلیثانیه در مسیر بینالمللی یعنی ترافیک از مسیر اشباعشده یا فیبر نوری با فاصله زیاد عبور میکند. تأخیر نور در فیبر حدود ۵ میکروثانیه بر کیلومتر است؛ پس تهران تا فرانکفورت، حدود ۴۰۰۰ کیلومتر، حداقل فیزیکی ۴۰ میلیثانیه RTT دارد. هر عددی خیلی کمتر از این، یعنی مسیر مستقیمتر یا اندازهگیری ناقص.
اینجا اشتباه میکنند: تأخیر بالا را با پهنای باند کم اشتباه میگیرند. دانلود یک فایل ۱۰۰ مگابایتی با تأخیر ۲۰۰ میلیثانیه و پهنای باند ۱۰۰ مگابیت بر ثانیه، حدود ۸ ثانیه طول میکشد. همان فایل با تأخیر ۵ میلیثانیه و پهنای باند ۱ مگابیت بر ثانیه، ۸۰۰ ثانیه. دو مشکل کاملاً متفاوت با دو راهحل متفاوت.
پهنای باند و توان عملیاتی: عددی که فروشنده میگوید با عددی که میگیری فرق دارد
پهنای باند (Bandwidth) حداکثر ظرفیت نظری مسیر است، بر حسب بیت بر ثانیه (bps). توان عملیاتی (Throughput) مقداری است که واقعاً جابهجا میشود. تفاوت این دو، overhead پروتکلهاست: TCP سهبار handshake میکند، هر بسته هدر دارد، و ACK برمیگردد.
یک قانون سرانگشتی: توان عملیاتی واقعی TCP روی یک لینک، معمولاً ۸۰ تا ۹۰ درصد پهنای باند نامی است. اگر سرویست ۱۰ مگابیت بر ثانیه است و دانلودت با ۱٫۲ مگابایت بر ثانیه (۹٫۶ مگابیت) انجام میشود، همهچیز سر جایش است. برای اندازهگیری دقیق از iperf3 استفاده کن:
iperf3 -c server_ip -t 30
پرچم -t مدت آزمون را مشخص میکند. سی ثانیه حداقل منصفانه است؛ آزمونهای کوتاهتر تحت تأثیر TCP slow start قرار میگیرند و عدد کم نشان میدهند.
واحدها را جدی بگیر. مگابیت (Mb) با مگابایت (MB) فرق دارد؛ ضریب ۸. سرویسدهندهها تقریباً همیشه مگابیت میگویند، ابزارهای دانلود مگابایت نشان میدهند. اگر عدد دانلودت ۱۲٫۵ مگابایت بر ثانیه است، یعنی ۱۰۰ مگابیت بر ثانیه داری.
چرا پرش (Hop) مهم است و چه ربطی به تأخیر دارد
پرش یعنی عبور بسته از یک مسیریاب (Router). هر پرش، تأخیر اضافه میکند؛ معمولاً ۱ تا ۵ میلیثانیه در مسیرهای شهری، و بیشتر در مسیرهای بینالمللی. ابزار traceroute (یا tracert در ویندوز) مسیر را نشان میدهد:
traceroute -n example.com
پرچم -n جلوی reverse DNS را میگیرد و خروجی را سریعتر میکند. هر خط یک پرش است. سه ستاره (* * *) یعنی آن مسیریاب به ICMP جواب نمیدهد؛ این لزوماً مشکل نیست، بعضی مسیریابها عمداً پاسخ نمیدهند.
تعداد پرشها به خودی خود مشکل نیست. مشکل وقتی است که یک پرش خاص تأخیرش ناگهان از ۵ به ۱۵۰ میلیثانیه میپرد. آن نقطه، گلوگاه است. دنبال اولین پرش با جهش ناگهانی بگرد، نه آخرین پرش.
MTU: عددی که اگر اشتباه بگیری، بستهها بیصدا گم میشوند
MTU (Maximum Transmission Unit) حداکثر اندازه یک فریم در لایه پیوند داده است، بر حسب بایت. مقدار استاندارد در اترنت ۱۵۰۰ بایت است. در PPPoE (که خیلی از اتصالات ADSL و فیبر ایران استفاده میکنند) این عدد ۱۴۹۲ میشود؛ ۸ بایت هدر PPPoE از آن کم میکند.
اگر MTU مسیر از MTU رابط تو کوچکتر باشد، دو اتفاق میافتد: بستههای بزرگ خرد میشوند (Fragmentation) یا اگر پرچم DF (Don't Fragment) فعال باشد، دور ریخته میشوند و پیام ICMP «Fragmentation Needed» برمیگردد. خیلی از فایروالها این پیام را میخورند و نتیجه، اتصالهایی است که صفحه باز میکنند اما دانلود یا آپلود قفل میکند.
برای پیدا کردن MTU مناسب از ping با پرچمهای -M do (در لینوکس) و -s برای اندازه payload استفاده کن:
ping -M do -s 1472 -c 5 8.8.8.8
۱۴۷۲ بایت payload + ۲۸ بایت هدر IP/ICMP = ۱۵۰۰ بایت. اگر جواب گرفتی، MTU مسیر ۱۵۰۰ است. اگر نه، عدد را کم کن تا جواب بگیری. اینجا اشتباه میکنند: MTU را روی ۱۴۰۰ میگذارند «برای احتیاط». نتیجه، هدر رفتن ۶ درصد پهنای باند و تأخیر بیشتر در هر بسته است. MTU را دقیق اندازه بگیر، نه سرسری.
NAT و تفاوتش با پراکسی: هر دو IP را عوض میکنند، اما نه شبیه هم
NAT (Network Address Translation) آدرس مبدأ یا مقصد بسته را در مسیریاب عوض میکند. رایجترین شکل آن، NAT overload یا PAT است که هزاران دستگاه داخلی را پشت یک IP عمومی پنهان میکند. جدول NAT در مسیریاب، نگاشت IP داخلی:پورت به IP عمومی:پورت را نگه میدارد.
پراکسی (Proxy) اما در لایه بالاتر کار میکند. پراکسی به جای تو، اتصال جدیدی به مقصد برقرار میکند؛ مقصد، IP پراکسی را میبیند، نه IP تو را. NAT فقط آدرس را بازنویسی میکند، اما اتصال را همان کلاینت برقرار میکند.
تفاوت عملی این است: NAT برای پروتکلهای غیر از TCP/UDP کار نمیکند مگر با ماژولهای خاص (مثل nf_conntrack_pptp برای PPTP). پراکسی میتواند پروتکلهای لایه کاربردی مثل HTTP را بفهمد، کش کند، و فیلتر کند. برای همین است که NAT در مسیریاب خانگی کافی است اما در سازمان، پراکسی میگذارند.
اگر با NAT کار میکنی و سرویسی از بیرون باید به دستگاه داخلی برسد، Port Forwarding لازم است. روی لینوکس با nftables:
nft add rule nat prerouting dnat to 192.168.1.100:8080
این قاعده، ترافیک ورودی به پورت ۸۰ را به پورت ۸۰۸۰ دستگاه داخلی میفرستد. بدون این خط، بسته ورودی به مقصدی میرسد که هیچکس منتظرش نیست و دور ریخته میشود.
DNS: اولین چیزی که خراب میشود و آخرین چیزی که چک میکنند
DNS (Domain Name System) نام دامنه را به IP تبدیل میکند. رکورد A برای IPv4 است، AAAA برای IPv6، MX برای سرور ایمیل، و CNAME برای نام مستعار. وقتی میگویی «سایت باز نمیشود»، اول از همه DNS را چک کن.
ابزار dig دقیقترین خروجی را میدهد:
dig example.com A +short
پرچم +short فقط جواب نهایی را نشان میدهد. اگر خروجی خالی بود، رکورد وجود ندارد یا TTL منقضی شده و سرور DNS جوابی ندارد. TTL (Time To Live) مدت اعتبار کش رکورد است، بر حسب ثانیه. TTL کوتاه (۳۰۰ ثانیه) برای تغییرات سریع خوب است اما بار بیشتری به سرور DNS تحمیل میکند.
اینجا اشتباه میکنند: بعد از تغییر رکورد DNS، با dig جواب میگیرند اما مرورگر هنوز صفحه قدیمی را نشان میدهد. کش DNS مرورگر و سیستمعامل را فراموش میکنند. dig مستقیم به سرور DNS میرود و کش محلی را دور میزند؛ مرورگر از کش خودش استفاده میکند. دو مسیر متفاوت، دو نتیجه متفاوت.
پرسشهای پرتکرار
فرق پینگ و تأخیر چیست؟
پینگ هم ابزار است هم اصطلاح عامیانه برای تأخیر. خروجی ping مقدار RTT را نشان میدهد که رفتوبرگشت کامل است. تأخیر یکطرفه معمولاً نصف RTT است اما در مسیرهای نامتقارن این تناسب برقرار نیست.
MTU مناسب برای اینترنت ایران چقدر است؟
اگر اتصال تو PPPoE است (بیشتر ADSL و فیبر خانگی)، ۱۴۹۲ بایت. اگر اتصال مستقیم اترنت است، ۱۵۰۰. با دستور ping -M do -s 1472 در لینوکس میتوانی مقدار دقیق مسیر را پیدا کنی. MTU کمتر از حد لازم، پهنای باند را هدر میدهد.
چرا traceroute ستاره نشان میدهد؟
ستاره یعنی آن مسیریاب به بسته ICMP پاسخ نداده است. بعضی مسیریابها به دلایل امنیتی پاسخ نمیدهند یا ترافیک ICMP را محدود کردهاند. اگر پرشهای بعدی جواب میدهند، مشکل از مسیریاب بیپاسخ نیست.
NAT باعث کندی اینترنت میشود؟
خود NAT تأخیر محسوسی اضافه نمیکند؛ بازنویسی آدرس در حد میکروثانیه است. اما نگهداشتن جدول NAT روی مسیریاب ضعیف، با هزاران اتصال همزمان، میتواند CPU را اشباع کند و تأخیر ایجاد کند. مشکل از سختافزار است، نه از NAT.
قبل از اینکه به پشتیبانی تیکت بزنی، خروجی ping و traceroute را آماده کن. همین دو خروجی، نیمی از عیبیابی را انجام دادهاند. اگر به دنبال محیطی برای اجرای این دستورها و تست سناریوهای واقعی هستی، هاست لینوکس سرورنت بستر مناسبی برای تمرین و اندازهگیری است. بقیه راهنماها را در مستندات و پایگاه دانش ببین.