پرش به مطلب اصلی

امروزه شبکه‌های کامپیوتری در همه بخش‌های زندگی ما نقش داشته و اکثر محصولات و سرویس‌های کامپیوتری از طریق بزرگترین شبکه کامپیوتری موجود یا همان اینترنت به دست کاربرها می‌رسند. به همین خاطر شناخت این شبکه‌ها برای بهینه کردن خدمت‌رسانی به کاربرها اهمیت زیادی دارد. در ادامه، نگاهی به بخش‌های مختلف شبکه‌های کامپیوتری می‌اندازیم و بعد از آن با چند پروتکل‌ مهم لایه اپلیکیشن آشنا می‌شویم.

چرا شبکه‌های کامپیوتری؟

با بوجود آمدن کامپیوترها، آن‌ها وظیفه انجام کارهای تکراری و محاسبات پیچیده را بر عهده گرفته و انجام کارهایی که قبلا برای ما سخت بود را ساده کردند. با گسترش استفاده از آن‌ها، نیاز جدیدی بوجود آمد. داده‌های پردازش شده بر روی این کامپیوترها باید به اشتراک گذاشته شده و بر روی کامپیوترهای دیگر و بوسیله افراد جدید استفاده و احتمالا بهبود داده می‌شدند، و شبکه‌های کامپیوتری برای رفع این نیاز ایجاد شدند.

احتمالا می‌دانید که می‌توان هر نوعی از داده را با ایجاد یک قرارداد خاص تبدیل به یک رشته باینری کرد. وظیفه شبکه‌های کامپیوتری انتقال این رشته‌های باینری بر روی واسط‌های مختلف و رساندن آن‌ها به دستگاه‌های دیگر است. اما چطور؟

اطلاعات بیشتر

در این آموزش به دلیل پیچیدگی، به اینکه داده‌ها در لایه فیزیکی چطور بوسیله سیم یا به صورت بی‌سیم منتقل می‌شوند نمی‌پردازیم. برای سادگی می‌توانید فرض کنید که این انتقال با تغییر ولتاژ روی سیم، اتفاق می‌افتد. اما اگر دوست دارید که بیشتر درباره این موضوع بدانید می‌توانید سه ویدیوی اول پلی‌لیست Ben Eater - Networking tutorial را مشاهده کنید.

پروتکل

زمانی که شما با یک فرد جدید ملاقات می‌کنید، اول سلام و احوالپرسی کرده و بعد از این، خودتان را معرفی می‌کنید. این رفتار شما یک قانون اجتماعی است. کامپیوترها هم برای ارتباط با هم به قوانینی نیاز دارند تا خودشان را معرفی کرده و سپس به انتقال داده بپردازند. به این قوانین که بوسیله مهندسان برق و کامپیوتر تعریف می‌شوند پروتکل گفته می‌شود.

لایه‌های شبکه

انتقال اطلاعات بین کامپیوترها فرایندی پیچیده است که با بخش‌های مختلفی از کامپیوتر، مانند بخش‌های فیزیکی و نرم‌افزاری سر و کار دارد. در طراحی سیستم‌های پیچیده مانند این سیستم، برای پنهان کردن برخی از پیچیدگی‌ها و ساده‌تر کردن روند استفاده از سیستم، سیستم را به چند لایه مختلف شکسته و برای هر لایه یک رابط استاندارد برای ارتباط با لایه‌های بالاتر و پایین‌تر خودش تعریف می‌کنند. با استفاده از این طراحی می‌توان نیازمندی‌ها و پیچیدگی‌های هر بخش را در همان بخش نگه داشته و به صورت ساده‌تری به مسائل نگاه کرد.

تا اینجای کار متوجه شدیم که چرا به شبکه‌های کامپیوتری نیاز داریم و فرض کردیم که کامپیوترها می‌توانند بر روی یک سیم به اشتراک اطلاعات بپردازند. اما همه چیز به این سادگی نیست. مثلا اگر داده‌های ارسالی در میانه راه به دلیل نویز موجود در محیط دچار مشکل شوند چطور می‌توانیم متوجه این مشکل بشویم؟ علاوه بر این، اتصال دو کامپیوتر به هم با یک سیم کار چندان پیچیده‌ای نیست، اما چطور می‌توانیم چندین کامپیوتر را به هم متصل کنیم؟

مسئله

درباره روش‌های ممکن برای اتصال چندین کامپیوتر به هم فکر کرده و درباره مزایا و معایب هر روش با هم‌گروهی خود صحبت کنید.

پروتکل‌های لایه لینک مثل Ethernet، برای پاسخ به این مشکلات بوجود آمده‌اند. برای شناخت این پروتکل، می‌توانید ویدیوی Ethernet (50th Birthday) - Computerphile را تماشا کنید.

مسئله

وقتی که با پروتکل Ethernet آشنا شدید، درباره MAC Address و شباهت آن با کد ملی خودتان فکر کنید.

لایه Network

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

  • مگر همه کامپیوترهای دنیا به صورت فیزیکی به هم متصل هستند و می‌توانند با استفاده از پروتکل Ethernet برای هم داده ارسال کنند؟

  • با وجود یک MAC Address ثابت، چطور وقتی از یک مکان به مکان دیگری می‌رویم، کامپیوتر ما می‌تواند دوباره به راحتی به اینترنت متصل بشود و داده رد و بدل کند؟ (به این فکر کنید که اگر خانه خود را عوض کنیم، آیا کسی می‌تواند با داشتن کد ملی برای ما نامه ارسال کند؟)

به این سوالات فکر کرده و سعی کنید راه حلی برای آن‌ها پیدا کنید. سپس با تماشای ویدیوی what is an IP Address? با پروتکل IP آشنا شوید.

مسئله

از قبل می‌دانیم که دستگاه‌های درون یک شبکه می‌توانند با استفاده از پروتکل Ethernet برای یکدیگر داده ارسال کنند و همانطور که در ویدیو دیدیم، دستگاه‌های درون یک شبکه محلی می‌توانند بدون استفاده از روتر اصلی شبکه و با استفاده از آدرس IP برای هم داده ارسال کنند. شاید این دو گزاره متناقض به نظر برسند، اگر داده با پروتکل Ethernet ارسال می‌شود چه نیازی به IP داریم و یا اگر از پروتکل IP استفاده می‌کنیم دیگر چه نیازی به Ethernet وجود دارد؟

احتمالا تا الان حدس زده‌اید که داده‌ای که بسته Ethernet در درون خودش حمل می‌کند، همان داده‌ای است که با استفاده از IP ارسال شده. برای درک بهتر این موضوع این ویدیو را تماشا کنید.

مسئله

حالا که متوجه شدیم بسته‌های IP داخل شبکه‌های محلی با استفاده بسته‌های Ethernet جا به جا می‌شوند، به نظر شما چطور آدرس‌های IP را به آدرس‌های MAC تبدیل می‌کنیم؟ برای فهمیدن این مسئله، درباره پروتکل ARP جست‌وجو کنید.

اطلاعات بیشتر

تا اینجای کار فهمیدیم که اینترنت از شبکه‌های محلی کوچک‌تری تشکیل شده که بوسیله روترها به هم متصل شده‌اند. آدرس‌دهی به این شبکه‌های کوچک‌تر بوسیله سازمانی به نام IANA انجام شده و روترها با پروتکل‌های خاصی با هم صحبت کرده و آدرس‌های که خودشان دارند و یا می‌شناسند را با هم به اشتراک می‌گذارند تا بتوانند بسته‌ها را از شبکه‌های خود برای بقیه شبکه‌ها فرستاده و از بقیه شبکه‌ها بسته بگیرند.

لایه Transport

تا اینجای کار فهمیدیم که بسته‌ها چطور از یک دستگاه به دستگاهی در شبکه‌ای دیگر منتقل می‌شوند و می‌توانیم درک کنیم که چرا اینترنت شبکه‌ای از شبکه‌ها است. اما پیچیدگی زیاد اینترنت چالش جدیدی را برای ما ایجاد می‌کند. با وجود راه‌های زیاد رسیدن بسته‌ها به مقصد، ممکن است که این بسته‌ها در راه گم شده یا با ترتیب متفاوتی به مقصد برسند. علاوه بر این، می‌دانیم که یک دستگاه متصل به اینترنت فقط یک آدرس IP دارد اما معمولا همین یک دستگاه باید به چند اپلیکیشن مختلف خدمات شبکه ارائه بدهد و به راهی برای ایجاد تمایز بین بسته‌های هر اپلیکیشن نیاز داریم. (به شباهت این موضوع با کد پستی‌های مختلف یک آپارتمان بزرگ فکر کنید.)

برای حل این چالش‌ها پروتکلی به نام TCP بوجود آمده. این پروتکل با استفاده از مفهومی به نام Three way handshake یک ارتباط همگام بین دو دستگاه بوجود آورده و با مکانیزم خاصی، رسیدن بسته‌ها به صورت صحیح و به ترتیب را تضمین می‌کند. علاوه بر این با استفاده از آدرسی به نام Port، اجازه می‌دهد چند اپلیکیشن بدون تداخل از شبکه استفاده کرده و بر روی آن داده فرستاده و دریافت کنند. برای آشنایی بیشتر با هر یک از مفاهیمی که گفته شد لینک‌های زیر را مشاهده کنید:

معماری Client-Server

حتما اسم Server را زیاد شنیده‌اید، اما این اسم واقعا به چه معناست؟

معمولا خدماتی که به کاربرها ارائه داده می‌شود، بوسیله یک برنامه خاص پشتیبانی می‌شود که منطق و داده‌های خاص خودش را دارد. خیلی وقت‌ها، این منطق و داده‌ها با کاربران به اشتراک گذاشته نمی‌شوند، بلکه بر روی یک یا چند کامپیوتر خاص که به آن‌ها سرور گفته می‌شود نگه‌داری شده و بوسیله شبکه‌های کامپیوتری به برنامه‌هایی که بر روی دستگاه‌های کاربر نصب شده، متصل شده و خدمات مورد نیاز را برای کاربرها فراهم می‌کنند.

لایه Application

تمام پروتکل‌هایی که در قسمت‌های قبل با آن‌ها آشنا شدیم برای رسیدن به اینجا طراحی شده‌اند. جایی که اپلیکیشن‌ها با اتصال به اینترنت به کاربرها خدمات می‌دهند. بر خلاف پروتکل‌های لایه پایین‌تر، پروتکل‌های لایه اپلیکیشن به شدت متنوع بوده و کارهای مختلفی را انجام می‌دهند. به نظر شما چرا چنین تفاوتی بین پروتکل‌های لایه اپلیکیشن با پروتکل‌های لایه‌های پایین‌تر وجود دارد؟

در اینجا ما با دو تا از مهم‌ترین این پروتکل‌ها کمی بیشتر آشنا می‌شیم.

پروتکل DNS

ما به عنوان یک کاربر عادی معمولا با آدرس‌های IP سر و کار نداریم و از آدرس‌های معناداری مثل example.com استفاده می‌کنیم. پروتکل DNS برای ترجمه این آدرس‌های انسانی به آدرس‌های IP که برای کامپیوترها معنادار هستند طراحی شده. برای درک بهتر کارکرد این پروتکل ویدیوی، DNS as Fast As Possible را تماشا کنید.

تسک

با مراجعه به سایت Mess with DNS و انجام تمرین‌های آن، بیشتر با پروتکل DNS آشنا شوید. برای بررسی رکوردهای DNS در خط فرمان، می‌توانید از ابزار Dig استفاده کنید.

پروتکل HTTP

امروزه خیلی از خدمات کاربردی بر روی وب و از طریق مرورگرها در اختیار ما قرار می‌گیرند پروتکل HTTP، پروتکلی است که برای ارسال و دریافت داده بر روی وب طراحی شده و در پس خیلی از این خدمات قرار می‌گیرد. برای آشنایی بهتر با این پروتکل پر کاربرد، سری به Cloudflare - What is HTTP? بزنید.

ابزارهای کار با شبکه

حالا که با شبکه‌های کامپیوتری آشنا شدیم، نیاز داریم که با برخی از ابزارهایی که در کار مدیریت شبکه از آن‌ها استفاده می‌شود نیز آشنا شویم.

Wireshark

اولین ابزاری که به آن می‌پردازیم، Wireshark است. این ابزار به ما کمک می‌کنند بسته‌هایی که بر روی شبکه در حرکت هستند را مشاهده کرده و آن‌ها را تحلیل کنیم.

تسک

با مراجعه به وبسایت کتاب Computer Networking: a Top Down Approach و انجام آزمایشگاه‌های اول و دوم وایرشارک آن سعی کنید با وایرشارک و نحوه کار با آن آشنا شوید.

Netcat

گاهی اوقات نیاز داریم که با استفاده از سوکت‌های TCP به صورت دستی به جایی متصل شویم یا سوکتی بسازیم تا از جای دیگری به آن متصل شوند. ابزار Netcat به ما اجازه می‌دهد چنین کاری را انجام دهیم.

تسک

با جست‌وجو در اینترنت با این ابزار آشنا شده و سپس با نصب آن بر روی لینوکس خود در یک صفحه یک سوکت TCP ساخته و در صفحه دیگر به این سوکت متصل شوید.