مقدمه: شروع سفر وبسایت TravelBody
من شما را به سفری دعوت میکنم تا با هم داستان وبسایت خیالی TravelBody را دنبال کنیم و شاهد تبدیل آن از یک سرور ساده به یک سیستم پیچیده و قدرتمند باشیم. در طول این داستان، پنج مفهوم بنیادین و ضروری در دنیای شبکه، دقیقاً در زمانی که به آنها نیاز پیدا میکنیم، برای ما آشکار خواهند شد.
این ماجرا به چالش اصلی ما پاسخ میدهد: چگونه میتوان یک اپلیکیشن کاربردی، امن و مقیاسپذیر را در اینترنت ساخت؟
سفر ما با اولین و اساسیترین مشکلی که TravelBody با آن روبرو میشود، آغاز میگردد.
۱. گام اول: چگونه در اینترنت پیدا شویم؟ (آدرس IP و DNS)
وبسایت TravelBody بر روی یک سرور راهاندازی شده است. اولین سؤال این است: مشتریان چگونه میتوانند این سرور خاص را در میان میلیاردها دستگاه متصل به اینترنت پیدا کنند؟
پاسخ در آدرس IP نهفته است. هر دستگاهی که به شبکه متصل میشود، به یک شناسه منحصربهفرد به نام آدرس IP نیاز دارد تا سایر دستگاهها بتوانند دادهها را به آن ارسال کنند.
آدرس IP مانند «آدرس پستی یک خانه» است. بدون آن، هیچکس نمیداند بستهها را به کجا باید بفرستد.
اما یک محدودیت بزرگ وجود دارد: آدرسهای IP، مانند 203.0.113.10، رشتههایی از اعداد هستند که به خاطر سپردنشان برای انسانها دشوار است.
اینجاست که DNS (Domain Name System) به عنوان راهحل وارد میشود. DNS نامهای دامنه که به راحتی در حافظه میمانند (مانند travelbody.com) را به آدرسهای IP عددی ترجمه میکند. این فرآیند دقیقاً مانند دفترچه تلفن در گوشی شما عمل میکند؛ شما روی نام یک مخاطب ضربه میزنید و گوشی به طور خودکار شماره تلفن او را در پسزمینه پیدا میکند.
بنابراین، آدرسهای IP و DNS در کنار یکدیگر، سیستم آدرسدهی بنیادین اینترنت را میسازند؛ سیستمی که هم برای ماشینها دقیق و هم برای انسانها قابل فهم است.
اکنون که مشتریان میتوانند سرور ما را پیدا کنند، با چالش جدیدی در معماری داخلی آن مواجه میشویم.
۲. هدایت ترافیک: چگونه با اپلیکیشن درست صحبت کنیم؟ (پورتها)
چالش جدید: سرور TravelBody اکنون سه سرویس مختلف را اجرا میکند: وبسایت اصلی، یک پایگاه داده و یک سرویس پرداخت. اما همه آنها از یک آدرس IP مشترک استفاده میکنند. وقتی درخواستی به سرور میرسد، سرور از کجا میداند که این درخواست باید به کدام اپلیکیشن تحویل داده شود؟
این مشکل با استفاده از پورتها حل میشود. پورتها کانالهای شمارهگذاریشده روی یک سرور هستند که هر اپلیکیشن به یکی از آنها گوش میدهد.
یک سرور را مانند یک ساختمان آپارتمانی در نظر بگیرید. آدرس IP، آدرس خیابان ساختمان است و پورتها شماره آپارتمانهای منحصربهفرد داخل آن هستند.
برای مثال، سرویسهای ما به این شکل تنظیم شدهاند:
- وبسایت: پورت 80 یا 443 (برای اتصال امن)
- پایگاه داده MySQL: پورت 3306
- سرویس پرداخت سفارشی: پورت 9090
وقتی مشتری از travelbody.com بازدید میکند، مرورگر او به طور خودکار به پورت 443 متصل میشود و سرور میداند که باید ترافیک را به اپلیکیشن وبسایت هدایت کند، نه به پایگاه داده یا سرویس دیگر.
پورتها به یک سرور اجازه میدهند تا با کارایی بالا، به طور همزمان میزبان چندین سرویس مجزا باشد و از یک آدرس IP واحد، حداکثر استفاده را ببرد.
حالا که TravelBody به درستی کار میکند و مشتریان میتوانند به تمام سرویسهای ما دسترسی داشته باشند، موفقیت، یک چالش حیاتیتر را به همراه میآورد: امنیت.
۳. ایجاد مناطق امن: چگونه شبکه را تقسیمبندی کنیم؟ (Subnet و Routing)
با محبوب شدن TravelBody، هزاران کاربر اطلاعات کارت اعتباری خود را در سیستم ذخیره میکنند. ریسک دیگر یک مسئله تئوری نیست؛ یک نفوذ امنیتی میتواند شرکت را نابود کند. این ما را مجبور میکند که دیگر فقط مانند یک توسعهدهنده فکر نکنیم، بلکه مانند یک معمار امنیت عمل کنیم. نگهداری وبسایت، پایگاه داده و اطلاعات پرداخت، همگی روی یک سرور بسیار خطرناک است.
راهحل این مشکل، تقسیمبندی شبکه (Network Segmentation) با استفاده از Subnet است. ما شبکه خود را به بخشهای ایزوله تقسیم میکنیم، درست مانند بیمارستانی که بخشهای مختلفی مانند زایمان و جراحی دارد تا همه چیز به صورت منظم و ایمن از هم جدا باشد.
اما تقسیمبندی، مشکل جدیدی ایجاد میکند: اگر وبسایت در یک سابنت و پایگاه داده در سابنت دیگری باشد، چگونه با یکدیگر ارتباط برقرار میکنند؟
اینجاست که Routing (مسیریابی) ضروری میشود. مسیریابی ترافیک را بین بخشهای مختلف شبکه هدایت میکند. وقتی وبسایت به دادهای از پایگاه داده نیاز دارد، یک روتر بهترین مسیر را برای رسیدن داده از نقطه A به نقطه B تعیین میکند. این مفهوم در واقع مانند یک GPS برای دادههای شبکه عمل میکند.
سابنتها و مسیریابی ابزارهایی هستند که با جداسازی اجزای حساس و در عین حال فراهم کردن ارتباطات کنترلشده و ضروری، شبکههایی سازمانیافته و اساساً امنتر میسازند.
حالا که اتاقهای جداگانه ایجاد کردهایم، سؤال بعدی این است: چگونه درهای این اتاقها را قفل کنیم؟
۴. نگهبان دروازه: چگونه دسترسی را کنترل کنیم؟ (فایروالها)
مشکل فعلی این است که ما شبکه خود را به مناطق (سابنتها) تقسیم کردهایم، اما تمام مسیرهای بین آنها باز و بدون کنترل هستند.
نقش فایروال (Firewall) در اینجا مشخص میشود. فایروال مانند یک نگهبان امنیتی عمل میکند که هر بسته ترافیکی را بررسی کرده و بر اساس مجموعهای از قوانین، تصمیم میگیرد که به آن اجازه عبور بدهد یا آن را مسدود کند. دو نوع اصلی فایروال وجود دارد:
| نوع فایروال (Firewall Type) | توضیحات (Description) |
| فایروال میزبان (Host Firewall) | از یک سرور منحصربهفرد محافظت میکند. (مثال: فقط به IPهای سابنت وبسایت اجازه اتصال به پایگاه داده روی پورت 3306 را میدهد.) |
| فایروال شبکه (Network Firewall) | بین سابنتها قرار میگیرد و ترافیک بین آنها را فیلتر میکند. (مثال: فقط به ترافیک ورودی از اینترنت روی پورت 443 اجازه ورود به سابنت وبسایت را میدهد.) |
فایروالها لایه حیاتی اجرای امنیت هستند که با اعمال سیاستهای کنترل دسترسی سختگیرانه، یک شبکه تقسیمبندیشده را به یک شبکه واقعاً امن تبدیل میکنند.
با این لایههای امنیتی، آخرین مشکل اساسی شبکه برای ما مطرح میشود: سرورهای داخلی و محافظتشده ما چگونه با دنیای خارج ارتباط برقرار کنند؟
۵. دسترسی امن به بیرون: چگونه از شبکه خصوصی به اینترنت متصل شویم؟ (NAT)
آخرین چالش برای زیرساخت رو به رشد TravelBody این است: سرورهای بکاند برای امنیت در یک سابنت خصوصی قرار دارند. آنها دارای آدرسهای IP خصوصی هستند که نمیتوانند مستقیماً با اینترنت ارتباط برقرار کنند. اما این سرورها نیاز دارند تا بهروزرسانیهای نرمافزاری را دانلود کنند یا به APIهای خارجی متصل شوند.
راهحل این مشکل NAT (Network Address Translation) است. NAT یک دروازه است که به چندین دستگاه با آدرس IP خصوصی اجازه میدهد تا با استفاده از یک آدرس IP عمومی مشترک، به اینترنت دسترسی پیدا کنند.
NAT را مانند یک منشی در یک اداره در نظر بگیرید. وقتی یک کارمند (سرور خصوصی) نیاز به تماس خارجی دارد، از منشی میخواهد که با استفاده از شماره اصلی شرکت (آدرس IP عمومی) این کار را انجام دهد. منشی (دستگاه NAT) تماس را برقرار کرده و هنگام بازگشت تماس، به خاطر میآورد که این پاسخ برای کدام کارمند است و آن را به میز مربوطه هدایت میکند.
NAT روشی امن و کارآمد برای سرویسهای داخلی محافظتشده فراهم میکند تا بدون اینکه مستقیماً در معرض اینترنت قرار بگیرند، به آن دسترسی داشته باشند و به این ترتیب امنیت را افزایش داده و در مصرف آدرسهای IP عمومی صرفهجویی میکند.
اکنون سفر ما به پایان رسیده و زیرساخت شبکه TravelBody کامل شده است.
جمعبندی: پایههای اصلی شبکه
به زیرساختی که برای TravelBody ساختهایم نگاه کنید. این سفر با یک آدرس ساده شروع شد و اکنون به یک قلعه دیجیتال خوشطرح تبدیل شده است که دارای مناطق مجزا، دروازههای محافظتشده و کانالهای امن برای ارتباط با دنیای خارج است. هر چالشی که شرکت با آن روبرو شد، ما را وادار کرد تا لایه جدیدی از پیچیدگی و هوشمندی را به آن اضافه کنیم و این پنج مفهوم کلیدی را به طور طبیعی بیاموزیم.
این مفاهیم، پایههای اصلی هر سیستم شبکهای را تشکیل میدهند:
- آدرس IP و DNS: هر دستگاه به یک شناسه منحصربهفرد (IP) نیاز دارد تا دیگران بتوانند آن را پیدا کنند و DNS نامهای قابل فهم برای انسان را به این شناسهها ترجمه میکند.
- پورتها: اپلیکیشنهای مختلف روی یک سرور به درهای متفاوتی (پورتها) برای دریافت ترافیک نیاز دارند تا دادهها به مقصد درست برسند.
- Subnet و Routing: برای امنیت و سازماندهی، شبکهها به بخشهای جداگانه (سابنتها) تقسیم میشوند و مسیریابی (Routing) ارتباط بین این بخشها را مدیریت میکند.
- فایروالها: برای کنترل ترافیک مجاز بین بخشهای مختلف شبکه و پورتها، به فایروال نیاز داریم.
- NAT: وقتی اپلیکیشنهای بکاند در شبکههای خصوصی ایمنسازی میشوند، NAT به عنوان یک دروازه عمل میکند تا به آنها اجازه دهد به صورت امن به اینترنت دسترسی داشته باشند.
چه با سرورهای فیزیکی کار کنید، چه با زیرساخت ابری یا کانتینرها، این اصول بنیادین شبکه هرگز تغییر نمیکنند. تسلط بر این مفاهیم کلید درک هر سیستم شبکهای است.