前言
当前,Linux已经成为非常流行的开源操作系统,在服务器和嵌入式系统等领域有广泛的应用,而且正在逐步应用于个人计算机的桌面操作系统上。Linux网络程序设计在服务器和嵌入式领域有着广泛的应用。例如,Web服务器、P2P应用、嵌入式网络机顶盒、IPTV机顶盒和手持设备等产品很多都采用开源的Linux操作系统。因此,能够熟练编写网络程序并构建自己的网络架构程序,对于程序开发人员是十分重要的。
本书是获得大量读者好评的“Linux典藏大系”中的一本。本书全面、系统、深入地介绍Linux网络编程涉及的相关技术,涉及面很广,从编程工具和环境搭建,到核心原理和高级技术,再到项目实战,几乎涵盖Linux网络编程的所有重要知识点。其中,结合实例重点介绍Linux应用层网络设计、网络协议栈的实现原理和Linux内核防火墙技术。通过阅读本书,读者可以全面掌握Linux网络编程方方面面的技术,具备开发较为复杂网络项目的能力。
关于“Linux典藏大系”
“Linux典藏大系”是专门为Linux技术爱好者推出的系列图书,涵盖Linux技术的方方面面,可以满足不同层次和各个领域的读者学习Linux的需求。该系列图书自2010年1月陆续出版,上市后深受广大读者的好评。2014年1月,创作者对该系列图书进行了全面改版并增加了新品种。新版图书一上市就大受欢迎,各分册长期位居Linux图书销售排行榜前列。截至2023年10月底,该系列图书累计印数超过30万册。可以说,“Linux典藏大系”是图书市场上的明星品牌,该系列中的一些图书多次被评为清华大学出版社“年度畅销书”,还曾获得“51CTO读书频道”颁发的“最受读者喜爱的原创IT技术图书奖”,另有部分图书的中文繁体版在中国台湾出版发行。该系列图书的出版得到了国内Linux知名技术社区ChinaUnix(简称CU)的大力支持和帮助,读者与CU社区中的Linux技术爱好者进行了广泛的交流,取得了良好的学习效果。另外,该系列图书还被国内上百所高校和培训机构选为教材,得到了广大师生的一致好评。
关于第3版
随着技术的发展,本书第2版与当前Linux的几个流行版本有所脱节,这给读者的学习带来了不便。应广大读者的要求,笔者结合Linux技术的新近发展对第2版图书进行全面的升级改版,推出第3版。相比第2版图书,第3版在内容上的变化主要体现在以下几个方面:
* Linux系统更换为Ubuntu 22.04;
* 对Linux内核的介绍增加5.*系列;
* 对IT业界的动态信息进行更新;
* 对GCC软件包进行更新;
* 修订第2版中的一些疏漏,并对一些表述不够准确的内容重新表述;
* 对涉及的一些函数及其格式进行修改;
* 新增思维导图和课后习题,以方便读者梳理和巩固所学知识。
本书特色
1.提供配套教学视频,学习效果好
为了帮助读者更加高效、直观地学习,笔者专门针对书中的一些重点和难点内容录制配套教学视频,手把手带领读者进行学习。
2.内容由浅入深,讲解循序渐进
本书按照“基础知识→高级技术→进阶实战”的思路讲解,首先介绍Linux的基础知识与开发环境,然后介绍基本的Linux网络程序设计方法,接着介绍Linux内核网络编程方法,最后通过3个案例综合运用所介绍的知识,让读者更加深刻地理解Linux网络编程技术。
3.内容充实,涵盖面广
本书几乎涵盖Linux网络程序设计会用到的所有重要知识点,尤其对高级网络编程和原始套接字等用户层网络程序设计结合丰富的示例进行全面的讲解,另外对内核网络程序设计进行深入的剖析,还对netfilter框架进行详细的讲解,并给出一个全面使用netfilter框架的案例,以方便读者深入学习。
4.对比分析,讲解深入
本书在介绍多个主要函数时对用户空间和内核空间进行对比分析,让读者不但了解如何使用这些函数,而且能更加深入地理解为何这样用,做到所谓“知其然并知其所以然”。
5.案例精讲,提高实际开发水平
本书通过精讲3个典型案例,帮助读者更加深入地理解前面章节介绍的Linux网络编程的重要知识点,从而提高读者的实际开发水平。
6.提供习题、源代码、思维导图和教学PPT
本书特意在每章后提供多道习题,用以帮助读者巩固和自测该章的重要知识点,另外还提供源代码、思维导图和教学PPT等配套资源,以方便读者学习和教师教学。
本书内容
第1篇 Linux网络开发基础知识
本篇涵盖第1~4章,主要包括Linux操作系统概述、Linux编程环境、文件系统概述,以及程序、进程和线程等相关知识。通过学习本篇内容,读者可以初步掌握Linux网络程序设计的基础知识,并了解Linux编程环境的相关知识。
第2篇 Linux用户层网络编程
本篇涵盖第5~15章,主要包括TCP/IP族概述、应用层网络服务程序概述、TCP网络编程基础知识、服务器和客户端信息获取、数据的I/O及其复用、基于UDP接收和发送数据、高级套接字、套接字选项、原始套接字、服务器模型、IPv6基础知识等。通过学习本篇内容,读者可以全面、系统、深入地掌握Linux网络程序设计的大部分知识。
第3篇 Linux内核网络编程
本篇涵盖第16、17章,主要包括Linux内核层网络架构和netfilter框架的报文处理。通过学习本篇内容,读者可以初步掌握Linux内核网络编程的相关知识。
第4篇 综合案例
本篇涵盖第18~20章,主要介绍3个网络编程综合案例的实现,包括一个简单的Web服务器SHTTPD的实现、一个简单的网络协议栈SIP的实现和一个简单的防火墙SIPFW的实现。通过学习本篇内容,读者可以掌握如何编写一个完整、可用的Linux网络程序。
阅读建议
* 对于没有基础的读者,尽量从前到后按顺序阅读,不要随意跳跃;
* 书中给出的示例和案例需要读者亲自上机动手实践,这样学习效果更好;
* 第4篇偏重于实战,这部分内容初期不需要读者全面掌握,只要理解基本的开发思路即可,等有了较丰富的开发经验后可进一步研读。
读者对象
* 想全面学习Linux网络编程的人员;
* Linux网络编程从业人员;
* Linux网络编程爱好者;
* 高等院校相关专业的学生;
* 培训机构的学员;
* 需要一本案头必备手册的开发人员。
配书资源获取方式
本书涉及的配套资源如下:
* 示例和案例源代码;
* 配套教学视频;
* 高清思维导图;
* 习题参考答案;
* 配套教学PPT;
* 书中涉及的工具。
上述配套资源有以下3种获取方式:
* 关注微信公众号“方大卓越”,然后回复数字“17”,可自动获取下载链接;
* 在清华大学出版社网站(www.tup.com.cn)上搜索到本书,然后在本书页面上找到“资源下载”栏目,单击“网络资源”按钮进行下载;
* 在本书技术论坛(www.wanjuanchina.net)上的Linux模块进行下载。
技术支持
虽然笔者对书中所述内容都尽量予以核实,并多次进行文字校对,但是因时间所限,可能还存在疏漏和不足之处,恳请读者批评与指正。
读者在阅读本书时若有疑问,可以通过以下方式获得帮助:
* 加入本书QQ交流群(群号:302742131)进行提问;
* 在本书技术论坛(见上文)上留言,会有专人负责答疑;
* 发送电子邮件到book@wanjuanchina.net或bookservice2008@163.com获得帮助。
编 者
Linux网络编程(第3版)
前言
·IV·
·III·