پروژه کدنویسی شبکه برای توسعهدهندگان هسته شبکه، لینوکس، برنامهنویسی سیستم، سیستمهای عامل و پروژهها به زبان C/C++
با این دوره آموزشی چه چیزی یاد خواهید گرفت؟
در این دوره، یک مطالعه موردی برای پیادهسازی پروتکل داخلی دلخواه (Pseudo Interior Gateway Protocol) مشابه OSPF (Open Shortest Path First) و ISIS (Intermediate System to Intermediate System) ارائه میشود. هر دو پروتکل ISIS و OSPF از پروتکلهای IGP در دسته پروتکلهای وضعیت لینک (link-state protocols) قرار میگیرند و اهداف مشابهی را دنبال میکنند. نگران نباشید، قبل از شروع کدنویسی پروژه، تمامی تئوریهای لازم در مورد آنچه قرار است پیادهسازی کنیم را پوشش خواهیم داد.
این دوره کامل به دو بخش تقسیم میشود: بخش A و بخش B.
نسخه ساده شدهای از پروتکل ISIS واقعی را با استفاده از کتابخانه پشته tcp-ip خود پیادهسازی خواهیم کرد. هدف، یادگیری نکات ظریف در پیادهسازی یک پروتکل شبکه معمولی بر روی یک دستگاه از ابتدا است. شما پس از ورود به صنعت، تمام عمر خود را صرف این کار خواهید کرد، اما در اینجا، این مطالعه موردی با هدف ارائه تجربه دست اول در مورد آنچه برای پیادهسازی یک پروتکل شبکه معمولی بر روی یک دستگاه (شبیهسازی شده) لازم است، طراحی شده است.
شرط میبندم اگر برای نقش توسعهدهنده شبکه در شرکتی مصاحبه میدهید، از سطح ورودی تا 2-3 سال تجربه، یا در حال جابجایی بین حوزهای به توسعه شبکه هستید، ذکر پروژه فوق در رزومه شما باعث ایجاد هیجان در مصاحبهکننده خواهد شد. اگر بتوانید به سوالات متقاطع (که در این دوره پوشش خواهم داد) پاسخ دهید، بدون شک انتخاب خواهید شد. کد خود را در GitHub نگهداری کنید تا در صورت درخواست، به مصاحبهکننده ارائه دهید.
اهداف پروژه کدنویسی شبکه
هدف این پروژه، گذراندن تجربه پیادهسازی کامل یک پروتکل شبکه معمولی است. در این مطالعه موردی، ما یک پروتکل مسیریابی را به عنوان مثال انتخاب کردهایم، اما مراحل کلی لازم برای پیادهسازی یک پروتکل شبکه معمولی کم و بیش یکسان است. به عنوان مثال، یک پروتکل شبکه معمولی باید:
- از طریق CLIs قابل پیکربندی باشد.
- وضعیتهای داخلی و نتایج را از طریق show CLIs نمایش دهد.
- به تغییرات پیکربندی عمومی (مانند خاموش کردن لینک، تغییر آدرس IP در رابط) پاسخ دهد.
- نتایج را محاسبه کرده و در جداول (مانند پایگاه اطلاعات مسیریابی، جداول MAC، جداول سختافزاری و غیره) نصب کند.
- به تغییرات توپولوژیکی (خرابی لینک، خرابی دستگاه و غیره) پاسخ دهد.
- ساختارهای داده قدیمی در صورت وجود را منقضی کند.
- به صورت دورهای بستههای پروتکل را تولید یا پردازش کند.
- نحوه اضافه کردن یک ویژگی جدید به پایگاه کد پروتکل موجود را بیاموزد. (این همان کاری است که شما تمام عمر به عنوان یک مهندس نرمافزار انجام خواهید داد!)
از آنجایی که پروژه نسبتاً بزرگ است (حدود 20 هزار خط کد انتظار میرود)، شما همچنین فرصت یادگیری نحوه انجام موارد زیر را خواهید داشت:
- سازماندهی کد در فایلهای هدر و سورس.
- ماژولار کردن پایگاه کد: نحوه نگهداری کد ویژگیهای مختلف در فایلهای سورس متفاوت.
- تست ویژگی جدید و بررسی اینکه آیا ویژگیهای موجود را مختل نمیکند.
- نگهداری کامیتهای کد از طریق سیستم کنترل نسخه (در این مورد GitHub).
- رفع اشکال و تمرین تکنیکهای مختلف اشکالزدایی (gdb، Valgrind و غیره).
ناگفته نماند که شما نمیتوانید نکات فوق را تمرین کنید مگر اینکه یک پروژه با اندازه قابل توجه انجام دهید.
پیشنیازهای لازم برای گذراندن این دوره
بدون شک، این پروژه بسیار چالشبرانگیز است و شما باید در ساختار دادهها و الگوریتمها در برنامهنویسی C/C++ مهارت نسبتاً خوبی داشته باشید. اگر هنوز با لیست پیوندی/درختان یا سایر اصول اولیه علوم کامپیوتر مشکل دارید، توصیه نمیکنم وقت خود را صرف این پروژه کنید – بلکه ابتدا بر روی تقویت مبانی خود کار کنید. هیچ فایدهای ندارد که این پروژه را در رزومه خود نمایش دهید در حالی که نمیتوانید به سوالات بنیادی دیگر مانند حافظه پشته، چندنخی و غیره پاسخ دهید یا در معکوس کردن یک لیست پیوندی شکست بخورید.
همچنین، فرض بر این است که شما هیچ پیشزمینهای در پروتکلهای مسیریابی شبکه ندارید (اما مبانی شبکه مانند مسیریابی L3 و غیره را میدانید)، بنابراین از صفر شروع کرده و تمامی تئوریهای لازم را قبل از شروع کدنویسی پوشش خواهم داد. در طول مسیر پیادهسازی، مفاهیم جدید مختلفی را در زمینه شبکه، طراحی پروژه، طراحی ویژگی یا استانداردهای کدنویسی در سطح صنعت فرا خواهیم گرفت.
درک چگونگی پیادهسازی پروتکلهای شبکه در دستگاههای شبکه
پیادهسازی تدریجی ویژگیهای جدید
پردازش بستهها، بهروزرسانی ساختارهای داده پروتکل از طریق پردازش بستهها
پیادهسازی ماشینهای حالت پروتکل پیچیده و الگوریتمهای شبکه
اشکالزدایی و عیبیابی کد برای حل مشکلات
پیشنیازها:
- دانش پایه از شبکه L2 و L3
- مهارت عالی در کار با اشارهگرها و محاسبات اشارهگر
- درک دستکاری حافظه در برنامهنویسی C
- صبر، روحیه مبارزه، آمادگی چالش و رویکرد پیروزمندانه
Abhishek CSEPracticals
Shiwani Nigam
Ekta Ekta
نمایش نظرات