学完上述书籍后,自然又有了新的疑问,套接字(socket)底层是如何实现的?tcp/ip又是怎样工作的?于是笔者又开始探索起关于协议栈的内容。最先阅读的是Douglas E.Comer的<<用TCP/IP进行网际互联>>三卷,笔者个人觉得非常适合入门。
就着上面书中的第二卷,笔者完成了第一个协议栈(XINU)的分析。
阅读完上面三卷后,意犹未尽,毕竟XINU是个并不流行的操作系统,于是捧起了TCPIP详解三卷。
其中卷二的tcpip实现基于BSD4.4-lite源码,无疑是tcpip最为广泛的实现,更加贴近现实。笔者花了大量的时间阅读了tcpip详解卷二,同时分析了BSD4.4的网络子系统。在此基础上,还顺带分析了专用于嵌入式的lwip协议栈。同时小试牛刀,解决了raw-os(某实时操作系统)适配lwip协议时关于free arp的一个初始化bug。Debug lwip协议栈的那个下午现在回想起来依旧令人心潮澎湃。
Linux Linux内核工作后基本都在和linux打交道。按笔者一探到底的精神必然研读起linux内核。首先是啃了好几本大部头的linux内核著作。
第一本,<<linux内核设计与实现>>(缩写lkd)比较薄,用来入门比较合适,能够建立起基本的linux内核图景。
第二本,<<深入理解Linux内核>>(缩写ulk)很厚,囊括了linux各个基本的子系统模块和其具体的实现机制,确实做到了深入理解这几个字。
第三本,<<深入linux内核架构>>(缩写PLKA)更厚。其于上面的<<深入linux内核>>相辅相成,ulk详细阐述的其一笔带过,ulk遗漏但重要的PLKA对其做了详细解释。
最后一本<<Linux内核源代码情景分析>>是国人写的,也非常不错,只是内核版本(2.4)有点老了,不过也是非常不错的补充。
读完上述三本,应该算对内核应该有个基本的入门了吧。下面就是深入到内核的各个子模块的代码实现里了,于是笔者又读了:
第一本<<Linux网络技术内幕>>帮笔者梳理了linux内核网络子模块的各种关键代码路径。
第二本<<深入理解Linux虚拟内存管理>>虽然中文翻译的不太好,但确实是本好书,配合英文版帮笔者夯实了虚拟内存的基础。
第三本<<Linux设备驱动程序>>算是一个补充吧,由于笔者并不搞驱动,所以通过这本书了解下Linux驱动到底是怎么运行的。