2018年已经是过去式了,来到公司差不多满一年。这一年里时间过的蛮快的,总体感觉忙忙匆匆,很有必要记录一下。
一月&二月&三月 :
主要忙着开发内核抓包功能,功能虽然比较简单但是对Linux内核网络协议栈的知识要求很高。
遇到的主要问题是抓包的报文没有mac地址,这个主要是因为在netfilter的链上捕获报文,这个时候出去的报文是没有mac地址的,
这个问题困扰了好久,大概在八月份在阅读内核网络协议栈源码的时候才想到了一个解决方法,mac缓存,就是在系统收到报文的时候保存其mac地址,相当于arp缓存,这样出去的报文就可以有mac了。
四月&五月&六月
这段时间在开发BFD(双向循环检测),主要用于双机设备的时候主备检测使用。主要的开发问题在于不知道怎么着手。第一次进行一个协议的开发没有什么方向,后来在上司的建议下参考了一个开源实现kbfd。这份代码是在内核实现的,并且内核版本比较老,无法直接拿来使用。但是参考价值还是有的,包括基本的BFD协议栈处理流程等。最终的实现与kbfd完全不一样,完全在用户层开发,有因为我们产品平台运行的是Go代码,因为对Golang不熟,只好使用CGO开发,这个项目学到了很多关于Linux网络编程的知识以及认识到开源平台的力量。bfd是支持加密的,目前仅仅支持非加密,后续学习后再补上这个功能。
七月&八月&九月
第三季度主要的工作包括前两个季度工作的维护以及现有功能的维护。现有功能的维护包括内核转发模块以及相关模块的IPv6支持。这部分工作难度不大,工作量足够多。
十月&十一月&十二月
第四季度主要工作是SNMP功能开发以及IPv6的支持。SNMP开发主要任务是将net-snmp开源软件移植到我们产品平台上去,这一阶段根据工作需求阅读了net-snmp源码,对其基本流程有了一个基本了解,然后结合Golang语言适配了自己的产品平台。
2018年的主要项目就是这些,还有一些小事情没有述及。总的来说,学习到很多知识,包括Linux网络开发、Linux内核模块开发、Linux网络协议栈基本原理以及Golang开发等,虽说是学习了但是也仅仅是了解的程度,像是Linux网络协议栈这一块的内容,不花点时间阅读内核源码的话还真不敢说自己了解。哈哈。
2019年展望:
1. Linux网络协议栈基本原理。
2. Linux网络安全ipsec基本原理。
3. SIP处理。
またね