آشنایی با مفاهیم پایهای شبکه در لینوکس
وجود پشتهی شبکه در لینوکس، یکی از قویترین ویژگیهای این سیستم عامل محسوب میشود. آشنایی با این مفاهیم میتواند کمک زیادی به کاربران در درک چگونگی کارکرد سرویسهای مختلف و ارتباطات شبکهای در لینوکس نماید. در این مقاله قصد داریم در مورد برخی از مفاهیم TCP/IP در لینوکس آشنا شویم. TCP/IP شامل مجموعهای از پروتکلهای ارتباطی موجود در اینترنت و شبکههای کامپیوتری است. برای آشنایی با مفاهیم پایهای شبکه های کامپیوتری میتوانید به این مقاله مراجه کنید.
نگاهی به مدل OSI
مدل OSI شبکه را به ۷ لایه تقسیم میکند. این ۷ لایه عبارتند از:
۷. لایهی کاربرد (Application Layer)
۶. لایهی ارائه (Presentation Layer)
۵. لایهی نشست (Session Layer)
۴. لایهی انتقال (Transport Layer)
۳. لایهی شبکه (Network Layer)
۲. لایهی پیوند داده (Data Link Layer)
۱. لایهی فیزیکی (Physical Layer)
در ادامه به توصیح مختصری در مورد برخی از این لایهها میپردازیم.
لایهی کاربرد شامل پروتکلهایی است که روزانه از آنها استفاده میکنیم. برخی از این پروتکلها عبارتند از: SSH، TLS/SSL، HTTP، IMAP، SMTP، DNS، DHCP و … .
TCP و UDP در لایهی انتقال قرار دارند. TCP پیچیدگی بیشتری نسبت به UDP داشته و به بررسی خطا در بستهها میپردازد تا سعی کند بستههای ارسالی را به درستی تحویل دهد. در صورتی که بستهای در مسیر از بین رود، TCP آن بسته را مجددا ارسال میکند. UDP عملکردی ساده تر نسبت به TCP داشته و سربار کمتری دارد. UDP تنها به ارسال بستهها پرداخته و اهمیتی به رسیدن بسته به مقصد نمیدهد. TCP در مواقعی استفاده میشود که قصد داریم دادهها به طور کامل و به ترتیب به مقصد ارسال شوند. UDP برای انتقال دادههای سبک مانند NTP یا queryهای DNS و همچنین برای media streaming مناسب است.
لایهی فیزیکی به سخت افزارهای موجود در شبکه اشاره دارد. این سخت افزارها میتوانند شامل Ethernet، رابط wi-fi، کابلها، سوییچها و هر نوع ابزار دیگری باشند که در شبکه به برقراری ارتباط کمک میکنند.
پورتها و سوکتها
سوکت شبکه ترکیبی از یک آدرس IP و یک شماره پورت است. باز کردن یک پورت به معنای راه اندازی یک سرویس مانند سرویس دهندهی HTTP، IMAP یا SSH است. در این حالت سرویس مورد نظر پورت مربوط را باز کرده و منتظر اتصالات ورودی میماند. با استفاده از دستور netstat میتوان سوکتهای مربوط به پورتهای باز بر روی سیستم را مشاهده نمود. در مثال زیر تنها سوکتهایی که در حالت listen قرار دارند، به همراه نام سرویسهای آنها نمایش داده شده است:
sudo netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1583/mysqld tcp 0 0 127.0.0.1:5901 0.0.0.0:* LISTEN 13951/qemu-system-x tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 2101/dnsmasq tcp 0 0 192.168.122.1:80 0.0.0.0:* LISTEN 2001/apache2 tcp 0 0 192.168.122.1:443 0.0.0.0:* LISTEN 2013/apache2 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1200/sshd tcp6 0 0 :::80 :::* LISTEN 2057/apache2 tcp6 0 0 :::22 :::* LISTEN 1200/sshd tcp6 0 0 :::443 :::* LISTEN 2057/apache2
با توجه به خروجی بالا مشاهده میکنیم که سرویس mysqld تنها در localhost در پورت ۳۳۰۶ فعال بوده و هیچ گونه اتصالی خارج از سیستم را قبول نمیکند. dnsmasq در آدرس ۱۹۲.۱۶۸.۱۲۲.۱ و پورت ۵۳ فعال است؛ بنابراین میتواند اتصالات خارجی را پذیرفته و به آنها پاسخ دهد. همچنین سرویس SSH روی تمام رابطهای شبکه در سیستم باز است. همانطور که میبینید، میتوان دقیقا مشخص نمود که هر سرویس روی کدام رابط شبکه، آدرس و پورت به درخواستهای ورودی پاسخ دهد.
در خروجی بالا، سرویس Apache روی دو پورت ۸۰ و ۴۴۳ در IPv4 و IPv6 فعال است. پورت ۸۰، شماره پورت استاندارد و رمزنگاری نشدهی HTTP است و پورت ۴۴۳، برای نشستهای SSL/TLS مورد استفاده قرار میگیرد. آدرس خارجی IPv6 که به صورت :::* است، همانند آدرس خارجی IPv4 بوده که به صورت ۰.۰.۰.۰:* مشخص شده است. این wildcardها نشان دهندهی قبول درخواست از تمام آدرسها و پورتها میباشند. در صورتی که قصد دارید اتصالاتی از برخی آدرسها وارد نشوند، میتوانید آن آدرسها با FireWall بلاک کنید.
هر سوکت شبکه یک نقطهی پایانی در TCP/IP محسوب میشود و هر اتصال TCP/IP به دو نقطهی پایانی نیاز دارد. ابزار netstat به ما نشان میدهد که هر سرویس قادر است در یک زمان چندین نقطهی پایانی را مدیریت کند. یک آدرس IP یا رابط شبکه میتواند اتصالات متعددی را مدیریت کند.
با توجه به مثال ارائه شده، میتوان تفاوت یک سرویس و پردازش را مشاهده نمود. برای نمونه در مثال بالا apache2 نام یک سرویس بوده که چهار پردازش را راه اندازی کرده است. همچنین sshd یک سرویس به همراه یک پردازش است که بر روی دو سوکت مختلف در حالت listen قرار دارد.
سوکتهای یونیکس (Unix)
ارتباطات شبکهای عمیقا در لینوکس تعبیه شده است، به طوری که سوکتهای دامنهی یونیکس (که ارتباطات بین پردازشی یا IPC نیز نامیده میشوند) عملکردی همانند ارتباطات شبکهای TCP/IP دارند. سوکتهای دامنهی یونیکس، نقاط پایانی بین پردازشهای موجود در سیستم عامل لینوکس بوده و تنها در هستهی لینوکس فعالیت میکنند. با استفاده از دستور netstat میتوان این سوکتها را مشاهده نمود:
netstat -lx Active UNIX domain sockets (only servers) Proto RefCnt Flags Type State I-Node Path unix 2 [ ACC ] STREAM LISTENING 988 /var/run/dbus/system_bus_socket unix 2 [ ACC ] STREAM LISTENING 29730 /run/user/1000/systemd/private unix 2 [ ACC ] SEQPACKET LISTENING 357 /run/udev/control unix 2 [ ACC ] STREAM LISTENING 27233 /run/user/1000/keyring/control
سوکت مدل SOCK_STREAM عملکردی همانند TCP دارد (با قابلیت اطمینان در تحویل بستهها) و SOCK_DGRAM همانند UDP عمل میکند (غیر قابل اعتماد اما سریع و با حداقل سربار). همانطور که میدانید همه چیز در لینوکس یک فایل است. بجای پروتکلهای شبکه، آدرسهای IP و پورتها، سوکتهای دامنهی یونیکس از فایلهای ویژهای استفاده میکنند که در خروجی مثال بالا میتوانید آدرس آنها را مشاهده کنید. این فایلها همانند سایر فایلهای موجود در سیستم شامل metadata، inode و مجوزهای دسترسی هستند.
کتابهای زیادی وجود دارد که به طور کامل مفاهیم شبکه را در لینوکس مورد بررسی قرار میدهند. در اینجا تنها به صورت مختصر در مورد مفاهیم شبکه در لینوکس و سوکتهای یونیکس بحث شده است. شما همچنین با مشاهدهی manual page دستور netstat میتوانید با قابلیتهای بیشتر این ابزار آشنا شوید. همچنین manual page مربوط به tcp و socket که در سیستم لینوکس شما موجود است، راهنمای مناسبی برای آشنایی بیشتر با این مفاهیم است.
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.