基本信息

【插图】

编辑推荐
刘飚的《网络编程与分层协议设计(基于Linux平台实现)》提供了大量的程序示例,对Linux网络套接字编程的基本概念和协议分层的设计实现进行了详细说明。这些示例的设计和选择都经过精心安排,其中较为基础的程序示例除了演示基本的功能外,还反复作为后续较复杂程序示例的基本功能组件。从而形成了程序示例的**搭配,既可帮助读者了解网络编程和分层协议设计的基本知识,又能让读者通过这些实际示例反复运用所学知识,达到熟能生巧和融会贯通。
内容简介
计算机书籍
刘飚的《网络编程与分层协议设计(基于Linux平台实现)》以Linux网络套接字编程和网络分层协议的设计与程序实现为主题,详细介绍如何在
Linux平台下进行套接字程序设计,并给出了一个基于分层协议的应用实例,用于模拟Linux网络协议栈中IP层的核心功能—IP报文的分段和重组过程。本书旨在通过具有一定复杂度的应用,切实帮助读者掌握网络协议分层的设计思想和程序实现方法。此外,本书的许多程序示例直接使用了Linux
的内核链表和散列链表,以及内核的其他数据结构和多线程等程序设计技巧,通过实际应用的形式有效地衔接了C语言、数据结构、操作系统、计算机网络和网络协议分析等课程的相关内容。
《网络编程与分层协议设计(基于Linux平台实现)》可作为高等院校计算机、网络工程、通信工程等专业本科生与研究生“网络程序设计”课程的教材,也可作为相关领域工程技术人员的参考用书。
目录
教学和阅读建议
第1章 TCP/IP网络编程基础
1.1 网络和网络互联
1.1.1 ISO/OSI网络模型和TCP/IP协议栈
1.1.2 IP地址和端口
1.2 客户端/服务器编程模型
1.2.1 循环式服务器
1.2.2 并发式服务器
1.3 本章小结
习题
第2章 Linux下的C编程环境
2.1 进程
2.1.1 进程标识
2.1.2 创建进程
2.1.3 终止进程
2.1.4 僵死进程
2.1.5 子进程退出的异步善后处理
2.2 线程
2.2.1 线程标识
前言
套接字是计算机网络最基础的技术之一,通过套接字,Internet上的各类应用就可以使用网络硬件和计算机操作系统所提供的标准机制进行通信。
对于Internet的发展,TCP/IP协议族起着非常重要的作用。其中IP协议成功实现了各类异构网络的互联,成为网络互联协议事实上的行业标准。TCP/IP协议族是典型的分层协议,通常在各类通用操作系统(如UNIX、Linux、Windows)以及路由器等专用操作系统内部实现。对于网络协议分层的概念,各类专著或教材都进行了相关的阐述,然而“纸上得来终觉浅,绝知此事要躬行”,只有通过亲自设计一个分层协议,并编写程序实现基于分层协议的应用,才能真正理解并切实掌握协议分层的思想。
作为优秀的开源操作系统,Linux为学习和掌握网络编程与协议分层的具体实现提供了一个极为方便的学习和应用平台。相比微软的专有Windows操作系统而言,由于Linux的开源特性,其TCP/IP协议栈的全部代码都是公开的,因此通过研究Linux的TCP/IP实现源码,可以快速提高网络软件设计能力。然而,由于TCP/IP协议栈本身比较庞大复杂,并且在Linux系统中以内核代码的形式出现,其中必然会涉及许多操作系统本身的技术内容,这就在一定程度上为掌握TCP/IP协议栈分层的工作原理造成了困难。
为了帮助读者掌握协议分层的设计和实现方法,本书以Linux TCP/IP协议栈中IP协议的核心功能─IP报文分段与重组为重点,参考Linux网络内核2.6.23在IP报文分段和重组中所使用的关键数据结构、处理函数以及处理流程,通过在用户态实现基于应用层消息分段与重组的文件传输功能,成功模拟了IP报文分段与重组的核心处理过程,从而在一定程度上弥补了计算机网络、网络协议分析等课程在讲授网络协议分层方法时纯理论化教学所固有的缺陷。
本书以Linux操作系统为平台,讲解Linux网络编程的基本原理和实现方法,并包含了最新的网络I/O模型EPOLL。另外,本书在内容侧重和程序示例的选取上有别于其他书籍或教材。首先,本书以网络协议为主题,除了介绍IP报文分段和重组模拟程序示例外,还引入了ping程序和FTP客户端程序示例,这3个示例具有一定的复杂度,并且都是紧密围绕TCP/IP协议族中某个具体协议来充分展现网络套接字的应用。其次,本书利用了Linux系统的开源特性,在各类程序示例中,大量直接使用或间接模拟了Linux网络内核所涉及的关键数据结构,有效地体现了数据结构+算法的程序设计思想,便于读者更为具体和深入地了解常用数据结构的应用,从而快速提高网络软件的设计水平。最后,为了便于读者理解书中所给出的Linux下的各个网络程序示例,本书在对网络套接字程序设计和分层协议程序实现进行讲解前,还扼要介绍了掌握本书中各个程序示例所必需的Linux环境编程基础,包括进程、线程、信号、时间与定时以及基本文件操作。因为本书并不是全面介绍Linux编程环境,所以并没有对这些内容进行更深入和详细的阐述,而是仅围绕后面各章所必需的基本知识进行讲解,这样既突出了主题,又缩减了篇幅,便于读者在不参考其他书籍或教材的情况下就能顺利掌握本书所涉及的内容。
本书共分为9章和3个附录,各章所介绍的内容如下:
第1章介绍TCP/IP网络互联及网络编程所依赖的一些基础概念。
第2章介绍Linux下的C编程环境。本章提供的内容紧扣后续各章所需要的Linux平台下的C编程技术,同时也为不熟悉Linux下的C编程的读者提供了基本的参考。
第3章介绍网络编程所必须掌握的典型知识,这些知识将反复出现在后续章节的程序示例中。
第4章介绍套接字的基础内容,结合第2章所介绍的Linux下的C编程技术,读者可以编写简单的网络应用程序。
第5章介绍套接字的高级特性,主要包括套接字选项、I/O多路复用、非阻塞I/O、信号驱动I/O、事件I/O和原始套接字等内容。
第6章介绍网络协议,包括IP协议、ICMP协议、FTP协议、一个简单的自定义应用协议,以及用于模拟IP报文分段和重组的应用分层协议。本章所介绍的协议内容都将在第7章中通过特定的应用进行实现。
第7章介绍基于ICMP和IP协议,以及原始套接字的ping程序实现方法。
第8章介绍利用流式套接字实现Linux下工作于终端命令行模式的FTP客户端程序的方法。
第9章综合应用本书前面各章所介绍的Linux内核链表、散列链表、线程、用户态下多定时器等内容,重点突出基于分层协议的应用层消息分段和重组的程序实现方法。
附录中给出Linux平台下C/C++语言程序编辑、编译和调试的简洁说明,可供不太熟悉Linux平台下编写C/C++程序的读者编译和调试本书有关程序时进行参考。
为了更好地掌握本书的有关内容,读者应该具有一定的计算机网络基础以及数据结构方面的知识,同时还需要了解Linux下的C语言编程的基本概念。
编者近几年来一直承担研究生“通信协议分析与应用”以及本科生“Linux网络内核源码导读”、“TCP/IP协议”和“Linux网络编程”等课程的教学工作。本书在正式出版前,相关讲义已经在学院内部教学过程中使用了多届次,并根据实际教学中反馈的意见进行了部分修订,收到了良好的效果。
在本书即将出版之际,特别要感谢成都理工大学信息科学与技术学院通信工程系主任李灿平副教授,是他最先鼓励编者尽早整理相关讲义内容并提出了许多中肯而宝贵的意见。另外,感谢通信工程系的王权海老师在本书各个程序示例的调试过程中给予的大力支持。最后,还要特别感谢机械工业出版社华章公司的支持。