计算机系列教材 TCP IP网络编程原理与技术
作者: 钟辉,臧晗,董洁,宋凯,孟祥宇 著
出版时间: 2019年版
丛编项:计算机系列教材
内容简介
Internet是世界上z大的计算机互连网络,TCP/IP是Internet上使用z为成熟的协议。本书重点介绍用TCP/IP进行编程的主要原理和编程环境,并举出实例来解释这些编程原理和概念。 网络中最基本的通信基础是客户?服务器模式,它在计算机通信中占主导地位。本书内容主要包括客户?服务器各部件的功能,还说明了如何构建客户和服务器软件。介绍了客户?服务器模式的基本概念,TCP/IP协议提供传输数据的基本机制;如何在TCP/IP环境下组织编写应用程序;计算机网络通信程序的构建方法;从而进一步了解在网络环境下构建分布式程序。 全书共分13章: 第1章着重介绍网络编程的目标和准备工作;第2章和第3章着重介绍客户?服务器的概念以及并发处理存在的主要问题和应用;第4章和第5章基于Linux操作系统介绍套接字接口的概念和封装的系统调用函数;第6章介绍客户程序设计方法和需要注意的细节问题;第7章介绍了各种典型服务器的设计方法,需要注意的问题和细节;第8章和第9章介绍单线程编写并发程序的方法和应用条件;第10~12章介绍多服务、多协议服务器设计方法和并发管理过程;第13章介绍客户并发设计的方法和使用条件。全书提供了大量应用实例,每章后均附有习题。 本书适合作为高等院校计算机、软件工程、信息管理等专业高年级本科生、研究生的教材,也可供对TCP/IP比较熟悉并且对网络编程有所了解的开发人员、广大科技工作者和研究人员参考。
目录
目录
第1章网络编程准备1
1.1TCP/IP技术的因特网应用1
1.2用TCP/IP构建分布式环境设计应用程序2
1.3用TCP/IP构建的标准和非标准应用协议2
1.4使用TCP/IP标准应用协议的例子2
1.5Telnet连接的例子3
1.6使用Telnet访问其他服务4
1.7TCP/IP应用协议和软件灵活性5
1.8从提供者的角度看服务5
1.9本教材内容介绍6
1.10小结6
习题6第2章客户?服务器模式软件设计概念8
2.1客户?服务器的起源8
2.2客户?服务器关键问题9
2.3客户?服务器术语9
2.3.1客户和服务器10
2.3.2服务器特权和复杂性10
2.3.3标准和非标准客户软件10
2.3.4客户的参数化11
2.3.5无连接的和面向连接的服务器11
2.3.6无状态和有状态服务器12
2.3.7无状态文件服务器的例子13
2.3.8有状态文件服务器的例子13
2.3.9客户标识14
2.3.10无状态是一个协议问题15
2.3.11充当客户的服务器16
2.4小结16
习题17第3章客户?服务器模式软件中的并发处理18
3.1引言18
3.2网络中的并发18
3.3服务器中的并发19
3.4并发术语20
3.4.1进程概念20
3.4.2局部和全局变量的共享21
3.4.3过程调用22
3.5一个创建并发进程的例子22
3.5.1一个顺序执行的C实例22
3.5.2程序的并发版本23
3.5.3时间分片24
3.5.4单线程的进程25
3.5.5使各进程分离25
3.6执行新的代码26
3.7上下文切换和协议软件设计27
3.8并发和异步I/O27
3.9小结28
习题28第4章网络编程协议的程序接口29
4.1引言29
4.2不精确指明的协议软件编程接口29
4.3接口功能30
4.4概念性接口的规范30
4.5操作系统调用31
4.6网络通信的两种基本方法31
4.7Linux中提供的基本I/O功能32
4.8将Linux I/O用于TCP/IP33
4.9小结33
习题33第5章接口实现——套接字API35
5.1引言35
5.2Berkeley套接字35
5.3指明一个协议接口35
5.4套接字的抽象36
5.4.1套接字描述符和文件描述符36
5.4.2针对套接字的系统数据结构37
5.4.3主动套接字或被动套接字37
5.5指明端点地址38
5.6类属地址结构39
5.7套接字API中的主要系统调用40
5.7.1socket调用40
5.7.2connect调用40
5.7.3send调用41
5.7.4recv调用41
5.7.5close调用41
5.7.6bind调用41
5.7.7listen调用42
5.7.8accept调用42
5.7.9在套接字中使用read和write42
5.7.10套接字调用小结42
5.8用于整数转换的实用例程43
5.9在程序中使用套接字调用44
5.10套接字调用的参数所使用的符号常量44
5.11小结45
习题46第6章客户软件算法及编程实例47
6.1引言47
6.2不是研究细节而是学习算法47
6.3客户体系结构和要解决的问题48
6.3.1标识服务器的位置48
6.3.2分析地址参数49
6.3.3查找域名50
6.3.4由名字查找某个熟知端口51
6.3.5端口号和网络字节顺序51
6.3.6由名字查找协议51
6.4TCP客户算法52
6.4.1分配套接字52
6.4.2选择本地协议端口号53
6.4.3选择本地IP地址中的一个基本问题53
6.4.4将TCP套接字连接到某个服务器54
6.4.5使用TCP与服务器通信54
6.4.6从TCP连接中读取响应55
6.4.7关闭TCP连接55
6.5UDP客户算法56
6.5.1连接的和非连接的UDP套接字57
6.5.2对UDP使用connect57
6.5.3使用UDP与服务器通信57
6.5.4关闭使用UDP的套接字57
6.5.5对UDP的部分关闭58
6.5.6关于UDP不可靠性的警告58
6.6客户编程实例的重要性58
6.7隐藏细节59
6.8针对客户程序的过程库59
6.8.1connectTCP的实现60
6.8.2connectUDP的实现60
6.8.3构成连接的过程61
6.9过程库使用63
6.10DAYTIME服务63
6.10.1针对DAYTIME的TCP客户实现64
6.10.2从TCP连接中进行读65
6.11TIME服务66
6.12访问TIME服务66
6.13精确时间和网络时延67
6.14针对TIME服务的UDP客户67
6.15ECHO服务69
6.16针对ECHO服务的TCP客户69
6.17针对ECHO服务的UDP客户71
6.18小结72
习题74第7章服务器软件算法及编程实例76
7.1引言76
7.2概念性的服务器算法76
7.3并发服务器和循环服务器76
7.4面向连接的和无连接的访问77
7.5服务器需要考虑的几个问题77
7.5.1传输层协议的语义77
7.5.2选择传输协议78
7.5.3面向连接的服务器78
7.5.4无连接的服务器79
7.5.5服务器的故障、可靠性和无状态80
7.5.6优化无状态服务器80
7.5.7请求处理时间82
7.6服务器的四种基本类型82
7.7循环服务器的算法83
7.8循环的、面向连接的服务器的算法83
7.8.1用INADDR_ANY绑定熟知端口83
7.8.2将套接字置于被动模式84
7.8.3接受连接并使用这些连接84
7.9循环的、无连接的服务器的算法84
7.10并发服务器的算法85
7.11并发的、无连接的服务器的算法86
7.12并发的、面向连接的服务器的算法86
7.12.1服务器并发性的实现87
7.12.2把单独的程序作为从进程来使用87
7.13使用单线程获得表面上的并发性88
7.14各服务器类型所适用的场合89
7.15服务器类型小结89
7.16重要问题——服务器死锁90
7.17其他的实现方法90
7.18循环的、无连接的服务器设计91
7.18.1创建被动套接字91
7.18.2进程结构94
7.18.3TIME服务器举例94
7.18.4小结96
7.19循环的、面向连接的服务器设计96
7.19.1分配被动的TCP套接字96
7.19.2用于DAYTIME服务的服务器97
7.19.3进程结构97
7.19.4DAYTIME服务器举例98
7.19.5关闭连接100
7.19.6连接终止和服务器的脆弱性100
7.19.7小结101
7.20并发的、面向连接的服务器设计101
7.20.1并发ECHO102
7.20.2循环与并发实现的比较102
7.20.3进程结构102
7.20.4并发ECHO服务器举例103
7.20.5清除游离(errant)进程106
7.20.6小结106
7.21小结107
习题107第8章使用线程模型实现并发110
8.1引言110
8.2Linux线程概述110
8.3线程和进程的关系111
8.3.1描述符、延迟和退出111
8.3.2线程退出112
8.4线程协调和同步112
8.4.1互斥112
8.4.2信号量113
8.4.3条件变量113
8.5使用线程的服务器实例114
8.6监控117
8.7小结118
习题118第9章单线程并发服务器设计119
9.1引言119
9.2服务器中的数据驱动处理119
9.3用单线程进行数据驱动处理120
9.4单线程服务器的线程结构120
9.5单线程ECHO服务器举例121
9.6小结123
习题124第10章多协议服务器设计125
10.1引言125
10.2减少服务器数量的动机125
10.3多协议服务器的设计125
10.4进程结构126
10.5多协议DAYTIME服务器的例子126
10.6共享代码的概念129
10.7并发多协议服务器130
10.8小结130
习题130第11章多服务服务器设计132
11.1引言132
11.2合并服务器132
11.3循环的、无连接的、多服务服务器设计132
11.4循环的、面向连接的、多服务服务器设计133
11.5并发的、面向连接的、多服务服务器设计134
11.6并发的、单线程的、多服务服务器的实现135
11.7从多服务服务器调用单独的程序135
11.8多服务、多协议服务器设计136
11.9多服务服务器的例子137
11.10静态的和动态的服务器配置143
11.11UNIX超级服务器——inetd144
11.12inetd服务器的例子146
11.13小结147
习题148第12章服务器并发性管理149
12.1引言149
12.2在循环设计和并发设计间选择149
12.3并发等级150
12.4需求驱动的并发150
12.5并发的代价150
12.6额外开销和时延151
12.7小时延问题151
12.8从线程/进程的预分配152
12.8.1Linux中的预分配153
12.8.2面向连接的服务器中的预分配153
12.8.3互斥、文件锁定和accept并发调用154
12.8.4无连接的服务器中的预分配155
12.8.5预分配、突发通信量和NFS155
12.8.6多处理器上的预分配156
12.9延迟的从线程/进程分配156
12.10两种技术统一的基础157
12.11技术的结合157
12.12小结158
习题158第13章客户软件并发设计160
13.1引言160
13.2并发的优点160
13.3运用控制的动机160
13.4与多个服务器的并发联系161
13.5实现并发客户162
13.6单线程实现162
13.7使用ECHO的并发客户的例子163
13.8并发客户的执行167
13.9例子代码中的并发性169
13.10小结169
习题169附录A系统调用与套接字使用的库例程170参考文献192