标题：TCP/IP高效编程：改善网络程序的44个技巧
基本信息
原书名： Effective TCP/IP Programming: 44 Tips to Improve Your Network Programs
原出版社： Addison-Wesley Professional
作者： (美)Jon C. Snader  TCP/IP高效编程:改善网络程序的44个技巧译者： 陈涓 赵振平
丛书名： 图灵程序设计丛书
出版社：人民邮电出版社
ISBN：9787115249371
上架时间：2011-4-15
出版日期：2011 年4月
开本：16开
页码：268
版次：1-1
内容简介
《tcp/ip高效编程:改善网络程序的44个技巧》是tcp/ip 领域的经典著作，对tcp/ip 网络编程中存在的各种问题进行了全面解析，旨在帮助读者深入透彻地理解tcp/ip 网络编程。本书组织方式比较特别，正文部分包括4 章，将网络编程中存在的常见问题组织成44 个技巧，探讨问题的过程中构建并运行了多个程序，并且指出了代码的源地址，便于读者查看。全书以技巧的形式解答了日常工作中遇到的经典问题，将本书作为手册使用，极其方便。
《tcp/ip高效编程:改善网络程序的44个技巧》主要面向有一定经验的初学者或中级网络程序员，也可作为计算机相关专业人士的参考读物。
译者序
网络已经无处不在，和我们的生活息息相关，绝大部分有趣和有用的程序都需要进行网络访问。
TCP/IP是因特网的核心协议，它最流行的编程接口是套接字。应用程序通过套接字可以很容易地进行网络通信。然而，实际的程序在运行时，常会碰到各种各样的性能和连通性方面的问题。如果对网络协议的底层运作细节没有深入的了解，就会被这些问题所困扰，难以开发出高效和稳健的应用程序。
Jon C. Snader的这本书是深入学习TCP/IP网络编程的必备书籍。通过一个个独立的技巧，本书对网络编程中可能碰到的各种微妙问题一一进行了深入的分析和阐释，并提供了很多可以方便扩展的实例代码。有些复杂的问题还在多个技巧中反复提起，从多种角度帮助读者加深理解。本书还对解决联网问题的常用工具进行了精要的介绍，帮助读者利用工具提高分析和解决联网问题的能力。
如今的编程工作除了靠埋头苦干，还要充分利用网络带来的便利，学习和利用世界上其他编程人员的优秀成果，避免毫无意义的重复劳动，切不可闭门造车或重蹈覆辙。本书最后的阅读代码技巧中，对网络和操作系统方面的可以公开获得的优秀书籍和开源项目进行了梳理，旨在帮助读者找到适宜的学习目标，从而少走弯路，加快学习和成长的速度。
本书适用读者范围广泛，对有一定网络编程基础和经验丰富的工程师都具有很高的参考价值。我自身虽然具有多年网络编程教学和产品开发方面的实践经验，但在翻译本书的过程中也学习和完善了很多知识。
IT技术发展迅猛，许多书籍很快就会过时。而本书的英文原版虽然出版于2000年，但它是作者长期分析实践总结出的真知灼见，如今看来，它不但没有过时，还将会伴随TCP/IP体系的进一步发展，产生深远的影响。
陈涓
2011年1月
媒体评论
“本书从程序员的角度剖析了TCP/IP的基本原理，没有任何照本宣科式的说教，而是采用了大量实用的建议、技巧，一定会让每一位网络编程人员爱不释手、受益匪浅。”    
─—Uri Raz，TCP/IP专家、资深网络工程师
“本书可以跟Stevens的书互为补充。书中的内容可以用言简意赅来形容，作者在如此少的篇幅中讨论了那么多TCP/IP开发的知识点，真是令人惊叹不已。它特别适合偶尔做做相关开发，而不愿意啃大部头著作的程序员。”
─—亚马逊读者评论
“谢天谢地，本书帮我解决了在一个大型公司级网络编程项目中遇到的所有难题！它不仅教会了我使用各种网络编程工具，而且更重要的是让我以前那些模糊的认识都得到了澄清。好书，快看，马上学以致用吧！”
─—W. J. Vovil “Wayne”，程序员
目录
《tcp/ip高效编程:改善网络程序的44个技巧》
第1章 概述        1
1.1 几个约定        1
1.2 本书其余部分的内容介绍        2
1.3 客户端—服务器结构        4
1.4 对基本套接字api的回顾        5
1.5 小结        12
第2章 基本概念        13
2.1        技巧1：理解面向连接和无连接协议之间的区别        13
2.2 技巧2：理解子网和cidr的概念        18
2.2.1 分类编址        18
2.2.2 子网划分        21
2.2.3 cidr        26
2.2.4 子网划分和cidr的状态        27
2.2.5 小结        27
2.3 技巧3：理解私有地址和nat        28
2.4 技巧4：开发并使用应用程序“框架”        30
2.4.1 tcp服务器框架        31
2.4.2 tcp客户端框架        36
2.4.3 udp服务器框架        38
.2.4.4 udp客户端框架        39
2.4.5 小结        41
2.5 技巧5：套接字接口比xti/tli更好用        41
2.6 技巧6：记住，tcp是一种流协议        43
2.7 技巧7：不要低估tcp的性能        50
2.7.1 udp源程序与接收程序        52
2.7.2 tcp源程序及接收程序        53
2.7.3 小结        59
2.8 技巧8：避免重新编写tcp        59
2.9 技巧9：要认识到tcp是一个可靠的，但并不绝对可靠的协议        61
2.9.1 可靠性——是什么，不是什么        61
2.9.2 故障模式        63
2.9.3 网络中断        63
2.9.4 对等实体崩溃        64
2.9.5 对等实体的主机崩溃        68
2.9.6 小结        69
2.10 技巧10：记住，tcp/ip不是轮询的        69
2.10.1 保持活跃        70
2.10.2 心跳信号        71
2.10.3 另一个例子        76
2.10.4 小结        81
2.11 技巧11：提防对等实体的不友好动作        81
2.11.1 检测客户端的终止        82
2.11.2 检测无效输入        84
2.11.3 小结        88
2.12 技巧12：成功的lan策略不一定能推广到wan中去        88
2.12.1 性能问题举例        88
2.12.2 隐含错误举例        89
2.12.3 小结        93
2.13 技巧13：了解协议是怎样工作的        93
2.14 技巧14：不要把osi七层参考模型太当回事        94
2.14.1 osi模型        95
2.14.2 tcp/ip模型        96
2.14.3 小结        98
第3章 构建高效且健壮的网络程序        99
3.1 技巧15：理解tcp的写操作        99
3.1.1 从应用程序的角度看写操作        99
3.1.2 从tcp角度看写操作        100
3.1.3 小结        103
3.2 技巧16：理解tcp的有序释放操作        103
3.2.1 shutdown调用        104
3.2.2 有序释放        106
3.2.3 小结        110
3.3 技巧17：考虑用inetd来装载应用程序        111
3.3.1 tcp服务器        111
3.3.2 udp服务器        114
3.3.3 小结        118
3.4 技巧18：考虑用tcpmux为服务器“分配”知名端口        118
3.5 技巧19：考虑使用两条tcp连接        126
3.5.1 单连接结构        127
3.5.2 双连接架构        128
3.5.3 小结        133
3.6 技巧20：使应用程序成为事件驱动的（1）        133
3.7 技巧21：使应用程序成为事件驱动的（2）        140
3.8 技巧22：不要用time-wait暗杀来关闭一条连接        147
3.8.1 它是什么        147
3.8.2 为什么要使用它        149
3.8.3 time-wait暗杀        150
3.8.4 小结        151
3.9 技巧23：服务器应该设置so_reuseaddr选项        151
3.10 技巧24：可能的话，使用一个大规模的写操作，而不是多个小规模的写操作        155
3.10.1 禁用nagle算法        158
3.10.2 将写操作合并起来        159
3.10.3 小结        161
3.11 技巧25：理解如何使connect调用超时        162
3.11.1 使用告警        162
3.11.2 使用select        164
3.11.3 小结        167
3.12 技巧26：避免数据复制        167
3.12.1 共享内存缓冲区        168
3.12.2 一个共享内存缓冲区系统        169
3.12.3 一个unix实现        171
3.12.4 一个windows实现        175
3.12.5 小结        179
3.13 技巧27：使用前将结构sockadddr_in清零        179
3.14 技巧28：不要忘记字节的性别        180
3.15 技巧29：不要将ip地址或端口号硬编入应用程序中        182
3.16 技巧30：理解已连接的udp套接字        187
3.17 技巧31：记住，并不是所有程序都是用c编写的        190
3.18 技巧32：理解缓冲区长度带来的影响        195
第4章 工具和资源        199
4.1 技巧33：熟悉ping实用工具        199
4.2 技巧34：学习使用tcpdump或类似的工具        201
4.2.1 tcpdump是如何工作的        202
4.2.2 使用tcpdump        205
4.2.3 tcpdump的输出        206
4.2.4 小结        210
4.3 技巧35：学习使用traceroute        210
4.3.1 traceroute是如何工作的        212
4.3.2 windows tracert        214
4.3.3 小结        215
4.4 技巧36：学习使用ttcp        215
4.5 技巧37：学习使用lsof        219
4.6 技巧38：学习使用netstat        221
4.6.1 活动套接字        221
4.6.2 接口        223
4.6.3 路由表        223
4.6.4 协议统计        225
4.6.5 windows版的netstat        227
4.6.6 小结        227
4.7 技巧39：学习使用系统中的调用追踪工具        227
4.7.1 过早终止        227
4.7.2 ttcp性能问题        231
4.7.3 小结        232
4.8 技巧40：构建并使用捕获icmp报文的工具        233
4.8.1 读取icmp报文        233
4.8.2 打印icmp报文        234
4.8.3 小结        239
4.9 技巧41：读stevens的书        240
4.9.1 《tcp/ip详解》丛书        240
4.9.2 《unix网络编程》丛书        241
4.10 技巧42：阅读代码        242
4.11 技巧43：访问rfc编辑者的页面        243
4.12 技巧44：经常访问新闻组        244
附录a 各种unix代码        247
附录b 各种windows代码        250
参考书目        253
索引        257