《Linux内核网络栈源代码情景分析》读后感
源自我的豆瓣日记:不需要读第二遍的书
不需要读第二遍不是说这本书很烂,而是,它的内容确实不需要读第二遍,读一遍就够了,没有需要反复咀嚼的知识.
这本书描述协议栈的视角很独辟蹊径,很适合学习网络协议栈入门时先翻一翻。它纯粹是从源码的角度来讲解协议栈,因为网络协议栈本身的分层设计就是为了简洁,所以它同样为了简洁明了,也从网络分层的角度来讲解,这就给入门者提供了一个快速切入的视角,能够从宏观上理解整个协议栈到底是怎么一回事。而且它选用的内核版本是1.2.13,源代码都是网络协议栈最核心的部分,比较容易梳理。
我重点看了这本书里对arp.c,ip.c,ip_fw.c,tcp.c这几个文件的讲解,很不出意外的是,这本书里面出现了一些错误。比如,
P545 :
对于raw类型套接字,不使用IP协议,
这里明显不对。实际上是由于raw套接字,用户会提供IP header,所以不需要创建IP header。
P705:
如果上次使用时间在10min之内,则清除该表项
应该是“如果上次使用时间在10min之外”。 PS:不清楚这是否是粗心或者印刷问题导致。
这本书用的内核版本有很多很明显的bug,比如ip.c的ip_rcv
这个函数里面竟然是以报文的frag_off
是否为零来判断有无分片,显然把首个分片报文(frag_off
为0)给忽略了。
总体而言,本书侧重于对源码的解释,对一些基本的网络概念讲解不够好,或者没有讲解。比如对于“面向报文”和“面向流”区别的解释,就有些不知所云。之所以说这本书不需要读第二遍,就是这个原因,作者没有自己的见解在里头,只是给我们提供了一个方便的视角来看源码。
对于协议栈初学者而言,在读这本书时,要结合《深入理解linux网络内幕》那本书一起看,那本书对网络的基本概念讲解的特别好,非常清晰明了。
另外,对于所有的网络从业者,甚至说软硬件工程师,《TCP/IP详解卷一》都是必读之书,而且是需要反复去读,读一遍显然是不够的。