TCP/IP的经典网络编程

时间:2023-12-10 12:33:20

                                                                         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

TCP/IP的经典网络编程       
TCP/IP的经典网络编程     
TCP/IP的经典网络编程

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

TCP/IP的经典网络编程                 
TCP/IP的经典网络编程

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

TCP/IP的经典网络编程

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

TCP/IP的经典网络编程         TCP/IP的经典网络编程

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的学习相配合,我倒想在这里额外推荐一本相关的书籍:

TCP/IP的经典网络编程

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

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

版权声明:本文博客原创文章,博客,未经同意,不得转载。