TCP/IP网络编程之四书五经

                                                                孟岩

TCP/IP协议是目前广域网和局域网通用的网络协议,因此,基于TCP/IP的编程就格外重要。从 应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。但是,如果想要在这个领域达到融会贯通的地步,不打下坚实的基础是不可想象的。 正如Richard Stevens在TCP/IP Illustrated中所说,在网络编程领域,开发者所遇到的实际问题中,大约有90%都与开发者对于TCP/IP的理解相关。高层的框架和控件总结了 TCP/IP的主要使用模式,并且进行了抽象和封装,这固然非常好,但是要想真正掌握TCP/IP网络编程的真谛,恐怕需要认真学习下面的几本著作。

 

1、TCP/IP Illustrated, Vol.1 / Vol.2 / Vol.3

 

Richard Stevens,TCP/IP Illustrated英文版(卷一、 卷二卷三)、中文版(卷一、 卷二卷三) 机械工业出版社

这是一本众望所归的书。自从1994年出版以来,TCP/IP Illustrated就一直是TCP/IP领域具有传奇色彩的圣经级著作。这一套著作共分为三卷,第一卷通过实际动手实验的方式深入探讨TCP/IP协 议;第二卷逐行解释了4.4BSD系统TCP/IP协议栈的15,000行实现代码;第三卷探讨了T/TCP和HTTP等高级协议。整套书最大的特点就是 贴近实践,完全符合程序员的胃口,不空谈,不说教,用实验和代码来说明问题。写作这样的书,对于作者要求非常之高,即使在今天看来,敢于这么写作的作者也 是凤毛麟角。Richard Stevens以他的写作风格和作品,在TCP/IP编程领域竖立起一座丰碑,令其他作者高山仰止,心向往之。在下文将要提到的Effective TCP/IP Programming一书中,甚至把“读Stevens的书”专门列为一个条款。这套著作的地位,可见一斑。

学习这套书,与其说需要读,不如说需要做。Stevens最强调程序员的两项能力:一是读代码,二是 动手实验。他在自己所有的书里都敦促读者将范例输入电脑,亲自编译、运行和调试。这当然需要花费大量的时间和精力,但是如果有读者能够扎扎实实地这么做, 那么他所付出的每一分钟都将会有双倍的回报。

 

2、UNIX Network Programming, 2/e, Vol.1 / Vol.2

 

Richard Stevens,UNIX Network Programming英文版(卷一、 卷二)、中文版(卷一、 卷二) 清华大学出版社

又是Richard Stevens,又是经典名著。这本书的第一版问世于1990年,是Stevens的开山之作,一举奠定了Stevens在网络编程领域的重要地位。如果 说TCP/IP Illustrated解答了“什么是TCP/IP”和“TCP/IP是怎么实现的”两个问题,那么这本书则是在回答“怎样运用TCP/IP开发网络应用 程序”的问题。显而易见,这本书的内容更加贴近普通程序员,因此,大多数人是先学习这本书,然后再深入学习TCP/IP Illustrated。

这也是一本让人伤感的书,Richard Stevens从1997年开始撰写此书第二版,制定了一个宏大的计划:卷1阐述Socket API和TLI API;卷2阐述除Socket之外的其他IPC机制;卷3阐述网络编程应用。应该说,卷1和卷2都是为了给卷3打基础。然而天妒英才,就在世人翘首企盼 第三卷的时候,1999年9月1日,Richard Stevens英年早逝。留下这套未完成的巨著,让人感慨不已。不过最近从Prentice Hall传来好消息,出版社已经找到合适的作者,重新修订这套经典巨著,其中第一卷即将问世,并且已经在Amazon上热卖。相信会有当世高人沿着 Stevens的足迹给我们续写第三卷的,让我们拭目以待。

可选图书:Douglas E. Comer, Internetworking with TCP/IP, Vol.1 / Vol.2 / Vol.3。这套书也是三卷,前两卷内容与TCP/IP Illustrated相似,最后一卷则偏重应用程序的开发。总体上来看,这三卷书的内容与上述Stevens的两套著作相当。Comer教授的这套书定 位是教材,因此写出来中规中矩,寓精彩于平和之中。读者如果喜欢阅读教材风格的书,这套应该是很好的选择。

 

3、Effective TCP/IP Programming

 

Jon C. Snader,Effective TCP/IP Programming、中文版:高级TCP/IP编程

自彻读Effective C++之后,我总结出一条经验。无论在哪个领域中,一旦掌握基础知识,则应该迅速去寻找该领域中一本名为“Effective XXX”的著作并阅读之,一定可取得事半功倍的效果。Effective C++如此,Effective STL如此,Effective Java如此,这本Effective TCP/IP同样如此,也是一剂功效强大的催化剂。

本书作者是经验丰富的TCP/IP程序员,他在这本书中总结了44个难得的TCP/IP开发经验,并且将每条经验背后的道理都详细地讲解。毫无疑问,这种“专家经验”型著作对于提高读者水平,能够起到最高效、最直接的作用。

初学TCP/IP的朋友可能觉得,自己应该先把基本知识熟练掌握,再看这本书,效果会更好。我认为不 必如此,您可以在基本观念建立起来之后直接品读此书。这本书篇幅不大,起点不高,却对很多关键问题进行了全面而细致地介绍,在具体问题的阐述上颇有 Richard Stevens之风,也是纯而又纯的程序员风格——拿代码说话。

系统学习和重点难点的突破相结合,历来是快速掌握一门技术的良方。由Scott Meyers开创的“Effective”之风,已有愈演愈烈之势,这是程序员们的巨大福音。我强烈建议大家,不要放过任何一本以“Effective”为名的技术书籍。

 

4、C++ Network Programming, Vol.1 / Vol.2

 

Douglas C. Schmidt,Stephen D. Huston,,C++ Network Programming英文版(卷一、 卷二)、中文版(卷一、 卷二

今天的网络编程环境是建立在C的基础之上。如果你满足于C层次的TCP/IP编程,那么 Stevens的书可以说达到了一个最高境界,你大可以登东山而小鲁。但是如果再上一个层次,考虑如何运用C++强大的抽象机制使网络编程变得更加富于艺 术性,更加高效可靠,那么恐怕必须要高度重视这套书。

这套书共两卷,篇幅都不大,主要内容是介绍ACE。在C++领域,由于这套书被Bjarne Stroustrup编入C++ In Depth系列,因此具有崇高的地位。而在网络编程领域,也有人称赞此书为Stevens之后最重要的网络编程著作。作者Douglas Schmidt是C++、网络程序设计和模式领域中国际公认的权威专家,潜心研究C++网络编程已经十多年。他发起的ACE开源项目是目前当之无愧的最优 秀和最成功的C++网络编程环境,不仅具有非常出色的可移植性,而且性能卓越。美国国防部的ARPA已经支持这个项目好几年了,其最终目的是在ACE的基 础上建立可用于现代战争的实时分布式系统。毫无疑问,ACE无论在理论上还是在实践中,都是最值得程序员关注的网络编程典范项目,而这一套两卷对ACE的 介绍性书籍,也毫无疑问是最值得网络程序员品读分析的经典。学习这两本书,你可以将经典的基于C API的网络编程知识与现代面向对象、模式和框架等最新技术思想结合起来,从而使你对网络编程的认识上升到一个新的高度。

TCP/IP是计算机网络协议中的一族,我们学习TCP/IP,是为了更好的进行网络编程。而为了更 好地学习网络编程,还应该打下扎实的计算机网络理论基础。虽说“计算机网络”书籍应该是另外一个主题,但是如果考虑到与TCP/IP的学习相配合,我倒想 在这里额外推荐一本相关的书籍:

Larry Patterson & Bruce Davie,Computer Networks: Systems Approach Second Edition

这本书的作者是普林斯顿大学教授,对于网络系统有极为深刻的理解。作品的最大特点是以非常系统的方式介绍了网络系统的“why”和“how”,整本书思维非常清晰,读来连贯一致,欲罢不能,而对于提高你的TCP/IP编程能力,有着非常切实的作用。