A 部分 – C 中的网络协议开发(从头开始)
Part A – Network Protocol Development in C ( from scratch )
面向网络核心开发人员的网络编码项目、Linux、系统编程、操作系统、C/C++ 项目
你会学到什么
-
了解网络协议是如何在网络设备上实现的
-
逐步实施新功能
-
数据包处理,通过数据包处理更新协议数据结构
-
实施复杂的协议状态机和网络算法
-
调试和排除代码以解决问题
-
该项目的目的是让您体验典型网络协议的端到端实现
要求
-
基本的 L2 和 L3 网络知识
-
应该是优秀的指针,指针运算
-
必须了解 C 编程中的内存操作
-
耐心、斗士、挑战者、胜利者
描述
这门课程是关于什么的?
本课程介绍了我们实施类似于 OSPF(开放最短路径优先)和 ISIS(中间系统到中间系统)的伪内部网关协议的案例研究。ISIS 和 OSPF 都是属于链路状态协议类别的 IGP 协议,并且实现相同的目标。别担心,在我们开始编写项目的第一行代码之前,我们将涵盖所有关于我们将要在项目中实现的内容的必要理论。
整个课程分为 3 个部分 – A 部分、B 部分和 C 部分,其中 A 部分和 B 部分是实时的,C 部分正在开发中,截至 2022 年 10 月 19 日。
我们将使用我们的 tcp-ip 堆栈库实现实际 ISIS 协议的简化版本。目标是从头开始了解在设备上实现典型网络协议所涉及的细微差别。一旦您加入该行业,您将终生从事这项工作,但在此,本案例研究旨在为您提供有关在(模拟)设备上实施典型网络协议所需的第一手经验。
我敢打赌,如果你正在公司接受网络开发人员角色的面试,入门级最多 2-3 年的经验,或者跨域切换到网络开发,请在你的简历中看到上面提到的项目会让面试官起鸡皮疙瘩。如果你能回答交叉问题(我将在本课程中介绍)——你将毫无疑问地被选中。维护 GitHub,如果被要求向他展示你的代码。
项目目标
该项目的目的是让您循环体验典型网络协议的端到端实施。在本案例研究中,我们选择了一个路由协议作为示例,但实现典型网络协议所涉及的高级物流或多或少是相同的。例如,典型的网络协议必须:
- 可通过 CLI 配置
- 通过 show CLIs 显示内部状态和结果
- 响应一般配置更改(例如链接关闭、接口更改的 IP 地址等)
- 计算结果并将结果安装在表中(路由信息库、MAC 表、硬件表等)
- 响应拓扑变化(链路故障、设备故障等)
- 超时过时的数据结构(如果有)。
- 定期生成或处理协议数据包
- 如何向现有的工作协议代码库添加新功能。(这就是你作为软件工程师一生都应该做的事情!!)
由于该项目相当大(我预计大约有20k LOC),您还将有机会学习如何:
- 在头文件和src文件中组织代码
- 模块化代码库:如何将不同功能的代码保存在不同的 src 文件中
- 测试新功能,并交叉检查它不会破坏现有功能
- 通过版本控制系统(在本例中为 Github)维护代码提交
- 错误修复,并练习各种调试技术(gdb、Valgrind 等)
不用说,除非你做一个相当规模的项目,否则你无法锻炼以上几点。
完成本课程的先决条件
不用说,这个项目非常具有挑战性,您需要相当擅长 C/C++ 编程中的数据结构和算法。如果您仍在努力学习 LinkedList/Trees 或其他常见的计算机科学基础知识,我不建议您花时间在这个项目上——而是先构建您的基础知识。在你的简历上展示这个项目是没有意义的,同时你不能回答其他基础知识,比如堆内存、多线程等问题,或者在反转链表时惨败。
此外,我假设您没有网络路由协议方面的背景知识(但具备网络基础知识,例如 L3 路由等),因此我将从头开始,在我们开始编码之前涵盖所有必要的理论。在实施过程中,我们将在行业层面上获得与网络、项目规划、功能设计或编码标准相关的各种新概念。
本课程适合谁:
- 旨在在网络/分布式系统/系统编程方面工作的核心开发人员
- 不适合那些寻求非开发角色的人(这是纯粹的面向开发的课程)
- 不适合那些仍在苦苦挣扎于基本数据结构、基本 C 编程概念的人
- 职业人士、求职者、网络开发领域的改变者、学习者、渴望知识的人
评论(0)