برنامهنویسی شبکه یا Network Programming به استفاده از کدهای کامپیوتری برای نوشتن برنامهای گفته میشود که بتواند از طریق یک شبکه با برنامهای دیگر ارتباط برقرار کند. در این مطلب از مجله فردارس میآموزیم برنامه نویسی شبکه چیست و از تکنولوژیهای مورد استفاده در این حوزه مهم گرفته تا کاربردهای برنامهنویسی شبکه را مورد بررسی قرار میدهیم. حوزهای که توسعهدهندگان برای پیادهسازی و اجرا آن از زبانهای برنامهنویسی، کتابخانهها و پروتکلهای مختلفی کمک میگیرند. ابتدا با مفهوم و همچنین انواع شبکههای کامپیوتری آشنا میشویم و تعریف مختصری از اصطلاحات رایج در شبکه ارائه میدهیم. سپس یاد میگیریم برنامه نویسی شبکه چیست و به معرفی چند مورد از تکنولوژیهای کاربردی شبکه میپردازیم. در انتها این مطلب از مجله فرادرس، اشارهای به زبانهای برنامهنویسی شبکه خواهیم داشت و مزایا و کاربردهای برنامهنویسی شبکه را شرح میدهیم.
منظور از شبکه چیست؟
شبکه مجموعهای از دستگاههای متصل به یکدیگر برای تبادل اطلاعاتی همچون ایمیل، اسناد، فایلهای صوتی و تصویری یا اشتراکگذاری منابع میان دستگاههای فیزیکی مانند پرینتر و فضاهای ذخیرهسازی است. کامپیوترهای موجود در هر شبکه را «میزبان» یا Host و اجزا متصلکننده آنها را به یکدیگر «لینک» مینامند. در فهرست زیر شاهد چند مورد از مثالهای شبکه هستید:
- برقراری اتصال میان یک دستگاه پرینتر و کامپیوتر.
- ارسال فایل از دستگاهی به دستگاه دیگر با بهرهگیری از بلوتوث.
- ارتباط میان نرمافزار مرورگر و سرورهای میزبان وبسایت یا فایلهای قابل مشاهده و دانلود.
موارد فوق تنها چند نمونه از مثالهای شبکه هستند که برای آشنایی بیشتر و درک بهتر موضوع به آنها اشاره شد.
معرفی انواع شبکه
شبکههای کامپیوتری انواع مختلفی دارند و بر اساس اندازه، به دستههای زیر تقسیم میشوند:
- «شبکه محلی» (Local Area Network | LAN): به اتصال تعداد کمی میزبان یا کامپیوتر در فضایی محدود گفته میشود. همه شبکههایی که در منازل مسکونی، مدارس و ادارات استفاده میشوند از این نوع هستند.
- «شبکه شهری» (Metropolitan Area Network | MAN): شبکهای بزرگتر از LAN که سراسر مساحت شهری را پوشش داده و از نظر مفهومی برابر با چند شبکه LAN متصل به یکدیگر است.
- «شبکه گسترده» (Wide Area Network | WAN): مجموعهای از شبکههای کوچکتر مانند LAN و MAN که با هم ارتباط داشته و پوشش جهانی دارد. در واقع اینترنت، بزرگترین شبکه WAN به حساب میآید.
- «شبکه محلی بیسیم» (Wireless LAN | WLAN): نوعی سیستم ارتباطی که از فرکانسهای رادیویی برای انتقال و دریافت اطلاعات بهره میبرد و نیاز به اتصالات قدیمی را کاهش داده است.
- «شبکه خصوصی مجازی» (Virtual Private Network | VPN): اتصال اینترنتی و رمزگذاری شده میان دستگاههای کاربری و شبکه را VPN گویند. با کمک VPN میتوان از انتقال امن دادهها اطمینان حاصل و از دسترسی غیرمجاز به شبکه جلوگیری کرد.
- «شبکه ذخیرهسازی» (Storage Area Network | SAN): شبکهای پرسرعت که با ایجاد یکپارچگی میان فضای ذخیرهسازی و سیستم عامل، دسترسی سرورها را به دستگاههای ذخیرهسازی فراهم میکند. به این صورت مدیریت و دسترسی به فضای ذخیرهسازی راحتتر میشود.
آموزش برنامه نویسی سوکت با فرادرس
«برنامهنویسی سوکت» (Socket Programming) یکی از مهمترین جنبههای برنامهنویسی شبکه به حساب میآید. سوکتها نقطه پایانی ارتباط بین دو برنامه در شبکه هستند و به فرایندها اجازه میدهند تا دادهها را از طریق شبکه ارسال و دریافت کنند. در واقع، برنامهنویسی سوکت پایه و اساس بسیاری از برنامههای شبکهای است که ما هر روز از آنها استفاده میکنیم. از مرورگرهای وب گرفته تا برنامههای پیامرسان و بازیهای آنلاین. در حقیقت، برنامهنویسی سوکت یکی از اصلیترین تکنیکهای مورد استفاده در برنامهنویسی شبکه است. هنگامی که برای یک شبکه برنامهنویسی میکنید، اغلب از سوکتها برای ایجاد ارتباط بین کلاینت و سرور، ارسال و دریافت دادهها و مدیریت اتصالات شبکه کمک میگیرید.
در میان زبانهای برنامهنویسی مختلف، پایتون یکی از بهترین گزینهها برای برنامهنویسی سوکت است. پایتون دارای کتابخانههای مناسبی برای کار با سوکتها است که استفاده از آنها را بسیار ساده و مؤثر میکند. در صورتی که علاقهمند به یادگیری برنامهنویسی سوکت هستید، مشاهده مجموعه فیلمهای آموزش برنامهنویسی سوکت با پایتون فرادرس را از طریق لینک زیر به شما پیشنهاد میکنیم. این مجموعه آموزشی جامع، طیف وسیعی از مباحث را از سطح مبتدی تا پیشرفته پوشش میدهد:
اصطلاحات رایج در شبکه
اصطلاحات شبکه ممکن است در ابتدا گمراهکننده و نامفهوم بهنظر برسند. بهویژه برای افرادی که تازه فعالیت خود را در این زمینه آغاز کردهاند. به همین منظور، ادامه این بخش را به معرفی و تعریف تعدادی از اصطلاحات رایج شبکه اختصاص میدهیم.
- شبکه (Network): مجموعهای از دستگاههای متصل مانند کامپیوتر، پرینتر و سرورها که با یکدیگر در ارتباط هستند.
- گره (Node): هر دستگاه متصل به یک شبکه مانند کامپیوتر، پرینتر یا روتر، نقش گره یا Node را دارد.
- پروتکل (Protocol): مجموعهای از اصول و قواعدی که نحوه برقراری ارتباط را میان دستگاههای موجود در یک شبکه مشخص میکنند.
- آدرس آیپی (IP Address): دنبالهای از اعداد منحصربهفرد که به دستگاههای حاضر در شبکه اختصاص یافته و برای شناسایی و برقراری ارتباط با دیگر دستگاهها مورد استفاده قرار میگیرد.
- روتر (Router): دستگاهی که چند شبکه مختلف را به یکدیگر متصل کرده و بستههای اطلاعاتی را میان آنها جابهجا میکند.
- سوئیچ (Switch): دستگاهی که میان چندین دستگاه موجود در یک شبکه اتصال برقرار میکند و باعث انتقال بستههای اطلاعات از یک دستگاه به دستگاه دیگر میشود.
- سیستم نام دامنه (DNS): سیستمی که نام دامنههای اینترنتی را به آدرس IP معادل تبدیل کرده و دستگاهها را قادر میسازد تا وبسایتها و دیگر منابع شبکه را شناسایی و به آنها متصل شوند. در مطلب دیگری از مجله فرادرس، بهطور مفصل درباره سیستم DNS توضیح دادهایم که لینک آن در ادامه آورده شده است:
پروتکل پیکربندی پویای میزبان (DHCP)
قاعده یا پروتکلی که بهطور خودکار برای دستگاههای شبکه، آدرس IP و تنظیمات مناسب در نظر میگیرد.
پروتکل TCP/IP
مجموعهای از پروتکلها که در برقراری ارتباط میان اینترنت و دیگر شبکهها کاربرد دارد.
این اصطلاحات تنها چند مورد از مفاهیم پایه شبکه هستند که درک آنها برای یادگیری مباحث پیچیدهتر لازم و مهم است. تا اینجا با مفهوم، انواع و همچنین اصطلاحات رایج شبکههای کامپیوتری آشنا شدیم. در ادامه یاد میگیریم برنامه نویسی شبکه چیست و چه ابزارهایی بیشترین کاربرد را در این زمینه دارند.
برنامه نویسی شبکه چیست؟
شبکههای کامپیوتری در دو سطح سختافزار و نرمافزار قابل بررسی هستند. هر شبکه از تعدادی کامپیوتر، کابل و دیگر ابزارهای مورد نیاز برای راهاندازی تشکیل شده است. درک و فهم شبکههای کامپیوتری در سطح سختافزار نیازمند آشنایی با علوم مختلفی چون فیزیک، ریاضی و الکترونیک است و باید با تکنولوژیهای پایه و اجزا سازنده کامپیوترها نیز آشنایی داشته باشیم. از طرف دیگر، سطح نرمافزار شامل برنامهها، دستورالعملها و الگوریتمهایی است که بخش سختافزاری را کارآمد میسازند. برای آشنایی بیشتر با مفاهیم شبکه، میتوانید فیلم آموزش درک مقدماتی شبکه فرادرس را با آموزش جادی و بهصورت رایگان از لینک زیر مشاهده کنید:
برنامهنویسی شبکه به توسعه برنامههایی گفته میشود که بتوانند از طریق یک شبکه کامپیوتری با دیگر برنامهها ارتباط برقرار کنند. به عنوان مثال پروتکل HTTP نحوه دریافت و اشتراکگذاری منابعی مانند اسناد متنی را از طریق شبکه توصیف میکند. همچنین شرح دقیقی از اجزا سختافزاری مورد نیاز برای تبادل منابع در اختیار کاربران قرار میدهد. اگرچه لیست پروتکلهای شبکه موجود بسیار گسترده بوده و در زمینههای مختلفی نیز پراکنده است، همه از مدلی تحت عنوان «ارتباط متقابل سامانههای باز» (Open Systems Interconnection | OSI) پیروی میکنند.
مدل OSI نقش راهنما را برای متخصصان شبکه، توسعهدهندگان و دیگر افراد دخیل در برنامهنویسی شبکه داشته و به آنها کمک میکند تا درک مناسبی از نحوه برقراری ارتباط و تعامل میان محصولات و نرمافزارها بهدست آورند. این چارچوب مفهومی یک طرح کلی از نحوه عملکرد شبکههای کامپیوتری ارائه میدهد. مدلی با هفت لایه که چگونگی جریان دادهها را در طول شبکه تشریح میکند. در تصویر زیر، شمای کلی مدل OSI با هفت لایه «فیزیکی» (Physical)، «پیوند داده» (Data Link)، «شبکه» (Network)، «انتقال» (Transport)، «نشست» (Session)، «نمایش» (Presentation) و «کاربرد» (Application) ترسیم شده است:
سختافزار یک دستگاه مربوط به شبکه با سیستم عامل و دیگر نرمافزارها ارتباط نزدیکی داشته و سیستمی بسته و متکیبر یکدیگر را تشکیل میدهند. در نتیجه نوآوری و توسعه یک بخش نیازمنده بهروزرسانی متقابل بخش دیگر است. همانطور که پیشتر نیز در مورد آن خواندیم، از طریق برنامهنویسی شبکه میتوان راهحل مسئله مورد نظر را در مجموعهای از دستورالعملهای قابل درک و اجرا برای کامپیوتر خلاصه کرد.
مطابق با سختافزارهای استاندارد روز، توابع نرمافزارمحور و مدلهای متن باز، تیم پژوهشی پروفسور «نیک مَککوئن» (Nick McKeown) معماری جدیدی را از شبکه با نام «شبکه نرمافزارمحور» (Software-defined Networking | SDN) پیشنهاد دادند که نه تنها بر روی کامپیوترها بلکه دیگر سختافزارهای مرتبط نیز قابل پیادهسازی و اجرا است. در معماری SDN واحد کنترل شبکه از واحد اطلاعات جدا میشود. قابل ذکر است که با گذشت سالها، توسعه و تعمیم واحد اطلاعات یا داده، مشابه با سختافزار رایج سیستمهای کامپیوتری افزایش یافته است.
دیگر نیازی به راهاندازی جداگانه واحد محاسبات برای پروتکلهای مختلف شبکه نیست و در عوض تنها فرمانهای دریافتی از واحد کنترل اجرا میشوند. تعریف واحد محاسبات و منطق دستگاههای شبکه بر عهده نرمافزارهای همگام با معماری SDN است. در تصویر زیر، روند تکامل معماری سنتی شبکههای کامپیوتری تا SDN را مشاهده میکنید:
تکنولوژی های کاربردی در برنامه نویسی شبکه
حالا که بهخوبی میدانیم منظور از برنامه نویسی شبکه چیست، در این بخش به معرفی برخی از تکنولوژیهای کاربردی در برنامهنویسی شبکه میپردازیم. بهتر است بدانید که برنامهنویسی شبکه شاخصه اصلی معماری SDN است. در حقیقت این معماری امکان دسترسی به انواع API ها را برای پیکربندی و مدیریت شبکه فراهم میکند. در ادامه بیشتر با چند مورد از تکنولوژیهای مورد استفاده در برنامهنویسی شبکه آشنا میشویم.
OpenFlow
پروتکلی قابل استفاده میان واحد کنترل و اطلاعات معماری SDN که در سال ۲۰۰۸ توسط پروفسور نیک مککوئن و همکاران او معرفی شد. اصول طراحی OpenFlow به گونهایست که دو فرایند «تطابق» (Matching) و «اقدام» (Action) نقش عملیاتهای اصلی را داشته و از بخش «کنترلر» برای انتقال رکوردهای «جدول جریان» (Flow Table) به دستگاه «سوئیچ» استفاده میشود. در پروتکل OpenFlow و برای تبادل اطلاعات، راه ارتباطی یا به اصطلاح کانال منحصربهفردی میان سوئیچ و کنترلر برقرار است. طی این فرایند امکان ارسال «بستهها» (Pockets) به رابط کاربری یا نادیده گرفتن آنها توسط پروتکلهایی همچون «اِترنت» (Ethernet)، IPv4 و IPv6 وجود دارد.
وظیفه برنامهنویسی شبکه در OpenFlow بر عهده بخش کنترلر است. به عنوان مثال، ابتدا یکی از خانههای جدول جریان به سوئیچ A ارسال شده و از آن طرف بستهای به آدرس آیپی ۱۹۲.۱۶۸.۱.۲۰ انتقال مییابد. بهطور خلاصه، OpenFlow نوعی تکنولوژی مرتبط با SDN است که برخی از اصول و قواعد پردازش شبکه را گسترش داده و از «برنامهنویسی متمرکز» (Centralized Programming) نیز پشتیبانی میکند.
POF
مشابه با OpenFlow، معماری POF نیز از دو بخش واحد کنترل و همچنین واحد اطلاعات تشکیل شده است. معماری که فرایند پردازش شبکه را همزمان با پیشتیبانی از قواعد و منطق ارسال، به بخشهای تعاملپذیرتری خلاصه میکند.
P4
از جمله مزایا P4 نسبت به OpenFlow میتوان به برنامهنویسی راحتتر آن اشاره کرد. معماری P4 با تعریف برنامهای که شامل بخشهای «هِدر» (Header)، «تجزیهکننده» (Parser)، جدول، «اقدام» (Action) و برنامه کنترل است، بستهها را پردازش و مدیریت میکند. از جمله دیگر مزایا این معماری میتوان به تعریف مجدد تنظیمات شبکه بدون ایجاد اختلال در فرایند ارسال بستهها اشاره داشت.
زبان های برنامه نویسی شبکه چیست؟
متخصصان شبکه و دیگر افراد حرفهای در حوزه فناوری اطلاعات برای برنامهنویسی شبکه به مجموعهای از ابزارها و زبانهای برنامهنویسی نیاز دارند. برخی از این ابزارها عبارتاند از:
- زبان برنامهنویسی Python: ابزاری متنباز با کتابخانههای متنوع.
- زبان برنامهنویسی Java: زبانی شیءگرا و چندمنظوره.
- زبان برنامهنویسی Perl: مورد استفاده در انواع مختلف پروژههای کاربردی.
- پردازشگر دستوری Bash: ابزاری مبتنیبر خط فرمان.
- زبان برنامهنویسی Go: زبانی با «نوعبندی استاتیک» (Statically Typed) و «ترجمه شوند» (Compiled).
- زبان Tcl: نوعی زبان برنامهنویسی پویا و کارآمد در حوزه شبکه.
به عنوان دیگر مهارتهای ارزشمند برای افراد فعال در حوزه شبکه میتوان از آشنایی با شبکههای «کانتینر» (Container)، ابری، اینترنت اشیا (IoT)، تجربه کار با ابزارهای DevOps و شناخت کنترلرهای شبکه نام برد.
مزایا برنامه نویسی شبکه چیست؟
پس از آنکه یاد گرفتیم برنامه نویسی شبکه چیست و با برخی از تکنولوژیهای مورد استفاده در شبکه نیز آشنا شدیم، در این بخش به بررسی مزایا برنامهنویسی شبکه میپردازیم. برنامهنویسی شبکه نقش محوری در پیادهسازی شبکههای ابری هوشمند ایفا میکند. همزمان با سرعت گرفتن توسعه فناوریهای دیجیتال، تعداد قابل توجهی از سازمانها تصمیم به جابهجایی سرویسهای خود به فضا ابری گرفتهاند. اگر چه همین رویکرد نیز با چالشهای بسیاری همراه است. برای مثال میتوان به سرعت بالا فضا ابری در مقایسه با شبکه اشاره کرد. با وجود اینکه اجرا فرایندهای شبکه آهسته بوده و برقراری ارتباط میان دو بخش سازمانی و ابری به ماهها زمان نیاز دارد، سرویسهای ابری در تنها چند دقیقه راهاندازی میشوند.
مدل «شبکه به عنوان سرویس» (Network As a Service | NaaS)، راهکاری برای رفع مشکل اختلاف سرعت میان سرویسهای ابری و شبکه است. این مدل از بخش کنترلر برای برنامهنویسی شبکه و راهاندازی سرویسها با یک کلیک استفاده میکند. به این صورت پیشنیازهای توسعه سرویس در فضا ابری برآورده میشود.
کاربرد های برنامه نویسی شبکه
با توجه به آنچه در بخشهای قبل خواندیم، برنامهنویسی شبکه رکن اساسی برقراری ارتباط میان دستگاههای شبکه و مورد استفاده در کاربردهای مختلفی است که در ادامه این بخش به معرفی برخی از آنها میپردازیم.
انتقال داده
از جمله رایجترین کاربردهای برنامهنویسی شبکه میتوان به «انتقال داده» (Data Transfer) اشاره کرد. فرایندی که شامل ارسال و دریافت اطلاعات میان دو یا تعداد بیشتری دستگاه میشود. برای مثال وقتی به وبسایتی مراجعه میکنید، مرورگر درخواستی به وب سرور فرستاده و صفحه مورد نظر شما را به عنوان پاسخ برمیگرداند. در انتقال داده، بنابر نوع و فرمت اطلاعات و همچنین معماری شبکه، از پروتکلهای مختلفی همچون HTTP، FTP، SMTP و TCP/IP استفاده میشود. علاوهبر این در انتقال داده، امکان بهرهگیری از تکنیکهای رمزگذاری و فشردهسازی نیز وجود دارد.
دسترسی راه دور
کاربردی که امکان دسترسی و مدیریت از راه دور یک دستگاه یا سیستم را برای کاربران مهیا میکند. به عنوان مثال، هنگام استفاده از نرمافزاری مانند TeamViewer، میتوانید کامپیوتری را در مکان دیگر کنترل کنید. بهطور کلی «دسترسی از راه دور» (Remote Access)، به سطح امنیت و عملکرد بستگی داشته و با پروتکلهایی چون SSH، RDP، VNC و Telnet انجام میگیرد. همچنین در کاربرد دسترسی از راه دور، امکان بهکارگیری مکانیزمهای احراز هویت برای تایید دسترسی کاربران وجود دارد.
سرویس های وب
یکی دیگر از کاربردهای مهم برنامهنویسی شبکه با قابلیت تامین اطلاعات برای سرویسهای خارجی. برای مثال نرمافزارهای آبوهوا از «سرویسهای وب» (Web Services) برای دریافت اطلاعاتی مانند دما و پیشبینی شرایط جوی کمک میگیرند. فرمت سرویسهای وب بر اساس واسط شبکه و ساختار داده میتواند یکی از موارد XML، JSON، SOAP و REST باشد.
بازی های آنلاین
برنامهنویسی شبکه به کاربران این امکان را میدهد تا در یک محیط مجازی و تحت شبکه با یکدیگر به رقابت بپردازند. مانند زمانی که در یک بازی آنلاین به سروری ملحق شده و در مقابل دیگر بازیکنان از سراسر جهان مسابقه میدهید. در بازیهای آنلاین بسته به نوع مقیاسپذیری و پایداری شبکه، میتوان از ساختارهای مختلفی همچون «کلاینت-سرور» (Client-Server)، «همتا به همتا» (Peer-to-Peer) یا «ترکیبی» (Hybrid) استفاده کرد.
رایانش توزیع شده
منظور از رایانش توزیع شده، بهرهگیری از چند دستگاه یا سیستم، برای اجرا فرایند یا محاسباتی پیچیده از طریق شبکه است. برای نمونه وقتی از یک سرویس رایانش ابری استفاده میکنید، به منابع و قدرت چندین سرور دسترسی خواهید داشت. مدلهای «موازی» (Parallel)، «مشبک» (Grid) و «خوشهای» (Cluster) بیشترین کاربرد را در رایانش توزیع شده دارند.
امنیت شبکه از جمله مباحث مهم در برنامهنویسی شبکه است که باید در تمام کاربردهای ذکر شده به آن توجه ویژه شود. با گسترش تهدیدات سایبری، حفاظت از دادهها و زیرساختهای شبکه به یک ضرورت انکارناپذیر تبدیل شده است. توسعهدهندگان شبکه باید همواره اصول امنیتی را در طراحی و پیادهسازی برنامههای خود لحاظ کنند تا از آسیبپذیریهای احتمالی جلوگیری شود. برای محافظت از شبکههای کامپیوتری در برابر نفوذ و هک، راهکارهای متعددی وجود دارد. استفاده از رمزگذاری قوی برای محافظت از دادههای در حال انتقال، پیادهسازی سیستمهای احراز هویت، بهروزرسانی منظم نرمافزارها و سیستمعاملها، استفاده از فایروالها و سیستمهای تشخیص نفوذ همگی در تأمین امنیت شبکه نقش بهسزایی ایفا میکنند.
برای تقویت مهارتهای عملی در حوزه امنیت شبکه، شرکت در دورههای آموزشی مرتبط بسیار مفید است. در همین راستا، پلتفرم فرادرس فیلمهای آموزشی پروژهمحوری را تهیه و تولید کرده است که لینک آنها در بخش زیر قرار گرفته است:
جمعبندی
برنامهنویسی شبکه لازمه طراحی و ساخت هر نوع سیستم مدرن و نرمافزارهای پیشرفته روز است. در این مطلب از مجله فرادرس، به تعریف مفهوم شبکه پرداختیم و یاد گرفتیم منظور از برنامه نویسی شبکه چیست و توسعهدهندگان از چه ابزارهایی در این زمینه استفاده میکنند. در حالی که اتصال به دیگر برنامهها و سیستمهای کامپیوتری برای برخی از نرمافزارهای تجاری مانند مایکروسافت ورد و فتوشاپ ضرورتی ندارد، همچنان کارایی اغلب سیستمها به شبکههای کامپیوتری وابسته بوده و با برنامهنویسی شبکه، میتوان میان بخشهای مختلف سختافزاری و نرمافزاری ارتباط برقرار کرد.
source