IP، Subnet، Routing و Port

IP Address چیست؟

هر دستگاه در شبکه یک آدرس IP دارد — چیزی شبیه آدرس پستی، اما برای بسته‌های دیجیتال. نسخه‌ی رایج، IPv4 است: چهار عدد بین ۰ تا ۲۵۵ که با نقطه از هم جدا شده‌اند، مثل 192.168.56.10. در IPv6 آدرس‌ها طولانی‌تر و بر پایه‌ی hex هستند (مثلاً fe80::1)، اما در این درس تمرکزمان روی IPv4 است چون هنوز رایج‌ترین چیزی است که در محیط‌های DevOps می‌بینید.

هر آدرس IP از دو بخش تشکیل شده: بخش Network (اینکه دستگاه در کدام شبکه است) و بخش Host (خودِ دستگاه). Subnet Mask مشخص می‌کند کجا این دو بخش از هم جدا می‌شوند. در نوشتار 192.168.1.10/24، عدد /24 می‌گوید ۲۴ بیت اول (یعنی سه عدد اول) بخش شبکه است؛ هر دستگاهی که این سه عدد اولش با شما یکسان باشد، در همان شبکه‌ی محلی است و مستقیم به شما می‌رسد، بدون واسطه.

چرا این تفاوت مهم است؟ چون تصمیم اول هر بسته همین است: «مقصد در همین شبکه‌ی محلی است، یا باید از یک روتر عبور کند؟» اگر دو دستگاه در یک Subnet باشند (مثلاً هر دو /24 و سه عدد اولشان یکسان)، مستقیم و بدون واسطه به هم می‌رسند. اگر نباشند، بسته باید از Gateway رد شود — همان چیزی که در بخش بعد با Routing می‌بینیم.

محدوده‌های Private و Public

بخشی از محدوده‌های IPv4 مخصوص شبکه‌های داخلی است و در اینترنت عمومی مسیریابی نمی‌شود (طبق RFC 1918). برخی از این محدوده‌ها را احتمالاً دیده‌اید:

محدودهمثالکاربرد رایج
10.0.0.0/810.0.5.20شبکه‌های سازمانی، Clusterها
172.16.0.0/12172.17.0.2شبکه‌ی Docker، برخی دیتاسنترها
192.168.0.0/16192.168.1.10روترهای خانگی، شبکه‌های کوچک

هر آدرسی خارج از این محدوده‌ها Public است و در سطح اینترنت یکتا. همین تفاوت پایه‌ی NAT را می‌سازد: شبکه‌ی داخلی با آدرس‌های Private کار می‌کند و یک دستگاه (معمولاً روتر) وقتی ترافیک می‌خواهد به بیرون برود، آدرس را بازنویسی می‌کند. این چیز غریبه‌ای نیست — همین الان در این دوره با آن کار کرده‌اید: در VirtualBox با NAT، ترافیک VM از طریق سیستم میزبان به بیرون می‌رود، و با Port Forwarding، اتصال SSH از 127.0.0.1:2222 روی میزبان به پورت 22 داخل VM می‌رسد.

مشاهده‌ی IP و Routing در لینوکس

در VM، دو دستور اول که باید با آن‌ها کار کنید این‌هاست:

1ip addr
2ip route show
  • ip addr آدرس IP هر Interface را نشان می‌دهد؛ دنبال خط‌های inet بگردید.
  • ip route show جدول Routing را نشان می‌دهد. خطی مانند default via 10.0.2.2 یعنی هر بسته‌ای که مقصدش در جدول تعریف نشده باشد، به همین Gateway فرستاده می‌شود — در VirtualBox NAT معمولاً همین 10.0.2.2 است.

معنای عملی Routing همین است: برای هر مقصد یا یک مسیر مشخص در جدول وجود دارد، یا کار به Gateway پیش‌فرض سپرده می‌شود. همین دو حالت، تمام منطق مسیریابی است.

پورت چیست و کدام‌ها مهم‌اند؟

آدرس IP شما را به یک دستگاه می‌رساند؛ اما آن دستگاه ممکن است ده‌ها برنامه هم‌زمان در حال اجرا داشته باشد. اینجاست که پورت (Port) وارد می‌شود: مشخص می‌کند پیام دقیقاً برای کدام برنامه است. ترکیب IP:پورت مقصد نهایی یک مکالمه را کامل می‌کند، و این‌جا در واقع در لایه‌ی Transport هستیم. پورت‌های ۰ تا ۱۰۲۳ برای سرویس‌های شناخته‌شده رزرو شده‌اند و باز کردنشان معمولاً به دسترسی root نیاز دارد.

این‌ها را در کار روزمره‌ی DevOps مدام می‌بینید — بهتر است از الان با آن‌ها آشنا شوید:

پورتسرویس
22SSH
80HTTP
443HTTPS
3306MySQL
5432PostgreSQL
6379Redis

پیش از این‌که هر پورتی را روی سرور باز کنید، بدانید پشتش چه سرویسی نشسته و آیا واقعاً باید از بیرون قابل‌دسترس باشد یا نه. برای دیدن این‌که چه چیزی روی سیستم شما گوش می‌دهد:

1ss -tulpn

خروجی این دستور برای هر Socket پروتکل، آدرس، پورت و نام فرایند را نشان می‌دهد. این فهرست، همیشه اولین قدم عیب‌یابی روی یک سرور تازه است: مثلاً اگر NGINX روی پورت 80 بالا نمی‌آید، اول ببینید آیا کسی دیگر آن پورت را قبلاً گرفته است یا نه.

تمرین

در VM این سه دستور را اجرا کنید و خروجی‌هایشان را با هم تطبیق دهید:

1ip addr
2ip route show
3ss -tulpn

از خروجی ip addr آدرس IP و بخش /24 یا /8 جلوی آن را به خاطر بسپرید. بعد به خروجی ip route show نگاه کنید و مسیر default via ... را پیدا کنید — این همان Gateway است که هر بسته‌ی بی‌مقصد را تحویلش می‌دهید.

مستقیم به VM متصل شوید (نه با SSH) و سپس سرویس SSH را (در صورت خاموش بودن) با sudo systemctl start ssh.service روشن کنید و ss -tulpn را ببینید تا خط مرتبط با گوش‌دادن به پورت 22 را پیدا کنید. حالا یک قدم فراتر بروید: سرویس را متوقف کنید (sudo systemctl stop ssh.service) و ss -tulpn را دوباره اجرا کنید. آن خط باید ناپدید شده باشد. این تجربه‌ی کوچک همان چیزی است که در عیب‌یابی واقعی مدام تکرار می‌شود: وقتی یک سرویس «در دسترس نیست»، اولین سؤال همیشه همین است — آیا اصلاً روی آن پورت گوش می‌دهد؟

منابع یادگیری

ویدیو