网络编程与分层协议设计:基于Linux平台实现
作者 : 刘飚 编著
出版日期 : 2011-07-05
ISBN : 978-7-111-35052-1
定价 : 29.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 262
开本 : 16
原书名 :
原出版社:
属性分类: 教材
包含CD :
绝版 :
图书简介

本书以Linux网络套接字编程和网络分层协议的设计与程序实现为主题,详细介绍如何在Linux平台下进行套接字程序设计,并着重以Linux网络协议栈中IP层的核心功能IP报文分段与重组为例,设计并实现一个基于分层协议的应用实例,用于模拟IP报文的分段和重组过程。本书旨在通过具有一定复杂度的应用,切实帮助读者掌握网络协议分层的设计思想和程序实现方法。此外,本书的许多程序示例直接使用了Linux的内核链表和散列链表,以及内核的其他数据结构和多线程等程序设计技巧,通过实际应用的形式有效地衔接了C语言、数据结构、操作系统、计算机网络和网络协议分析等课程的相关内容。

图书特色

网络编程与分层协议设计
基于Linux平台实现
刘 飚 编著

本书以Linux为平台,循序渐进地介绍了Linux网络套接字编程的基本原理和使用方法,并着重突出了网络分层协议的设计和程序实现。全书通过多个示例展示了Linux内核通用数据结构的使用,充分体现了数据结构+算法的程序设计思想,帮助读者切实掌握常用数据结构及其应用场景,从而快速提高网络软件的设计水平。

本书特点
程序示例丰富,具有一定复杂度。本书提供了大量的程序示例,对Linux网络套接字编程的基本概念和协议分层的设计实现进行了详细说明。这些示例的设计和选择都经过精心安排,其中较为基础的程序示例除了演示基本的功能外,还反复作为后续较复杂程序示例的基本功能组件,从而形成了程序示例的有机搭配,既可帮助读者了解网络编程和分层协议设计的基本知识,又能让读者通过这些实际示例反复运用所学知识,达到熟能生巧和融会贯通。
广泛使用优秀开源代码。本书的程序示例大量直接或间接应用了优秀的开源软件,例如Linux内核的通用链表和散列链表在多个程序示例中作为基础组件而广泛使用。此外,本书还参考并模拟了Linux网络内核源码中IP报文分段和重组的核心处理过程。通过学习优秀开源软件的设计实现,并且在正确的场合使用各类优秀开源软件,是快速提高网络编程能力的一条捷径。
内容紧凑,中心突出。本书围绕网络分层协议设计和实现这个中心进行讲解,所介绍的基础知识都是为掌握后续较复杂的示例而进行的必要铺垫,基本上做到了使读者在不参考其他书籍的情况下就能顺利掌握本书的核心内容。
读者对象广泛。本书既可以单独作为网络编程的入门教材,也可以作为网络协议分析等相关课程的辅助实践教材。

本书为教师提供教学课件、教材中所有程序实例的源程序及部分关键习题的解答,有需要者可登录华章网站(www.hzbook.com)下载。

图书前言

随着Internet的迅猛发展,各种各样的网络应用也日益丰富。从传统的Web服务、邮件服务和FTP服务,到实时通信软件、各类网络游戏、流媒体和VoIP等业务,所有这些网络应用都依赖于网络套接字。
  套接字是计算机网络最基础的技术之一,通过套接字,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网络编程”等课程的教学工作。本书在正式出版前,相关讲义已经在学院内部教学过程中使用了多届次,并根据实际教学中反馈的意见进行了部分修订,收到了良好的效果。
  在本书即将出版之际,特别要感谢成都理工大学信息科学与技术学院通信工程系主任李灿平副教授,是他最先鼓励编者尽早整理相关讲义内容并提出了许多中肯而宝贵的意见。另外,感谢通信工程系的王权海老师在本书各个程序示例的调试过程中给予的大力支持。最后,还要特别感谢机械工业出版社华章分社的支持。
  热忱欢迎广大读者批评、指导及交流,编者的电子邮箱为:toplb@163.com。

编者
2011年3月

上架指导

计算机\网络

封底文字

本书以Linux为平台,循序渐进地介绍了Linux网络套接字编程的基本原理和使用方法,并着重突出了网络分层协议的设计和程序实现。全书通过多个示例展示了Linux内核通用数据结构的使用,充分体现了数据结构加算法的程序设计思想,帮助读者切实掌握常用数据结构及其应用场景,从而快速提高网络软件的设计水平。
本书特点:
程序示例丰富、具有一定复杂度。本书提供了大量的程序示例,对Linux网络套接字编程的基本概念和协议分层的设计实现进行了详细说明。这些示例的设计和选择都经过精心安排,其中较为基础的程序示例除了演示最基本的功能外,还反复作为后续较复杂程序示例的基本功能组件,从而形成了程序示例的有机搭配。这样既切实帮助读者快速了解网络编程和分层协议设计的基本知识,又让读者在具有一定复杂度的实际示例中反复运用所学知识,从而做到熟能生巧和融会贯通。
广泛使用优秀开源代码。本书的程序示例大量直接或间接应用了优秀的开源软件,例如Linux内核的通用链表和散列链表在多个程序示例中作为基础组件而广泛使用。此外,本书还参考并模拟了Linux网络内核源码中IP报文分段和重组的核心处理过程。通过学习优秀开源软件的设计实现,并且在正确的场合下使用各类优秀开源软件,是快速提高网络编程能力的一条捷径。
内容紧凑、中心突出。本书并没有像其他网络编程教材那样泛泛讲解Linux下网络套接字程序设计的原理和方法,而是围绕网络分层协议设计和实现这个中心进行讲解。因此本书所介绍的基础知识都是为掌握后续较复杂的示例而进行的必要铺垫,基本上做到了可以使读者在不参考其他书籍的情况下顺利掌握本书的核心内容。
读者对象广泛。本书既可以单独作为Linux网络套接字编程的入门教材,也可以作为网络协议等相关课程的辅助实验教材,尤其适合作为机械工业出版社《网络协议分析》一书的配套实验教材。无论是初学者还是有一定基础的人都能从本书中获益。
本书为教师提供教学课件、教材中所有程序实例的源程序及部分关键习题的解答,有需要者可登录华章网站(www.hzbook.com)下载。

图书目录

前言
教学和阅读建议

第1章  TCP/IP网络编程基础 1
1.1  网络和网络互联 1
1.1.1  ISO/OSI网络模型和TCP/IP协议栈 1
1.1.2  IP地址和端口 2
1.2  客户端/服务器编程模型 3
1.2.1  循环式服务器 3
1.2.2  并发式服务器 3
1.3  本章小结 4
习题 4
第2章  Linux下的C编程环境 5
2.1  进程 5
2.1.1  进程标识 5
2.1.2  创建进程 6
2.1.3  终止进程 6
2.1.4  僵死进程 7
2.1.5  子进程退出的异步善后处理 7
2.2  线程 8
2.2.1  线程标识 9
2.2.2  创建线程 9
2.2.3  终止线程 10
2.2.4  线程同步 11
2.3  信号 14
2.3.1  信号的概念 14
2.3.2  常用信号及其含义 14
2.3.3  信号集和信号掩码 15
2.3.4  信号处理 16
2.3.5  可重入函数 18
2.4  时间 20
2.4.1  时间表示 21
2.4.2  获得时间 21
2.4.3  休眠时间 22
2.4.4  间隔定时器 23
2.5  文件 24
2.6  本章小结 26
习题 26
第3章  网络编程中常用的典型知识 28
3.1  结构体大小的计算 28
3.2  数据存储与字节序 29
3.3  常用数据结构 30
3.3.1  Linux链表 30
3.3.2  Linux散列链表 33
3.4  函数指针 34
3.5  校验和 35
3.6  用户态下多定时器的实现 37
3.7  本章小结 47
习题 48
第4章  基础套接字 49
4.1  套接字基本概念 49
4.1.1  创建套接字 49
4.1.2  域和地址族 50
4.1.3  套接字地址 50
4.1.4  流式套接字和数据报套接字 51
4.1.5  使用套接字 51
4.1.6  套接字编程常用基本函数和数据类型 55
4.1.7  客户端/服务器通信方式 56
4.2  流式套接字客户端/服务器编程 57
4.3  并发流式套接字服务器编程 63
4.3.1  服务器主进程 67
4.3.2  服务器子进程 67
4.3.3  服务器子进程终止 67
4.4  数据报套接字客户端/服务器编程 67
4.5  本章小结 73
习题 73
第5章  高级套接字 75
5.1  套接字选项 75
5.1.1  getsockopt和setsockopt 75
5.1.2  套接字通用选项示例 76
5.2  I/O多路复用 78
5.2.1  I/O多路复用模型 79
5.2.2  select函数 79
5.2.3  文件描述符集合的使用 80
5.2.4  文件描述符的可读写状态 82
5.2.5  最大文件描述符个数 82
5.2.6  select函数的应用 82
5.3  非阻塞I/O 90
5.3.1  非阻塞I/O模型 90
5.3.2  fcntl函数设置非阻塞模式 91
5.3.3  非阻塞模式下的read和write 92
5.3.4  非阻塞模式下的connect 92
5.3.5  非阻塞模式下的accept 93
5.4  信号驱动I/O 94
5.4.1  信号驱动I/O模型 94
5.4.2  设置套接字工作于信号驱动I/O模式 94
5.4.3  信号驱动I/O示例 95
5.5  事件I/O 100
5.5.1  创建epoll上下文环境epoll_create 101
5.5.2  epoll设置epoll_ctl 101
5.5.3  等待事件发生epoll_wait 103
5.5.4  epoll程序示例 104
5.5.5  边沿触发ET和水平触发LT 109
5.6  原始套接字 110
5.6.1  创建原始套接字 111
5.6.2  原始套接字数据发送 111
5.6.3  原始套接字数据接收 111
5.7  本章小结 111
习题 112
第6章  网络协议 113
6.1  IP协议 113
6.1.1  IP协议格式 113
6.1.2  IP协议头的C语言定义 114
6.1.3  IP报文分段 115
6.1.4  IP报文分段重组 116
6.2  ICMP协议 118
6.2.1  ICMP消息类型 118
6.2.2  ICMP消息通用格式 118
6.2.3  ICMP查询请求和应答消息格式 118
6.2.4  ICMP消息格式的C语言定义 119
6.3  FTP协议 119
6.3.1  FTP连接管理 120
6.3.2  FTP通信过程 121
6.3.3  FTP命令处理 122
6.3.4  数据(文件)传输过程 123
6.3.5  数据传输端口 124
6.4  一个简单应用层协议示例 125
6.5  分层协议示例—IP报文分段和重组模拟 127
6.5.1  程序功能描述 128
6.5.2  分层协议栈 129
6.5.3  分层协议定义 130
6.6  本章小结 131
习题 132
第7章  ICMP协议程序设计 133
7.1  ping程序功能模块 133
7.2  回应请求和应答实例分析 133
7.3  ping程序实现 134
7.4  ping程序的编译和测试 140
7.5  本章小结 140
习题 140
第8章  FTP协议程序设计 141
8.1  FTP交互命令实例分析 141
8.2  FTP客户端程序功能模块 143
8.3  FTP客户端程序实现 144
8.4  FTP客户端程序的编译和测试 168
8.5  本章小结 169
习题 169
第9章  IP报文分段和重组模拟程序设计 170
9.1  主机工作流程 170
9.2  转发服务器工作流程 171
9.3  消息分段 172
9.4  主机程序功能模块 172
9.5  转发服务器程序功能模块 175
9.6  消息分段的错序和丢失模拟 176
9.7  关键数据结构 177
9.8  主机程序实现 180
9.9  转发服务器程序实现 220
9.10  IP报文分段和重组模拟程序的编译和运行 240
9.11  本章小结 243
习题 243
附录A  C/C++源文件编辑 244
附录B  C/C++源文件编译 247
附录C  C/C++源文件调试 250
参考文献 253

教学资源推荐
作者: 毛羽刚 蔡开裕 陈颖文 编著
作者: (美)Timothy S.Ramteke
作者: [印]纳拉辛哈·卡鲁曼希(Narasimha Karumanchi),A.达莫达拉姆(A.Damodaram),M.斯里尼瓦萨·拉奥(M.Sreenivasa Rao) 著
作者: 教育部高等学校计算机类专业教学指导委员会 物联网工程专业教学研究专家组 编制
参考读物推荐
作者: (美)Thomas A.Limoncelli, Christine Hogan
作者: (美)Terry William Ogletree
作者: Harley Hahn
作者: 曾凡太 刘美丽 陶翠霞 编著