امروزه شبکههای کامپیوتری در همه بخشهای زندگی ما نقش داشته و اکثر محصولات و سرویسهای کامپیوتری از طریق بزرگترین شبکه کامپیوتری موجود یا همان اینترنت به دست کاربرها میرسند. به همین خاطر شناخت این شبکهها برای بهینه کردن خدمترسانی به کاربرها اهمیت زیادی دارد. در ادامه، نگاهی به بخشهای مختلف شبکههای کامپیوتری میاندازیم و بعد از آن با چند پروتکل مهم لایه اپلیکیشن آشنا میشویم.
چرا شبکههای کامپیوتری؟
با بوجود آمدن کامپیوترها، آنها وظیفه انجام کارهای تکراری و محاسبات پیچیده را بر عهده گرفته و انجام کارهایی که قبلا برای ما سخت بود را ساده کردند. با گسترش استفاده از آنها، نیاز جدیدی بوجود آمد. دادههای پردازش شده بر روی این کامپیوترها باید به اشتراک گذاشته شده و بر روی کامپیوترهای دیگر و بوسیله افراد جدید استفاده و احتمالا بهبود داده میشدند، و شبکههای کامپیوتری برای رفع این نیاز ایجاد شدند.
احتمالا میدانید که میتوان هر نوعی از داده را با ایجاد یک قرارداد خاص تبدیل به یک رشته باینری کرد. وظیفه شبکهها ی کامپیوتری انتقال این رشتههای باینری بر روی واسطهای مختلف و رساندن آنها به دستگاههای دیگر است. اما چطور؟
در این آموزش به دلیل پیچیدگی، به اینکه دادهها در لایه فیزیکی چطور بوسیله سیم یا به صورت بیسیم منتقل میشوند نمیپردازیم. برای سادگی میتوانید فرض کنید که این انتقال با تغییر ولتاژ روی سیم، اتفاق میافتد. اما اگر دوست دارید که بیشتر درباره این موضوع بدانید میتوانید سه ویدیوی اول پلیلیست Ben Eater - Networking tutorial را مشاهده کنید.
پروتکل
زمانی که شما با یک فرد جدید ملاقات میکنید، اول سلام و احوالپرسی کرده و بعد از این، خودتان را معرفی میکنید. این رفتار شما یک قانون اجتماعی است. کامپیوترها هم برای ارتباط با هم به قوانینی نی از دارند تا خودشان را معرفی کرده و سپس به انتقال داده بپردازند. به این قوانین که بوسیله مهندسان برق و کامپیوتر تعریف میشوند پروتکل گفته میشود.
لایههای شبکه
انتقال اطلاعات بین کامپیوترها فرایندی پیچیده است که با بخشهای مختلفی از کامپیوتر، مانند بخشهای فیزیکی و نرمافزاری سر و کار دارد. در طراحی سیستمهای پیچیده مانند این سیستم، برای پنهان کردن برخی از پیچیدگیها و سادهتر کردن روند استفاده از سیستم، سیستم را به چند لایه مختلف شکسته و برای هر لایه یک رابط استاندارد برای ارتباط با لایههای بالاتر و پایینتر خودش تعریف میکنند. با استفاده از این طراحی میتوان نیازمندیها و پیچیدگیهای هر بخش را در همان بخش نگه داشته و به صورت سادهتری به مسائل نگاه کرد.
لایه Link
تا اینجای کار متوجه شدیم که چرا به شبکههای کامپیوتری نیاز داریم و فرض کردیم که کامپیوترها میتوانند بر روی یک سیم به اشتراک اطلاعات بپردازند. اما همه چیز به این سادگی نیست. مثلا اگر دادههای ارسالی در میانه راه به دلیل نویز موجود در محیط دچار مشکل شوند چطور میتوانیم متوجه این مشکل بشویم؟ علاوه بر این، اتصال دو کامپیوتر به هم با یک سیم کار چندان پیچیدهای نیست، اما چطور میتوانیم چندین کامپیوتر را به هم متصل کنیم؟
درباره روشهای ممکن برای اتصال چندین کامپیوتر به هم فکر کرده و درباره مزایا و معایب هر روش با همگروهی خود صحبت کنید.
پروتکلهای لایه لینک مثل 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، اجازه میدهد چند اپلیکیشن بدون تداخل از شبکه استفاده کرده و بر روی آن داده فرستاده و دریافت کنند. برای آشنایی بیشتر با هر یک از مفاهیمی که گفته شد لینکهای زیر را مشاهده کنید:
حتما اسم 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 ساخته و در صفحه دیگر به این سوکت متصل شوید.