معرفی و تعریف
شبکه و ارتباطات سرویسها مهارتی است که به شما کمک میکند مسیر ارتباط میان کاربران، سرویسها، سرورها و سایر اجزای زیرساخت را درک، طراحی و عیبیابی کنید. فردی که این مهارت را دارد، میداند یک درخواست از نام دامنه تا رسیدن به سرویس مقصد چه مراحلی را طی میکند و در هر مرحله چه خطاهایی ممکن است رخ دهد.
مهمترین مفاهیم شبکه و ارتباطات سرویسها
برای یادگیری این مهارت، باید با مفاهیم زیر آشنا باشید.
آدرس IP
پورت
سامانه نام دامنه (Domain Name System یا DNS)
مسیریابی
پروتکل انتقال ابرمتن (Hypertext Transfer Protocol یا HTTP)
امنیت لایه انتقال (Transport Layer Security یا TLS)
فایروال
پروکسی معکوس (Reverse Proxy)
متعادلسازی بار (Load Balancing)
البته هدف از یادگیری این مفاهیم فقط حفظ کردن آنها نیست. شما باید بتوانید علت خطاهایی مانند پایان زمان انتظار اتصال (Connection Timeout)، اتصال ردشده (Connection Refused)، خطای گواهی TLS یا پاسخ ندادن یک سرویس را شناسایی و برطرف کنید.
این مهارت برای چه کسانی مناسب است؟
اگر برای ورود به موقعیتهای شغلی «کارشناس DevOps»، «مهندس DevOps»، «مدیر سیستم لینوکس» یا توسعهدهنده بکاند در بازار کار ایران آماده میشوید، یادگیری این مهارت برای شما ضروری است. همچنین در محیطهای کانتینری، این دانش برای برقراری ارتباط میان کانتینرها، سرویسها و ورودیهای خارجی نقش مهمی دارد.
اهمیت و کاربردها
چرا این مهارت مهم است؟
اهمیت شبکه و ارتباطات سرویسها در دواپس
در دواپس، استقرار موفق یک برنامه فقط به ساخت ایمیج یا اجرای خط تحویل محدود نمیشود. سرویس باید از مسیر درست در دسترس باشد، نام دامنه به مقصد صحیح ترجمه شود، ترافیک HTTPS گواهی معتبر دریافت کند و اجزای داخلی نیز با استفاده از پورت و سیاستهای دسترسی مناسب با یکدیگر ارتباط برقرار کنند.
چگونه مهارت خود را در این حوزه نشان دهید؟
اگر برای موقعیتهای «کارشناس DevOps»، «مهندس DevOps» یا «مدیر سیستم لینوکس» در شرکتهای نرمافزاری، فروشگاههای آنلاین یا تیمهای دارای زیرساخت ابری آماده میشوید، بهتر است توانایی خود را با یک سناریوی عملی استقرار نشان دهید. در چنین سناریویی باید بتوانید:
پروکسی معکوس (Reverse Proxy) را پیکربندی کنید.
لاگها را بررسی و تحلیل کنید.
دسترسیهای موردنیاز را بهدرستی محدود کنید.
علت اختلال میان سرویسها را مرحلهبهمرحله شناسایی و توضیح دهید.
انجام چنین کارهایی، نسبت به نام بردن از ابزارها در رزومه، شواهد قابلاعتمادتر و ملموستری از تواناییهای فنی شما ارائه میدهد.
اهمیت این مهارت برای توسعهدهندگان بکاند
این مهارت برای توسعهدهندگان بکاند نیز اهمیت زیادی دارد زیرا بسیاری از خطاهای محیط عملیاتی به کد برنامه مربوط نمیشوند. درک تفاوت میان خطاهای DNS، اتصال TCP، پاسخ HTTP و اعتبار TLS به شما کمک میکند منشأ مشکل را سریعتر تشخیص دهید و آن را به تیم یا لایه مناسب ارجاع دهید.
یادگیری این مهارت چقدر زمان میبرد؟
اگر مدیریت لینوکس را در سطح مقدماتی بلد باشید و هفتهای حدود ۱۰ ساعت تمرین کنید، معمولاً برای رسیدن به سطح کاربردی این مهارت به ۱۲۰ تا ۱۶۰ ساعت تمرین نیاز خواهید داشت. اگر تازه کار با لینوکس را آغاز کردهاید، رسیدن به همین سطح معمولاً به ۱۶۰ تا ۲۲۰ ساعت تمرین نیاز دارد زیرا باید همزمان کار با خط فرمان، فرایندها و سرویسهای لینوکس را نیز یاد بگیرید.
کاربردها
-
راهاندازی دامنه و HTTPS برای سرویس وب
تنظیم DNS، هدایت درخواستها به وبسرور و فعالسازی TLS برای دسترسی امن کاربران به یک برنامه.
-
پیکربندی پروکسی معکوس
ارسال درخواستهای ورودی از Nginx به سرویسهای داخلی و مدیریت هدرها، زمان انتظار و مسیرهای مختلف.
-
عیبیابی اختلال میان دو سرویس
تشخیص اینکه خطا از نام دامنه، مسیر شبکه، پورت مقصد، فایروال، TLS یا خود برنامه ناشی شده است.
-
طراحی دسترسی سرویسهای کانتینری
اتصال سرویسهای داخل Docker یا Kubernetes بدون بازکردن غیرضروری پورتها برای اینترنت عمومی.
-
توزیع ترافیک بین چند نمونه سرویس
قرار دادن چند نمونه از یک برنامه پشت متعادلکننده بار برای افزایش ظرفیت و کاهش اثر خرابی یک نمونه.
-
اعمال محدودیت و سیاست دسترسی
تعریف قواعد فایروال و محدودکردن پورتها و مبداهای مجاز برای کاهش سطح حمله سرویسها.
-
پایش خطاهای ارتباطی
بررسی زمان پاسخ، خطاهای اتصال و نرخ پاسخهای ناموفق برای تشخیص زودهنگام مشکل شبکه یا وابستگیها.
پیشنیازها
پیش از شروع، بهتر است با موارد زیر آشنا باشید.
مسیر یادگیری شبکه و ارتباطات سرویسها
-
۲۵ ساعت
مدل ارتباط یک درخواست شبکه را توضیح دهید
مفاهیم پایه شبکه شامل آدرس IP، شبکه خصوصی و عمومی، پورت، پروتکل کنترل انتقال (Transmission Control Protocol یا TCP)، پروتکل دادهنگار کاربر (User Datagram Protocol یا UDP) و تفاوت ارتباط اتصالگرا و بدون اتصال را بیاموزید. سپس مسیر یک درخواست از مرورگر تا سرور را با یک نمودار ساده توضیح دهید و تفاوت خطای اتصال با خطای پاسخ برنامه را تشخیص دهید.
-
۲۵ ساعت
نام دامنه و مسیر رسیدن به سرویس را بررسی کنید
نحوه کار DNS، رکوردهای A، AAAA، CNAME و زمان اعتبار رکورد را یاد بگیرید. با nslookup و dig بررسی کنید یک نام دامنه به چه آدرسی ترجمه میشود. ping و traceroute فقط ابزارهای کمکیاند؛ نبود پاسخ آنها میتواند نتیجه مسدودبودن ICMP یا سیاست مسیر شبکه باشد و بهتنهایی خرابی سرویس را ثابت نمیکند.
اگر سرویس داخلی نام دامنه ندارد، بررسی را از نام سرویس، IP یا پورت مقصد آغاز کنید. برای سرویس HTTPS، اتصال TCP و درخواست HTTP را با نام میزبان درست بررسی کنید تا انتخاب گواهی و هدر میزبان نیز در آزمون دخالت داشته باشد.
-
۳۰ ساعت
درخواستهای HTTP و اتصال TLS را تحلیل کنید
ساختار درخواست و پاسخ HTTP، کدهای وضعیت، هدرها، کوکیها، زمان انتظار و اتصال پایدار را تمرین کنید. سپس نقش گواهی دیجیتال، زنجیره اعتبار، نام دامنه در گواهی و تفاوت HTTP با HTTPS را بیاموزید. با curl پاسخ، هدرها و خطاهای TLS یک سرویس آزمایشی را بررسی کنید.
-
۲۵ ساعت
دسترسی شبکه را با پورت و فایروال کنترل کنید
یاد بگیرید یک فرایند روی چه پورتی در حال گوشدادن است و چگونه با ss، lsof و nc وضعیت اتصال را بررسی کنید. مفهوم ورودی و خروجی فایروال، حداقلسازی پورتهای باز و تفاوت دسترسی از localhost، شبکه داخلی و اینترنت را در یک ماشین لینوکسی تمرین کنید.
-
۲۵ ساعت
پروکسی معکوس و توزیع بار را پیکربندی کنید
با Nginx یک سرویس وب را پشت پروکسی معکوس قرار دهید. مسیرهای متفاوت را به دو سرویس آزمایشی هدایت کنید، هدرهای لازم را ارسال کنید و زمان انتظار مناسب تنظیم کنید. سپس مفهوم بررسی سلامت سرویس، توزیع بار و اثر خرابی یک نمونه سرویس را درک کنید.
-
۲۰ ساعت
ارتباط سرویسها را در محیط کانتینری عیبیابی کنید
یک برنامه چندسرویسی را با Docker اجرا کنید و تفاوت نام سرویس، پورت داخلی و پورت منتشرشده را بررسی کنید. برای هر خطا، از DNS کانتینری تا اتصال پورت و لاگ برنامه، یک ترتیب ثابت برای عیبیابی بسازید. در پایان، شاخصهای خطا و زمان پاسخ را با Prometheus جمعآوری و در Grafana مشاهده کنید.
زمان تقریبی یادگیری
برآورد مجموع زمان آموزش، مطالعه و تمرین تا رسیدن به سطح کاربردی؛ بسته به پیشزمینه شما میتواند کمتر یا بیشتر باشد.
پروژههای تمرینی
برای آشنایی بهتر با این مهارت، توجه به موارد زیر میتواند مفید باشد.
-
استقرار دو سرویس پشت Nginx
توضیح پروژه: دو سرویس ساده اجرا کنید و با Nginx درخواستهای مسیر /api و /app را به مقصدهای متفاوت بفرستید. HTTPS، هدرهای پروکسی و صفحه خطای مناسب را نیز تنظیم کنید.
-
دفترچه عیبیابی خطاهای اتصال
توضیح پروژه: پنج خطای عمدی مانند DNS نادرست، پورت بسته، گواهی نامعتبر، پایان زمان انتظار و سرویس خاموش ایجاد کنید. برای هر مورد، نشانهها، دستور بررسی و علت نهایی را ثبت کنید.
-
برنامه چندسرویسی با Docker
توضیح پروژه: یک سرویس وب، یک API و یک پایگاه داده را در شبکه Docker اجرا کنید. فقط سرویس وب را روی میزبان منتشر کنید و ارتباط داخلی اجزا را با نام سرویس بررسی کنید.
-
پایش دسترسپذیری یک endpoint
توضیح پروژه: برای یک endpoint آزمایشی، زمان پاسخ و خطاهای HTTP را با Prometheus جمعآوری و در Grafana نمایش دهید. یک هشدار ساده برای افزایش خطا یا کندی پاسخ تعریف کنید.
پرسشهای رایج درباره شبکه و ارتباطات سرویسها
در این بخش، به تعدادی از پرسشهای رایج درباره این مهارت پاسخ داده شده است.
آیا برای یادگیری شبکه و ارتباطات سرویسها باید مهندس شبکه شوم؟
خیر. برای موقعیتهای کارشناس یا مهندس DevOps، مدیر سیستم لینوکس و توسعهدهنده بکاند، لازم نیست طراحی شبکه سازمانی را در سطح تخصصی بلد باشید. تمرکز شما باید بر DNS، پورت، HTTP، TLS، مسیریابی پایه، فایروال، پروکسی و عیبیابی ارتباط سرویسها باشد.
تفاوت شبکه و ارتباطات سرویسها با مدیریت سیستم لینوکس چیست؟
مدیریت لینوکس بر کار با سیستمعامل، فرایندها، فایلها، کاربران و سرویسها تمرکز دارد. شبکه و ارتباطات سرویسها بر مسیر دسترسی و تبادل داده میان ماشینها و سرویسها متمرکز است. این دو مهارت در کار دواپس مکمل هم هستند.
برای عیبیابی خطای اتصال از کجا شروع کنم؟
نقطه شروع را با نوع مقصد انتخاب کنید. برای سرویس دارای دامنه، ابتدا DNS و سپس اتصال TCP و درخواست HTTP یا HTTPS با نام میزبان درست را بررسی کنید. برای سرویس داخلی بدون DNS، از نام سرویس، IP یا پورت آغاز کنید. ping و traceroute فقط نشانه کمکیاند؛ مسدودبودن ICMP یا سیاست مسیر میتواند پاسخ آنها را قطع کند، بدون آنکه سرویس خراب باشد.
آیا یادگیری Nginx برای این مهارت ضروری است؟
Nginx تنها گزینه نیست، اما ابزار رایجی برای تمرین پروکسی معکوس، TLS و توزیع ترافیک است. یادگیری مفاهیم مهمتر از وابستگی به یک ابزار است؛ با این حال تمرین عملی با Nginx برای موقعیتهای DevOps و مدیریت سیستم لینوکس مفید است.
آیا Docker و Kubernetes جزو شبکه محسوب میشوند؟
خود Docker و Kubernetes ابزارهای کانتینرسازی و ارکستراسیون هستند، اما هر دو مدل شبکه و کشف سرویس دارند. برای کار عملی با آنها باید بتوانید تفاوت پورت داخلی، پورت منتشرشده، نام سرویس و دسترسی بیرونی را بفهمید.
چگونه مهارت شبکه خود را در رزومه نشان دهم؟
بهجای نوشتن عنوان کلی «Network»، پروژهای قابل بررسی ارائه کنید: مثلاً استقرار چند سرویس پشت Nginx با HTTPS، تنظیم دسترسیها و مستند عیبیابی چند خطای ارتباطی. فایل تنظیمات و توضیح تصمیمها را در مخزن پروژه قرار دهید.
آموزشهای مرتبط در فرادرس
-
آموزش نتورک پلاس +Network و اصول شبکه + کاربردی و عملی + گواهینامه
-
آموزش داکر جادی، مفاهیم و شروع کار با Docker (رایگان) + گواهینامه
-
آموزش فریم ورک Django Rest در پایتون، پروتکل HTTP (رایگان)
-
DNS چیست، دی ان اس به زبان ساده (رایگان)
-
آموزش هدرها (Headers) (رایگان)
-
وایرشارک چیست و چه کاربردی دارد؟، آشنایی با ابزار شبکه Wireshark به زبان ساده
-
TCP IP چیست؟، به زبان ساده + لایه ها، نحوه کار و تفاوت با OSI
-
پروتکل SSL چیست؟ | پروتکل HTTPS و رمزنگاری SSL، به زبان ساده