前言

前言

Linux操作系统已经成为目前最流行的开源操作系统,在服务器、嵌入式系统有着广泛的应用,并且逐步走入个人电脑的桌面操作系统。Linux的网络程序设计在服务器领域、嵌入式领域有着广泛的应用。例如Web服务器、P2P应用、嵌入式网络机顶盒、IPTV机顶盒、手持设备等,上述产品大部分采用了开源的Linux系统。因此,熟悉并且能够编写网络程序代码,构建自己的网络架构程序是十分重要的。

本书是获得了大量读者好评的“Linux典藏大系”中的《Linux网络编程》的第2版。本书全面、系统地介绍了Linux网络编程技术,其中通过实例重点介绍了Linux的应用层网络设计、网络协议栈的实现原理和Linux内核防火墙的技术。学完本书之后,读者可以有编写比较复杂项目的本领。

关于“Linux典藏大系”

“Linux典藏大系”是清华大学出版社自2010年1月以来陆续推出的一个图书系列,截止2013年1月,已经出版了10余个品种。该系列图书涵盖了Linux技术的方方面面,可以满足各个层次和各个领域的读者学习Linux技术的需求。该系列图书自出版以来获得了广大读者的好评,已经成为Linux图书市场上最耀眼的明星品牌之一,其销量在同类图书中也名列前茅,其中一些图书还获得了“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”。该系列图书出版过程中也得到了国内Linux领域最知名的技术社区ChinaUnix(简称CU)的大力支持和帮助,读者在CU社区中就图书的内容与活跃在CU社区中的Linux技术爱好者进行广泛交流,将会取得了良好的学习效果。

关于本书第2版

本书第1版出版后深受读者好评,并被ChinaUNIX技术社区所推荐。但是随着Linux技术的发展,本书第1版的内容与Linux各个新版本有一定出入,这给读者的学习造成了一些不便。应广大读者的要求,我们结合Linux技术的最新发展推出第2版图书。相比第1版,第2版图书在内容上的变化主要体现在以下几个方面:

1. 操作系统环境从原有的Debian改为更为通用的Ubuntu。

2. Linux内核介绍增加了3.*系列。

3. 对IT业界的动态进行了更新。

4. 对一些专有名词的大小写进行了更正,如VIM、Emacs。

5. 由于Vim区分大小写,尤其在快捷键上面。为了避免读者误操作,所以对原有的快捷键大小写进行了重新确认,并更正部分错误的大小写。

6. 更正了第1版中的部分描述错误,如Objective-C。

7. 对GCC软件包进行了更新。

8. 为了便于读者阅读和使用代码,对于完整的代码增加了行号。

9. 更正了部分调试选项的大小写错误。

10. 对部分Shell命令进行了更新,如fdisk。

11. 对Linux涉及的硬件信息进行了更新,如对Ext4的支持。

12. 对需要重点注意的关键代码做了加粗。

13. 对部分代码缺少的库文件进行了补充。

14. 修改了部分函数库的包含关系。

15. 修改了部分变量的数据类型。

16. 修改了部分代码行号的说明错误。

本书的特点

1. 循序渐进,由浅入深

为了方便读者学习,本书首先介绍Linux的开发环境,然后介绍基本的网路程序设计方法,再进行Linux内核的网络设计方法。最后,通过3个综合案例,综合运用上述知识,让读者更深刻地了解网络程序设计的知识。在每一部分的介绍中都是按照由浅入深的方式进行介绍,先介绍基础知识,再结合高级知识进行介绍。

2. 技术全面,内容充实

本书基本涵盖了Linux网络程序设计的所有知识面,特别对于高级网络编程、原始套接字等高级应用层网络程序设计给出了全面的介绍和丰富的例子程序。除了用户界面的网络程序设计外,本书还对内核空间的网络程序设计进行了详细的介绍,针对netfilter框架,做了很细致的讲解,并给出了一个全面使用netfilter框架的案例,以方便读者深入了解。

3. 对比讲解,理解深刻

由于Linux程序设计的知识用于空间和内核空间的代码和模块是相互作用的,在多个主要函数介绍过程中,本书对用户空间和内核空间进行交互式的对比介绍,使读者在了解如何使用的情况下,更深入地了解为什么这样用,所谓“知其然并知其所以然”。

4. 案例精讲,深入剖析

根据本人多年的项目经验,只有实际接触案例和代码才能够对知识点更深入地了解。本书在介绍了Linux网络程序设计知识点的基础上,通过具有典型意义的3个案例,对各个知识点包括应用层的HTTP协议的Web服务器、协议栈原理的协议栈案例和内核网络的防火墙案例进行了深入剖析。

本书内容及体系结构

第 1 篇 Linux网络开发基础(第1~4章)

本篇主要内容包括:Linux操作系统概述、Linux编程环境、文件系统简介、程序、进程和线程。通过本篇的学习,读者可以掌握Linux编程的基础知识,以及编程环境。

第 2 篇 Linux用户层网络编程(第5~15章)

本篇主要内容包括:TCP/IP协议族简介、应用层网络服务程序简介、TCP网络编程基础、服务器和客户端信息的获取、数据的IO和复用、基于UDP协议的接收和发送、高级套接字、套接字选项、原始套接字、服务器模型选择、IPv6简介。通过本篇的学习,读者可以掌握Linux网络编程的大部分知识。

第 3 篇 Linux内核网络编程(第16章和第17章)

本篇主要内容包括:Linux内核中网络部分结构,以及分布和netfilter框架内报文处理。通过本篇的学习,读者可以初步了解Linux内核网络编程的知识。

第 4 篇 综合案例(第18~20章)

本篇主要内容包括:一个简单Web服务器的例子SHTTPD、一个简单网络协议栈的例子SIP、一个简单防火墙的例子SIPFW。通过本篇的学习,读者可以全面了解一个完整可用的Linux网络程序是如何编写的。

本书学习建议

  • 建议没有基础的读者,从前至后顺次阅读,尽量不要跳跃。

  • 书中的实例和示例建议读者都要亲自上机动手实践,学习效果会更好。

  • 第4篇的内容偏重于实战,这部分内容在初期可以不需要全面掌握,只要理解思想即可,等读者有了较多开发经验后可进一步研读。

本书读者对象

  • 想全面学习Linux网络编程的人员;

  • Linux网络编程从业人员;

  • Linux网络编程爱好者;

  • 大中专院校的学生;

  • 社会培训班的学员;

  • 需要一本案头必备手册的开发人员。

本书作者

本书由宋敬彬主笔编写。其他参与编写的人员有陈超、陈锴、陈佩霞、陈锐、黎华、李鹏钦、李森、李奕辉、李玉莉、刘仲义、卢香清、鲁木应、马向东、麦廷琮、米永刚、欧阳昉、綦彦臣、冉卫华、宋永强、滕科平、王秀丽、王玉芹、魏莹、魏宗寿、温本利。

虽然我们对书中所述的内容都尽量予以核实,并多次进行文字校对,但可能还存在疏漏和不足之处,恳请读者批评指正。

编著者

目录

  • 前言
  • 第 1 篇 Linux网络开发基础
  • 第 1 章 Linux操作系统概述
  • 第 2 章 Linux编程环境
  • 第 3 章 文件系统简介
  • 第 4 章 程序、进程和线程
  • 第 2 篇 Linux用户层网络编程
  • 第 5 章 TCP/IP协议族简介
  • 第 6 章 应用层网络服务程序简介
  • 第 7 章 TCP网络编程基础
  • 第 8 章 服务器和客户端信息的获取
  • 第 9 章 数据的IO和复用
  • 第 10 章 基于UDP协议的接收和发送
  • 第 11 章 高级套接字
  • 第 12 章 套接字选项
  • 第 13 章 原始套接字
  • 第 14 章 服务器模型选择
  • 第 15 章 IPv6简介
  • 第 3 篇 Linux内核网络编程
  • 第 16 章 Linux内核中网络部分结构以及分布
  • 第 17 章 netfilter框架内报文处理
  • 第 4 篇 综合案例
  • 第 18 章 一个简单Web服务器的例子SHTTPD
  • 第 19 章 一个简单网络协议栈的例子SIP
  • 第 20 章 一个简单防火墙的例子SIPFW