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的网络编程知识与现代面向对象、模式和框架等最新技术思想结合起来,从而使你对网络编程的认识上升到一个新的高度。

TCP/IP之四书五经[转自2003.12程序员]的更多相关文章

  1. tcp/ip通信第5期之服务器端程序

    /* 此程序是tcp/ip通信服务器端程序,测试运行在redhat5上 重构readline函数,解决粘包问题——利用“\n”识别一个消息边界 */ #include<stdio.h> # ...

  2. J2EE修炼之四书五经[转自2004年程序员]

    J2EE修炼之四书五经 作者:彭晨阳 J2EE其实没有四书五经,因为J2EE一直如汹涌澎湃的大江,推陈出新,不断高速发展,这是一种带领我们走向未来的技术.当然,如何在这种气势如虹的潮流之中不至于迷失方 ...

  3. TCP/IP协议原理与应用笔记12:单播、多播和广播地址(目的地址)

    根据数据接收者的接收范围,将目的地址分为单播.多播.广播. 这里目的地址的划分主要针对的是 物理地址 和 IP地址,没有涉及到端口地址,因为主要针对标识通信节点的地址(物理地址 和 IP地址)而言,和 ...

  4. TCP/IP详解学习笔记(12)-- TCP:传输控制协议

    1.概述      TCP提供了一种可靠的面向连接的字节流运输层服务.      TCP将用户数据打包成报文段,它发送后启动一个定时器,另一端收到的数据进行确认,对失序的数据重新排序,丢弃重复数据,T ...

  5. TCP IP详解(转)

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层. 网络七层协议简称OSI.TCP/IP刨除了物理层,并把上三层(会话层.表示层和应用层)统称 ...

  6. 【计算机网络基础】TCP/IP、HTTP、Socket的概念

    TCP/IP协议是一个协议簇.里面包括很多协议的.UDP也是其中的一个.之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了.(资料来源: http://www.cnb ...

  7. ios开发网络知识 TCP,IP,HTTP,SOCKET区别和联系

    TCP,IP,HTTP,SOCKET区别和联系 网络由下往上分为:        对应 物理层-- 数据链路层-- 网络层--                       IP协议 传输层--     ...

  8. TCP/IP,Http,Socket,XMPP的区别

    大学学习网络基础的时候老师讲过,网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用 ...

  9. http、TCP/IP协议与socket之间的区别

    http.TCP/IP协议与socket之间的区别     网络由下往上分为:  www.2cto.com   物理层--                       数据链路层-- 网络层--   ...

随机推荐

  1. javascript opacity兼容性随笔

    一.CSS兼容代码 .transparent { filter:alpha(opacity=50); /* IE */ -moz-opacity:0.5; /* FireFox old version ...

  2. Redis中Value使用hash类型的效率是普通String的两倍

    什么Redis? 点击这里 最近要开发的一个项目是分布式缓存组件,解决参数缓存高效获取的问题.参数达到了500万级别,刚刚开始了解Redis.做设计的时候考虑到Value使用哪种类型的问题? 主要面临 ...

  3. HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误

    (来源:http://www.tuicool.com/articles/Ermmmyn) HTTP请求方法: 常用方法: Get\Post\Head (1)Get方法. 取回请求URL标志的任何信息, ...

  4. Task Runner Explorer for vs2015找不到啊

    https://visualstudiogallery.msdn.microsoft.com/8e1b4368-4afb-467a-bc13-9650572db708/view/ 编译typescri ...

  5. 冲刺阶段 day 9

    项目进展 昨天终于完成了教师部分的内容,今天我们又重新开始对之前系部设置不能实现的内容进行了编写,之前缺少删除和查询也做了补充,在与数据库的连接上也做了修改和更新. 存在问题 由于是之前遇到困难没做完 ...

  6. 来看看Windows9到底是什么

    今天有新闻一直在说windows 8.2 windows9,还给出了一张很有趣的图 我们就假设这张图是真的. 这张图透漏出两个信息 其一:开始菜单真的回来了. 不过还是不死心,绝不放弃开始屏,确实,开 ...

  7. 使用 PowerShell 自动登录Azure

    PowerShell 是管理 Azure 的最好方式之一,通过使用 PowerShell 脚本可以把很多的工作自动化.比如对于 Azure 上的虚拟机,可以设置定时关机操作,并在适当的时间把它开机,这 ...

  8. SQL面试题

    Student(S#,Sname,Sage,Ssex) 学生表     S#:学号:Sname:学生姓名:Sage:学生年龄:Ssex:学生性别Course(C#,Cname,T#) 课程表     ...

  9. android 中listview之BaseAdapter的使用

    Listview控件不像其他安卓控件那种直接拖拽到界面上就能用,而是采用类似J2EE中的MVC模型的方式使用,需要通过适配器将某种样式的数据或控件添加到其上而使用. MVC模型实现原理是 数据模型M( ...

  10. EF架构~CodeFirst生产环境的Migrations

    回到目录 Migrations即迁移,它是EF的code first模式出现的产物,它意思是说,将代码的变化反映到数据库上,这种反映有两种环境,一是本地开发环境,别一种是服务器的生产环境,本地开发环境 ...