以前读Tanenbaum的《计算机网络》(第四版),感觉是非常好的,但总是有种抓不住什么东西的感觉,后来看南京大学一位师兄的评价说道:“Tanenbaum的这本书最大的缺点是不够硬,大家应该看点别的书来补充”,一直不懂什么叫不够硬,自然更不知道什么书补充比较好了。
最近读软件考试指定的《网络工程师教程》(第二版),突然感觉到这就是硬的,就是最好的补充书。
为什么这么讲?分析一下两本书的特点。
在《计算机网络》中,Tanenbaum向我们娓娓道来网络的每一部分是怎么工作的,是什么样的原理,为什么是这样,我们是要解决什么问题,讲解的非常详尽清楚,语言风趣幽默,看着很舒服,也确实懂了很多。但最大的缺点是:网络是怎么实现的,讲的并不多。这本书过于注重“why",而忽略了"how",这里的"how"是从协议实现的角度来说的,也就是说协议是怎么样通过解决一个又一个实际问题的,而不仅仅是解决问题的理论。我们觉得的少了一点什么,抓不住什么,就是指的这个。
反观《网络工程师教程》,看到很多准备软件考试的朋友反映读不下去,这几天仔细读了一半,也就明白为什么会读不下去了,这本书前半部分纯粹是在讲各种技术是怎么实现的,一点也不讲为什么要这样,有时候一笔带过,有时候干脆不提,也有的时候讲的不清楚。但最大的特点是,细节上的实现非常详细。所以,同志们,想一想,如果你不知道CPU结构的时候,你去看累加器的电路是怎么样实现的,你会是什么感觉?你会觉得,喔,我知道了,它是这么干活的,可是我让它干这个活有什么用呢?这就是问题所在。
这样看来,这两本书是完全互补的:-)可以这样的顺序来读《网络》→《教程》→《网络》→《教程》,相信经过这样的顺序,一定能更深入理解计算机网络。
不过话说回来,真正的“硬”的,《网络工程师教程》还不能算。致力于进行网络方向研究开发的同志,推荐读下面一些资料:
《TCP/IP详解》(一共三卷)
《用TCP/IP进行网际互连》(也是三卷)
《TCP/IP协议簇》
以及各种RFC文档。
另外,Tanenbaum喜欢用分层的思想说事,他的《结构化计算机组成》也是分层。所以网络基本原理的书,只看他的这本《计算机网络》,很难有系统的概念。网络是这样一个复杂的东西,你既要了解每一处细节是怎么工作的,又不要陷入其中,要有系统整体的观念。后者的境界我还没有达到,所以只能猜是不是可以通过学习《计算机网络:自顶向下方法》或者《计算机网络:系统方法》来搞定。希望大家提出建议。