|
所在平台: Udemy |
课程主页: https://www.udemy.com/course/nw_proto_dev_partb/
课程评论:没有评论
**课程概述:** 本课程是“从零开始用C语言开发网络协议”系列课程的第二部分。在前一部分(Part A)成功开发了邻居管理功能后,本课程将进入第二阶段——链路状态数据库(LSDB)管理。 **核心目标:** * **构建链路状态数据库:** 每个路由器将利用其接口上的邻居信息来构建本地的链路状态数据库。 * **LSDB同步:** 学习如何将本地的LSDB共享给拓扑中的所有其他运行ISIS协议的路由器,以确保所有路由器都拥有一个一致的、共同的网络拓扑视图。 **关键概念与实现:** 本课程将深入讲解并实现以下三个核心概念: 1. **报文泛洪(Packet Flooding):** 理解报文如何在网络中传播。 2. **构建链路状态数据库:** 学习LSDB的组成和生成过程。 3. **LSDB同步:** 实现LSDB在路由器之间的同步机制。 **技术重点:** * **定时器(Timers):** 与第一部分一样,定时器在第二阶段仍然至关重要,用于实现各种功能。 * **异步编程(Asynchronous Programming):** 引入异步编程的概念和实践。 **项目价值与学习成果:** * **端到端协议实现体验:** 通过实际构建网络协议(以ISIS路由协议为例),深入理解网络协议的开发流程。 * **大型项目开发实践:** 学习如何组织大型代码库(预计10k LOC),包括: * 代码模块化(按功能组织在不同的源文件中)。 * 代码组织(区分头文件和源文件)。 * 代码版本控制(使用GitHub)。 * 新功能的集成与兼容性测试。 * 代码调试与问题修复(使用gdb、Valgrind等工具)。 * **提升开发能力:** 通过完成此类大型项目,将开发能力提升至“10x Developer”的水平。 **课程结构:** 该系列课程共分为三部分:Part A、Part B 和 Part C。Part A 和 Part B 为已上线内容,Part C 正在开发中(截至2021年12月21日)。 **课程前提:** 强烈建议学员在学习本课程前完成Part A,并对定时器在状态机开发中的应用感到自信。
First of all Congratulations on completing the Part-A of this Course in which we develop the Adjacency Mgmt feature of the protocol. I hope you enjoyed and had a great learning. You must be Feeling confident in developing timer-based state machines now?And here starts a new challenge when we enter into Phase 2 of the Project - Link State Database Mgmt. Every Router will use its Adjacency Objects sitting on an interface to build its local Link State Database. But the challenge is - every router has to share its own local copy of the link-state database ( LSDB ) with every other router in the topology running ISIS protocol so that every router has a coherent and common view of the IGP topology. This is what is the end goal of this phase of the project.This full course series is divided into 3 parts - Part A, Part B, and Part C out of which Part A and B are Live, and Part C is under Development as of 21 Dec 2021.Once again we shall cover all required theories and concepts before we hit the keyboard for implementation. The three main concepts we shall going to implement in this installment of the course are:1. Concept of Packet Flooding2. Building of Link State Database3. Link State Database SynchronizationWe shall continue to use Timers as phase 2 is also heavily dependent on timers to achieve its goals. In addition to timers, we shall also get to introduce to the world of Asynchronous programming through this project.Continue to Challenge yourself by doing more of such projects and you will not even realize that you have already transformed yourself into a 10x Developer.Project GoalsThe AIM of this project is to cycle you through the experience of end-to-end implementation of a typical network protocol. In this case study, we have chosen a routing protocol as an example, but the high-level logistics involved to implement a typical network protocol are more or less the same. For example, a typical network protocol has to:Configurable via CLIsShow internal states and results through show CLIsRespond to generic configuration changes ( such as link shut-down, IP Address on interface change, etc)Compute results and install the results in Tables (Routing Information Base, MAC Tables, hardware Tables, etc )Respond to Topological Changes (link failures, device failures, etc )Time-out stale Data structures if any.Periodically Generate Or Process Protocol packetHow to add a new feature to the existing working Protocol Codebase. (This is what you shall be doing all your life as a software engineer!!)Since the project is quite big (I am expecting around 10k LOCs), you would also get the opportunity to learn how to:Organize the code in header and src filesModularize the codebase: How to keep the code of different features in different src filesTesting the new feature, and cross-check it doesn't break existing featuresMaintain Code Commits through Version control system ( Github in this case )Bug Fixing, and exercising various debugging techniques (gdb, Valgrind, etc )Needless to say, you Can't exercise the above points unless you do a project of considerable size.