关于TCP/IP [本文发表于《程序员》杂志2003年第12期,作者孟岩]

基于TCP/IP的编程格外重要。从应用上来说,现在直接利用C层次Socket API进行TCP/IP编程的人确实越来越少了,各种现成的框架(如ACE、Java、.NET FCL)和控件(如IP*Works)大大简化了TCP/IP编程的难度。高层的框架和控件总结了TCP/IP的主要使用模式,并且进行了抽象和封装,这固然非常好,但是想要真正掌握TCP/IP网络编程的真谛,恐怕需要认真学习下面几本著作。

[ 查看本指南所提及的书籍 ]
[本文发表于《程序员》杂志2003年第12期,作者孟岩]
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.Richard Stevens,TCP/IP Illustrated, Vol.1 / Vol.2 /
Vol.3
《 TCP/IP详解(第一卷)协议 》《 TCP/IP详解 卷2:实现 》《 TCP/IP详解
卷3:TCP事务协议、HTTP、NNTP和UNIX域协议 》
《 TCP/IP详解卷1:协议(英文版) 》《 TCP/IP详解卷2:实现(英文版)
》《 TCP/IP详解卷3:TCP事务协议、HTTP、NNTP和UNIX域协议(英文版)

这是一本众望所归的书。自从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.Richard Stevens, UNIX Network Programming, 2/e, Vol.1 /
Vol.2
《 UNIX网络编程卷2:进程间通信(影印版·第2版) 》《
UNIX网络编程(第2版)第1卷:套接口API和X/Open传输接口API 》
又是Richard
Stevens,又是经典名著。这本书的第一版问世于1990年,是Stevens的开山之作,一举奠定了Stevens在网络编程领域的重要地位。如果说TCP/IP
Illustrated解答了“什么是TCP/IP”和“TCP/IP是怎么实现的”两个问题,那么这本书则是在回答“怎样运用TCP/IP开发网络应用程序”的问题。显而易见,这本书的内容更加贴近普通程序员,因此,大多数人是先学习UNP,然后再深入学习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进行网际互联第一卷:原理、协议与结构(第四版) 》《
用TCP/IP进行网际互联-第二卷:设计、实现与内核(第三版) 》《
用TCP/IP进行网际互联
第三卷:客户-服务器编程与应用(Linux/POSIX套接字版) 》
这套书也是三卷,前两卷内容与TCP/IP
Illustrated相似,最后一卷则偏重应用程序的开发。总体上来看,这三卷书的内容与上述Stevens的两套著作相当。Comer教授的这套书定位是教材,因此写出来中规中矩,寓精彩于平和之中。读者如果喜欢阅读教材风格的书,这套应该是很好的选择。

3.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. Douglas Schmidt, Steven Huston,C++ Network Programming,
Vol.1 / Vol.2
(中文版将分别由华中科技大学出版社和电子工业出版社出版)
《 C++网络编程 卷1:运用ACE和模式消除复杂性 》《 C++网络编程,卷2
基于ACE和框架的系统化复用 》ACE介绍
今天的网络编程环境是建立在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的网络编程知识与现代面向对象、模式和框架等最新技术思想结合起来,从而使你对网络编程的认识上升到一个新的高度。

时间: 2024-08-07 17:15:00

关于TCP/IP [本文发表于《程序员》杂志2003年第12期,作者孟岩]的相关文章

【程序员眼中的统计学(12)】相关与回归:我的线条如何? (转)

阅读目录 目录 1 算法的基本描述 2 算法的应用场景. 3算法的优点和缺点 4 算法的输入数据.中间结果以及输出结果 5 算法的代码参考 6 共享 相关与回归:我的线条如何? 作者 白宁超 2015年10月25日22:16:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习

C++程序设计之四书五经[转自2004程序员杂志]--下篇

C++程序设计之四书五经(下篇) 作者:荣耀 我在上篇中“盘点”了TCPL和D&E以及入门教程.高效和健壮编程.模板和泛型编程等方面共十几本C++好书.冬去春来,让我们继续C++书籍精彩之旅. 标准库 当我还在研究院工作时,与同院另外两家研究所合作开发过一个大型水利枢纽调度集成项目.我们三家软件系统之间都要相互通信.在调试通讯模块时,细心的客户(一名好学的系统管理员)发现对于同一通信规约的解释代码,我的不超过30行,而对方的则超过了150行且很难看懂.这位系统管理员很纳闷,我说大家编程风格和习惯

C++程序设计之四书五经[转自2004程序员杂志]--上篇

C++程序设计之四书五经 作者:荣耀 C++是一门广泛用于工业软件研发的大型语言.它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值.和C语言一样,C++已经在许多重要的领域大获成功.然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在不断蚕食着C++的地盘.也许C++与C合为一体永远都是一个梦想,也许Java和C#的狂潮终将迫使C++回归本位— 回到它有着根本性优势的开发领域:低级系统程序设计.高级大

从程序员到项目经理(12):如何管理自己的时间(下)

4.管理者无需事必躬亲 有一种类型的管理者,他们不论什么事一定要亲自去做,至少也是亲自过问.人们习惯用一个成语来赞美他们,叫“事必躬亲”,仿佛诸葛亮再世一般.凡事亲自去做未必真的可取,为什么诸葛亮只活了53岁,恐怕跟他这种事必躬亲的精神也有莫大的关系吧——他是把自己累死的. (1)不要和下属抢事做 管理者相对于操作层员工,多了一项法宝,就是授权.理论上,只要员工可以胜任,所有的工作都可以授权.事实上,总经理为什么能对全公司发号施令.对工作进行变革,那是因为董事会授予了这个权限.连这么高层的工作都

linux下TCP/IP实现简单聊天程序

可以在同一台电脑上运行,在一个终端上运行服务器端,在一个终端上运行客户端. 服务器端的IP地址要和本地的IP相同,并分配端口号,客户端的默认设置为本地,端口号自动分配. 服务器端: #include <stdio.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <sys/types.h> #include <netinet/in.h> #in

黑马程序员_JavaSE学习总结第12天_API常用对象2

------- android培训.java培训.期待与您交流! ----------  12.01 Scanner的概述和构造方法原理 Scanner类概述:JDK5以后用于获取用户的键盘输入 构造方法:public Scanner(InputStream source) public static final InputStream in:“标准”输入流. 此流已打开并准备提供输入数据.通常,此流对应于键盘输入或者由主机环境或用户指定的另一个输入源. 12.02 Scanner类的hasNe

连载《一个程序员的成长历程》-12.费尽心力的平台化构想

作为一名程序猿,在不懂这个行业的人眼里是光鲜的,高收入.高技术.往往我们把自己看成了异类,沉默.少语.只有在回帖的时候才像个正常人,不会人与人面对面沟通.其实,程序猿和其他行业没有什么区别,只是一个工种而已,喜欢就干,不喜欢就另谋生路.如果仅仅是为了生活,那一切的一切都无所谓了. 严格意义上讲,我只能算作半个程序猿.首先,公司不是IT公司,只是传统行业有软件部分的工作.其次,开发的人员也无所谓全体,算上我只有三个人,在我来之前也仅仅维护两个上位机软件,一个是VC++开发的,一个是VB开发,分别负

.Net程序员玩转Android开发---(12)ListView显示数据

Android中显示数据有多种控件,这节我们来认识下ListView,ListView是Android中最常用的数据显示控件,可以显示简单数据源,也可以显示复杂数据源,我们在Android系统中常看到的列表项,基本都是ListView的功劳.ListView中显示数据,肯定要绑定数据源.数据源的绑定是通过Adapter来完成的,Android中有两种常用的适配器,ArrayAdapter(数组适配器)  SimpleAdapter(简单适配器),适配器的作用就是把复杂的数据源显示到istview

程序员发展十分重要的12条日常习惯

(1) 代码签入要填备注:基本到基本的一条原则,好处不言自明,尤其是当团队成员较多的时候,清楚的注释能够快速定位一些因交叉签入和测试不彻底造成的bug.尤其要注明多个版本同时更新时的同步信息,尽量保证关键信息,如版本.bug号等的完整. (2) 签入代码前请先获取最新的版本:很容易被忽略的一点,因为很有可能你的同伴也在修改同一个文件,此时,如果你没有获取最新的代码,就匆忙地签入,是非常有可能在比较版本的时候漏掉冲突的地方,而直接签入的,导致同伴的代码被覆盖. (3) 签入代码前后均要对功能进行验