آموزش توسعه پروتکل شبکه در C (از ابتدا) - بخش الف - آخرین آپدیت

دانلود Part A - Network Protocol Development in C ( from scratch )

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

پروژه کدنویسی شبکه برای توسعه‌دهندگان هسته شبکه، لینوکس، برنامه‌نویسی سیستم، سیستم‌های عامل و پروژه‌ها به زبان 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 نگهداری کنید تا در صورت درخواست، به مصاحبه‌کننده ارائه دهید.

اهداف پروژه کدنویسی شبکه

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

  1. از طریق CLIs قابل پیکربندی باشد.
  2. وضعیت‌های داخلی و نتایج را از طریق show CLIs نمایش دهد.
  3. به تغییرات پیکربندی عمومی (مانند خاموش کردن لینک، تغییر آدرس IP در رابط) پاسخ دهد.
  4. نتایج را محاسبه کرده و در جداول (مانند پایگاه اطلاعات مسیریابی، جداول MAC، جداول سخت‌افزاری و غیره) نصب کند.
  5. به تغییرات توپولوژیکی (خرابی لینک، خرابی دستگاه و غیره) پاسخ دهد.
  6. ساختارهای داده قدیمی در صورت وجود را منقضی کند.
  7. به صورت دوره‌ای بسته‌های پروتکل را تولید یا پردازش کند.
  8. نحوه اضافه کردن یک ویژگی جدید به پایگاه کد پروتکل موجود را بیاموزد. (این همان کاری است که شما تمام عمر به عنوان یک مهندس نرم‌افزار انجام خواهید داد!)

از آنجایی که پروژه نسبتاً بزرگ است (حدود 20 هزار خط کد انتظار می‌رود)، شما همچنین فرصت یادگیری نحوه انجام موارد زیر را خواهید داشت:

  1. سازماندهی کد در فایل‌های هدر و سورس.
  2. ماژولار کردن پایگاه کد: نحوه نگهداری کد ویژگی‌های مختلف در فایل‌های سورس متفاوت.
  3. تست ویژگی جدید و بررسی اینکه آیا ویژگی‌های موجود را مختل نمی‌کند.
  4. نگهداری کامیت‌های کد از طریق سیستم کنترل نسخه (در این مورد GitHub).
  5. رفع اشکال و تمرین تکنیک‌های مختلف اشکال‌زدایی (gdb، Valgrind و غیره).

ناگفته نماند که شما نمی‌توانید نکات فوق را تمرین کنید مگر اینکه یک پروژه با اندازه قابل توجه انجام دهید.

پیش‌نیازهای لازم برای گذراندن این دوره

بدون شک، این پروژه بسیار چالش‌برانگیز است و شما باید در ساختار داده‌ها و الگوریتم‌ها در برنامه‌نویسی C/C++ مهارت نسبتاً خوبی داشته باشید. اگر هنوز با لیست پیوندی/درختان یا سایر اصول اولیه علوم کامپیوتر مشکل دارید، توصیه نمی‌کنم وقت خود را صرف این پروژه کنید – بلکه ابتدا بر روی تقویت مبانی خود کار کنید. هیچ فایده‌ای ندارد که این پروژه را در رزومه خود نمایش دهید در حالی که نمی‌توانید به سوالات بنیادی دیگر مانند حافظه پشته، چندنخی و غیره پاسخ دهید یا در معکوس کردن یک لیست پیوندی شکست بخورید.

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

درک چگونگی پیاده‌سازی پروتکل‌های شبکه در دستگاه‌های شبکه

پیاده‌سازی تدریجی ویژگی‌های جدید

پردازش بسته‌ها، به‌روزرسانی ساختارهای داده پروتکل از طریق پردازش بسته‌ها

پیاده‌سازی ماشین‌های حالت پروتکل پیچیده و الگوریتم‌های شبکه

اشکال‌زدایی و عیب‌یابی کد برای حل مشکلات

پیش‌نیازها:

  • دانش پایه از شبکه L2 و L3
  • مهارت عالی در کار با اشاره‌گرها و محاسبات اشاره‌گر
  • درک دستکاری حافظه در برنامه‌نویسی C
  • صبر، روحیه مبارزه، آمادگی چالش و رویکرد پیروزمندانه

سرفصل ها و درس ها

اهداف دوره و پیش‌نیازها Course Objectives and Pre-requisites

  • اهداف دوره و پیش‌نیازها Course Objectives and Pre-requisites

  • دستور کار و چالش‌ها Agenda and Challenges

  • نقشه راه پروژه Project Road Map

  • چگونه این دوره را بگذرانیم؟ How to do this Course ?

آموزش – آشنایی با کتابخانه پشته TCP/IP Schooling - Get familiar with TCP/IP Stack Library

  • دانلود کد منبع (Src Code) Download Src Code

  • راه‌اندازی Code Navigator Setup Code Navigator

  • ساخت توپولوژی (اختیاری، می‌توانید رد شوید) Topology Building ( Optional, you may Skip )

  • بررسی جداول RT و MAC Checking RT and MAC Tables

  • کپچر بسته و اشکال‌زدایی (Packet Capture and Debugging) Packet Capture and Debugging

  • طراحی داخلی و معماری کتابخانه Library Internal Design and Architecture

  • مدیریت رویدادهای تغییر پیکربندی رابط Handling Interface Config Change Events

  • کتابخانه LIBCLI LIBCLI Library

تئوری – مبانی مسیریابی لایه 3 Theory - Layer3 Routing Fundamentals

  • خوش آمدید به کالج – دستور کار Welcome To College - Agenda

  • ساخت جدول مسیریابی L3 – مقدمه L3 Routing Table Construction - Introduction

  • اهداف و صورت مسئله Goals and Problem Statement

  • فرمت ورودی جدول مسیریابی Routing Table Entry Format

  • ECMP – مسیرهای برابر با هزینه مساوی ECMP - Equal Cost Multiple Path

  • همکاری دستگاه‌های L3 L3 Device Collaboration

  • گام‌های کلی برای ساخت جدول مسیریابی Generic Steps to Build Routing Table

تئوری – درک عملکرد پروتکل‌های IGP Theory - Understanding IGP Protocols Functioning

  • فازهای این بخش Phases of This Section

  • فاز 1 – 4 گام Phase 1 - 4 Steps

  • فاز 1 – گام‌های 1 و 2 Phase 1 - Step 1 and 2

  • فاز 1 – گام‌های 3 و 4 Phase 1 - Steps 3 and 4

  • فاز 2 – الگوریتم Spf Phase 2 - Spf Algorithm

  • فاز 2 – مثال 1 الگوریتم Spf Phase 2 - Spf Algo Example 1

  • فاز 2 – قوانین الگوریتم Spf Phase 2 - Spf Algo Rules

  • فاز 2 – مثال 2 الگوریتم Spf Phase 2 - Spf Algo Example 2

  • فاز 3 – محاسبه نهایی جدول مسیریابی Phase 3 - Final Routing Table Computation

  • نتیجه‌گیری Conclusion

حرفه‌ای – شروع کار با توسعه پروتکل Professional - Getting Started with Protocol Dev

  • شروع کار Getting Started

  • اکوسیستم برای توسعه پروتکل Ecosystem for Protocol Development

  • معرفی LIBCLI Introducing LIBCLI

  • توسعه CLI Ist Ist CLI Development

  • پیاده‌سازی پردازشگر Backend برای CLI CLI Backend Handler Implementation

  • نگه‌دارنده‌های پیکربندی پروتکل Protocol Configuration Holders

  • سوالات تمرین (الزامی) Assignment Questions ( Mandatory )

  • توسعه یک Show CLI Developing a Show CLI

  • پیکربندی رابط‌های پروتکل Configuring Protocol Interfaces

  • CLI برای پیکربندی رابط‌ها CLI for Configuring Interfaces

  • تمرین الزامی Mandatory Assignment

  • فعال کردن/غیرفعال کردن پروتکل روی رابط‌ها Enable Disable Protocol On interfaces

  • تمرین الزامی Mandatory Assignment

بسته‌های کنترل پروتکل Protocol Control Packets

  • انواع بسته‌های پروتکل Protocol Packet Types

  • دستکاری فریم‌های اترنت – APIها Manipulating Ethernet Frames - APIs

  • ثبت بسته – گام 1 از 2 Packet Registration Step 1 of 2

  • ثبت بسته – گام 2 از 2 Packet Registration Step 2 of 2

  • نتیجه‌گیری Conclusion

فاز 1 – پیاده‌سازی مدیریت مجاورت Phase 1 - Adjacency Mgmt Implementation

  • مدیریت مجاورت – شروع کار Adjacency Mgmt - Getting Started

  • محتوای بسته Hello Hello Pkt Content

  • تشکیل مجاورت Adjacency Formation

  • وضعیت مجاورت Adjacency State

  • تایمرهای مجاورت Adjacency Timers

  • تمرین الزامی Mandatory Assignment

  • چه چیزی در این بخش برای پیاده‌سازی وجود دارد؟ Whats in this section to implement ?

  • TLVs – پیش‌نیازها TLVs - Prerequisites

  • درج TLV TLV Insertion

  • جستجوی TLV TLV Search

  • فرمت بسته Hello Hello Packet Format

  • سوالات تمرین Assignment Questions

  • ساخت بسته‌های پروتکل Hello – پیش‌نیازها Cooking up Hello Protocol Packets - Pre-requisites

  • ساخت بسته‌های پروتکل Hello Cooking up Hello Protocol Packets

  • انتقال بسته Hello Hello Packet Transmission

  • پیاده‌سازی انتقال بسته Hello Hello Packet Transmission Implementation

  • سوالات تمرین Assignment Questions

  • ادغام APIهای انتقال Hello Hello Xmit APIs Integration

  • آزمایش انتقال Hello Hello Transmission Testing

  • سوالات تمرین Assignment Questions

فاز 1 – کپچر بسته و اشکال‌زدایی Phase 1 - Packet Capture and Debugging

  • لاگ کردن بسته Packet Logging

  • ثبت بسته برای ردیابی و لاگ کردن Packet Registration for Tracing and logging

  • دموی ردیابی بسته Packet Tracing Demo

  • لاگ کردن ردیابی‌های داخلی Logging Internal Traces

فاز 1 – پردازش بسته Hello پروتکل Phase 1 - Protocol Hello Packet Processing

  • نقطه ورود برای پردازش بسته Entry point for Packet Processing

  • سوال تمرین Assignment Question

  • بررسی‌های اعتبارسنجی روی بسته‌های Hello Validation Checks on Hello Pkts

  • رفع اشکال – بازگشت از دست رفته Bug Fix - Missed return

  • ایجاد شیء مجاورت Adjacency Object Creation

  • بهبود دستورات Show Show Command Enhancements

  • دموی پروژه تا به اینجا! Demo of the Project so far !

  • تایمرهای مجاورت Adjacency Timers

  • پیاده‌سازی APIهای تایمر حذف مجاورت Adjacency Delete Timer APIs Implementation

  • پیاده‌سازی APIهای تایمر انقضای مجاورت Adjacency Expiry Timer APIs Implementation

  • سوالات تمرین Assignment Questions

  • بهبود دستور Show: نمایش وضعیت تایمر مجاورت Show Command Enhancement : Display Adjacency Timer Status

  • دیاگرام انتقال وضعیت مجاورت Adjacency State Transition Diagram

  • پیاده‌سازی دیاگرام انتقال وضعیت مجاورت Adjacency State Transition Diagram Implementation

  • پیاده‌سازی دیاگرام انتقال وضعیت مجاورت – بخش 2 Adjacency State Transition Diagram Implementation - Part 2

  • رفع اشکال – ماشین وضعیت مجاورت – شکست‌های از قلم افتاده Bug Fix - Adjacency State Machine - Missing Breaks

  • سوالات تمرین Assignment Questions

فاز 1 – سوالات تمرین – مهارت‌های خود را نشان دهید Phase 1 - Assignment Questions - Show me your Skills

  • سوالات تمرین – درک خود را از فاز 1 آزمایش کنید Assignment Questions - Test your Understanding of Phase 1

فاز 1 – اعلان‌های تغییر پیکربندی رابط Phase 1 - Interface Config Change Notifications

  • پردازش پیکربندی رابط – طراحی Interface Config Processing - Design

  • ثبت رویدادهای رابط Interface Events Registration

  • پردازش رویدادهای رابط Processing Interface Events

  • مدیریت رویداد فعال/غیرفعال کردن رابط Handling Interface Enable/Disable Event

  • مدیریت رویداد تغییر آدرس IP Handling IP Address Change Event

  • روش آزمایش Testing Procedure

فاز 1 – خاموش کردن پروتکل Phase 1 - Shutting Down the Protocol

  • خاموش کردن پروتکل Protocol Shutdown

  • تمرین Assignment

  • از اینجا به بعد چه کنیم؟ Where to go from here ?

پروژه کوچک – پیاده‌سازی نگاشت لایه 2 Mini Project - Implement Layer2 Mapping

  • صورت مسئله Problem Statement

  • کار پروژه Project Working

  • APIها و دموی کار APIs and Working Demo

ضمیمه الف – بخش 1 – آموزش کتابخانه LibClI Appendix A - Part 1 - LibClI Library Tutorial

  • مقدمه Introduction

  • انواع دستورات و دموی سریع Command Types and quick demo

  • درخت دستورات Command Tree

  • انواع پارامترها Param Types

  • پیاده‌سازی پردازشگر Backend Backend Handler Implementation

ضمیمه الف – بخش 2 – آموزش کتابخانه LibClI Appendix A - Part 2 - LibClI Library Tutorial

  • ساخت یک کتابخانه Building a Library

  • شمول فایل‌های هدر Hdr File Inclusions

  • مثال دستور show show command example

  • دموی دستور show show command demo

  • جریان داده از فرانت‌اند به بک‌اند Front-End to Backend Data Flow

  • قابلیت‌های کتابخانه Library Capabilities

  • مثال دستور config Config Command Example

ضمیمه ب – لیست پیوندی مبتنی بر چسب Appendix B - Glue Based Linked List

  • مقدمه Introduction

  • تعریف GLthreads GLthreads Definition

  • تفاوت تصویری Pictorial Difference

  • میدان offset ساختار Structure Field offset

  • درج GLNode GLNode Insertion

  • تکرار GLThread GLThread Iteration

  • حذف GLNode GLNode Deletion

  • دموی گام زدن در کد Code Walk Demo

  • مشکلات لیست پیوندی سنتی Traditional Linked List Problems

  • مزایای GLThread GLThread Benefits

ضمیمه ج – نکات گنجاندن فایل هدر Appendix C - Header File Inclusion Tips

  • گنجاندن تکراری فایل هدر Duplicate Hdr File Inclusion

  • دستورالعمل‌های پیش‌پردازنده Preprocessor Directives

  • راه حل Solution

ضمیمه د – TLVs (نوع، طول، مقدار) Appendix D - TLVs ( Type Length Value )

  • مفهوم TLVs Concept of TLVs

  • تجزیه بافر TLV Parsing TLV Buffer

  • تمرین TLV TLV Assignment

ضمیمه ه – آموزش کتابخانه تایمر Appendix E - Timer Library Tutorial

  • کارکرد تایمرها Working of Timers

  • لغو ثبت تایمر Timer De-Registration

  • سایر APIهای مفید تایمر Other Helpful Timer APIs

درس پاداش Bonus Lecture

  • درس پاداش Bonus Lecture

نمایش نظرات

آموزش توسعه پروتکل شبکه در C (از ابتدا) - بخش الف
جزییات دوره
12.5 hours
119
Udemy (یودمی) Udemy (یودمی)
(آخرین آپدیت)
1,338
4.5 از 5
دارد
دارد
دارد
جهت دریافت آخرین اخبار و آپدیت ها در کانال تلگرام عضو شوید.

Google Chrome Browser

Internet Download Manager

Pot Player

Winrar

Abhishek CSEPracticals Abhishek CSEPracticals

من شبکه می سازم!

Shiwani Nigam Shiwani Nigam

مجری بازاریابی دیجیتال

Ekta Ekta Ekta Ekta

مدیر تاسیسات