图书介绍
用TCP/IP进行网际互连:第3卷·客户-服务器编程与应用:Linux/POSIX套接字版PDF|Epub|txt|kindle电子书版本网盘下载
![用TCP/IP进行网际互连:第3卷·客户-服务器编程与应用:Linux/POSIX套接字版](https://www.shukui.net/cover/30/30173256.jpg)
- (美)科默等著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121073861
- 出版时间:2008
- 标注页数:431页
- 文件大小:107MB
- 文件页数:459页
- 主题词:计算机网络-通信协议-教材;Linux操作系统-程序设计-教材
PDF下载
下载说明
用TCP/IP进行网际互连:第3卷·客户-服务器编程与应用:Linux/POSIX套接字版PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 引言和概述1
1.1使用TCP/IP的因特网应用1
1.2为分布式环境设计应用程序1
1.3标准和非标准的应用协议1
1.4使用标准应用协议的例子1
1.5 telnet连接的例子2
1.6使用TELNET访问其他服务3
1.7应用协议和软件的灵活性4
1.8从提供者的角度看服务4
1.9本教材的其余部分5
1.10小结5
深入研究5
习题5
第2章 客户-服务器模型与软件设计7
2.1引言7
2.2动机7
2.3术语和概念8
2.3.1客户和服务器8
2.3.2特权和复杂性8
2.3.3标准和非标准客户软件9
2.3.4客户的参数化9
2.3.5无连接的和面向无连接的服务器10
2.3.6无状态和有状态服务器10
2.3.7无状态文件服务器的例子11
2.3.8有状态文件服务器的例子11
2.3.9标识客户12
2.3.10无状态是一个协议问题13
2.3.11充当客户的服务器13
2.4小结14
深入研究14
习题15
第3章 客户-服务器软件中的并发处理16
3.1引言16
3.2网络中的并发16
3.3服务器中的并发17
3.4术语和概念18
3.4.1进程概念18
3.4.2局部和全局变量的共享19
3.4.3过程调用20
3.5一个创建并发进程的例子20
3.5.1一个顺序执行的C实例20
3.5.2程序的并发版本21
3.5.3时间分片22
3.5.4单线程的进程23
3.5.5使各进程分离23
3.6执行新的代码24
3.7上下文切换和协议软件设计25
3.8并发和异步I/O25
3.9小结25
深入研究26
习题26
第4章 协议的程序接口27
4.1引言27
4.2不精确指明的协议软件接口27
4.2.1优点与缺点27
4.3接口功能28
4.4概念性接口的规约28
4.5系统调用28
4.6网络通信的两种基本方法29
4.7 LINIX中提供的基本O功能29
4.8将Linux I/O用于TCP/IP30
4.9小结31
深入研究31
习题31
第5章 套接字API32
5.1引言32
5.2 Berkeley套接字32
5.3指明一个协议接口32
5.4套接字的抽象33
5.4.1套接字描述符和文件描述符33
5.4.2针对套接字的系统数据结构34
5.4.3主动套接字或被动套接字35
5.5指明端点地址35
5.6类属地址结构35
5.7套接字API中的主要系统调用36
5.7.1 socket调用37
5.7.2 connect调用37
5.7.3 send调用37
5.7.4 recv调用37
5.7.5 close调用38
5.7.6 bind调用38
5.7.7 listen调用38
5.7.8 accept调用38
5.7.9在套接字中使用read和write38
5.7.10套接字调用小结39
5.8用于整数转换的实用例程39
5.9在程序中使用套接字调用40
5.10套接字调用的参数所使用的符号常量40
5.11小结41
深入研究41
习题41
第6章 客户软件设计中的算法和问题43
6.1引言43
6.2不是研究细节而是学习算法43
6.3客户体系结构43
6.4标识服务器的位置44
6.5分析地址参数45
6.6查找域名45
6.7由名字查找某个熟知端口46
6.8端口号和网络字节顺序47
6.9由名字查找协议47
6.10 TCP客户算法48
6.11分配套接字48
6.12选择本地协议端口号48
6.13选择本地IP地址中的一个基本问题49
6.14将TCP套接字连接到某个服务器49
6.15使用TCP与服务器通信50
6.16从TCP连接中读取响应50
6.17关闭TCP连接51
6.17.1对部分关闭的需要51
6.17.2部分关闭的操作51
6.18 UDP客户的编程51
6.19连接的和非连接的UDP套接字52
6.20对UDP使用connect52
6.21使用UDP与服务器通信52
6.22关闭使用UDP的套接字53
6.23对UDP的部分关闭53
6.24关于UDP不可靠性的警告53
6.25小结53
深入研究54
习题54
第7章 客户软件举例55
7.1引言55
7.2小例子的重要性55
7.3隐藏细节55
7.4针对客户程序的过程库例子56
7.5 connectTCP的实现56
7.6 connectUDP的实现57
7.7构成连接的过程57
7.8使用例子库60
7.9 DAYTIME服务60
7.10针对DAYTIME的TCP客户实现61
7.11从TCP连接中进行读62
7.12 TIME服务63
7.13访问TIME服务63
7.14精确时间和网络时延63
7.15针对TIME服务的UDP客户64
7.16 ECHO服务65
7.17针对ECHO服务的TCP客户66
7.18针对ECHO服务的UDP客户67
7.19小结69
深入研究70
习题70
第8章 服务器软件设计的算法和问题71
8.1引言71
8.2概念性的服务器算法71
8.3并发服务器和循环服务器71
8.4面向连接的和无连接的访问72
8.5传输协议的语义72
8.5.1 TCP语义72
8.5.2 UDP语义73
8.6选择传输协议73
8.7面向连接的服务器73
8.8无连接的服务器74
8.9故障、可靠性和无状态74
8.10优化无状态服务器75
8.11四种基本类型的服务器76
8.12请求处理时间77
8.13循环服务器的算法77
8.14一种循环的、面向连接的服务器的算法78
8.15用INADDR_ANY绑定熟知端口78
8.16将套接字置于被动模式78
8.17接受连接并使用这些连接79
8.18循环的、无连接的服务器的算法79
8.19在无连接的服务器中构造应答79
8.20并发服务器的算法80
8.21主线程和从线程80
8.22并发的、无连接的服务器的算法81
8.23并发的、面向连接服务器的算法81
8.24服务器并发性的实现82
8.25把单独的程序作为从进程来使用82
8.26使用单线程获得表面上的并发性83
8.27各服务器类型所适用的场合83
8.28服务器类型小结84
8.29重要问题——服务器死锁85
8.30其他的实现方法85
8.31小结85
深入研究86
习题86
第9章 循环的、无连接服务器(UDP)87
9.1引言87
9.2创建被动套接字87
9.3进程结构90
9.4 TIME服务器举例91
9.5小结92
深入研究92
习题93
第10章 循环的、面向连接的服务器(TCP)94
10.1引言94
10.2分配被动的TCP套接字94
10.3用于DAYTIME服务的服务器95
10.4进程结构95
10.5 DAYTIME服务器举例95
10.6关闭连接98
10.7连接终止和服务器的脆弱性98
10.8小结98
深入研究99
习题99
第11章 并发的、面向连接的服务器(TCP)100
11.1引言100
11.2并发ECHO100
11.3循环与并发实现的比较100
11.4进程结构101
11.5并发ECHO服务器举例101
11.6清除游离(errant)进程104
11.7小结105
深入研究105
习题105
第12章 将线程用于并发(TCP)106
12.1引言106
12.2 Linux线程概述106
12.3线程的优点106
12.4线程的缺点107
12.5描述符、延迟和退出107
12.6线程退出108
12.7线程协调和同步108
12.7.1互斥108
12.7.2信号量108
12.7.3条件变量109
12.8使用线程的服务器实例109
12.9监控113
12.10小结113
深入研究113
习题114
第13章 单线程、并发服务器(TCP)115
13.1引言115
13.2服务器中的数据驱动处理115
13.3用单线程进行数据驱动处理116
13.4单线程服务器的线程结构116
13.5单线程ECHO服务器举例117
13.6小结119
深入研究119
习题120
第14章 多协议服务器(TCP,UDP)121
14.1引言121
14.2减少服务器数量的动机121
14.3多协议服务器的设计121
14.4进程结构122
14.5多协议DAYTIME服务器的例子122
14.6共享代码的概念125
14.7并发多协议服务器125
14.8小结126
深入研究126
习题126
第15章 多服务服务器(TCP,UDP)127
15.1引言127
15.2合并服务器127
15.3无连接的、多服务服务器的设计127
15.4面向连接的、多服务服务器的设计128
15.5并发的、面向连接的、多服务服务器129
15.6单线程的、多服务服务器的实现129
15.7从多服务服务器调用单独的程序130
15.8多服务、多协议设计131
15.9多服务服务器的例子131
15.10静态的和动态的服务器配置137
15.11 UNIX超级服务器,inetd138
15.12 inetd服务器的例子140
15.13服务器的几种变形清单141
15.14小结141
深入研究142
习题142
第16章 服务器并发性的统一、高效管理143
16.1引言143
16.2在循环设计和并发设计间选择143
16.3并发等级143
16.4需求驱动的并发144
16.5并发的代价144
16.6额外开销和时延144
16.7小时延可能出麻烦145
16.8从线程/进程预分配146
16.8.1 Linux中的预分配146
16.8.2面向连接服务器中的预分配147
16.8.3互斥、文件锁定和accept并发调用147
16.8.4无连接服务器中的预分配148
16.8.5预分配、突发通信量和NFS149
16.8.6多处理器上的预分配149
16.9延迟的从线程/进程分配149
16.10两种技术统一的基础150
16.11技术的结合150
16.12小结151
深入研究151
习题151
第17章客户进程中的并发153
17.1引言153
17.2并发的优点153
17.3运用控制的动机153
17.4与多个服务器的并发联系154
17.5实现并发客户154
17.6单线程实现155
17.7使用ECHO的并发客户例子156
17.8并发客户的执行160
17.9例子代码中的并发性161
17.10小结161
习题162
第18章 运输层和应用层的隧道技术163
18.1引言163
18.2多协议环境163
18.3混合网络技术164
18.4动态电路分配165
18.5封装和隧道技术166
18.6通过IP互联网的隧道技术166
18.7客户和服务器之间的应用级隧道技术166
18.8隧道技术、封装和电话拨号线167
18.9小结168
深入研究168
习题168
第19章 应用级网关169
19.1引言169
19.2在受约束的环境中的客户和服务器169
19.2.1限制访问的现实169
19.2.2有限功能的计算机169
19.2.3安全性引起的连通性约束169
19.3使用应用网关170
19.4通过邮件网关互操作171
19.5邮件网关的实现171
19.6应用网关与隧道技术的比较172
19.7应用网关和有限因特网连接173
19.8为解决安全问题而使用的应用网关174
19.9应用网关和额外跳问题174
19.10应用网关举例176
19.11一个应用网关的实现176
19.12应用网关的代码178
19.13网关交换的例子179
19.14使用rfcd和.forward或slocal文件179
19.15通用的应用网关180
19.16SLIRP的运行180
19.17SLIRP如何处理连接181
19.18IP寻址和SLIRP181
19.19小结182
深入研究182
习题183
第20章 外部数据表示(XDR)184
20.1引言184
20.2数据表示184
20.3N平方转换问题185
20.4网络标准字节顺序185
20.5外部数据表示的事实上的标准186
20.6 XDR数据类型186
20.7隐含类型187
20.8使用XDR的软件支持187
20.9 XDR库例程188
20.10一次一片地构造报文188
20.11 XDR库中的转换例程189
20.12 XDR流、I/O和TCP190
20.13记录、记录边界和数据报I/O190
20.14小结191
深入研究191
习题191
第21章 远程过程调用(RPC)的概念193
21.1引言193
21.2远程过程调用模型193
21.3构建分布式程序的两种模式193
21.4常规过程调用的概念性模型194
21.5过程模型的扩充194
21.6常规过程调用的执行和返回195
21.7分布式系统中的过程模型196
21.8客户-服务器和RPC之间的类比196
21.9作为程序的分布式计算197
21.10 Sun Microsystems的远程过程调用定义197
21.11远程程序和过程198
21.12减少参数的数量198
21.13标识远程程序和过程198
21.14适应远程程序的多个版本200
21.15远程程序中的互斥200
21.16通信语义200
21.17至少一次语义201
21.18 RPC重传201
21.19将远程程序映射到协议端口201
21.20动态端口映射202
21.21 RPC端口映射器算法202
21.22 ONC RPC的报文格式203
21.23对远程过程进行参数排序205
21.24鉴别205
21.25 RPC报文表示的例子206
21.26 UNIX鉴别字段的例子206
21.27小结207
深入研究208
习题208
第22章 分布式程序的生成(rpcgen的概念)209
22.1引言209
22.2使用远程过程调用209
22.3支持RPC的编程工具210
22.4将程序划分成本地过程和远程过程211
22.5为RPC增加代码211
22.6stub过程212
22.7多个远程过程和分派212
22.8客户端的stub过程的名字213
22.9使用rpcgen生成分布式程序213
22.10 rpcgen输出和接口过程214
22.11 rpcgen的输入和输出215
22.12使用rpcgen构建客户和服务器215
22.13小结215
深入研究216
习题216
第23章 分布式程序的生成(rpcgen的例子)218
23.1引言218
23.2说明rpcgen的例子218
23.3查找字典218
23.4分布式程序的八个步骤219
23.5步骤1:构建常规应用程序220
23.6步骤2:将程序划分成两部分224
23.7步骤3:创建rpcgen规约229
23.8步骤4:运行rpcgen230
23.9 rpcgen产生的.h文件230
23.10 rpcgen产生的XDR转换文件232
23.11 rpcgen产生的客户代码233
23.12 rpcgen产生的服务器代码235
23.13步骤5:编写stub接口过程238
23.13.1客户端接口例程238
23.13.2服务器端接口例程240
23.14步骤6:编译和链接客户程序241
23.15步骤7:编译和链接服务器程序244
23.16步骤8:启动服务器和执行客户246
23.17使用make实用程序247
23.18小结249
深入研究249
习题249
第24章 网络文件系统(NFS)的概念251
24.1引言251
24.2远程文件存取和传送251
24.3对远程文件的操作252
24.4异构计算机之间的文件存取252
24.5无状态服务器252
24.6 NFS和UNIX的文件语义252
24.7 UNIX文件系统的回顾253
24.7.1基本定义253
24.7.2无记录界限的字节序列253
24.7.3文件拥有者和组标识符253
24.7.4保护和存取253
24.7.5打开-读-写-关闭范例254
24.7.6数据传送255
24.7.7搜索目录权限255
24.7.8随机存取255
24.7.9搜索超过文件的结束256
24.7.10文件位置和并发存取256
24.7.11在并发存取时的“写(write)”语义257
24.7.12文件名和路径257
24.7.13索引节点(inode):存储在文件中的信息257
24.7.14 stat操作259
24.7.15文件命名机制259
24.7.16文件系统mount260
24.7.17 UNIX文件名解析261
24.7.18符号链接262
24.8 NFS下的文件262
24.9 NFS的文件类型262
24.10 NFS文件模式263
24.11 NFS文件属性263
24.12 NFS客户和服务器264
24.13 NFS客户操作265
24.14 NFS客户与UNIX系统266
24.15 NFS安装266
24.16文件句柄267
24.17句柄取代路径名267
24.18无状态服务器的文件定位268
24.19对目录的操作269
24.20无状态地读目录269
24.21 NFS服务器中的多个分层结构269
24.22安装(mount)协议270
24.23 NFS的传输协议270
24.24小结270
深入研究271
习题271
第25章 网络文件系统协议(NFS,Mount)272
25.1引言272
25.2用RPC定义协议272
25.3用数据结构和过程定义协议272
25.4 NFS常数、类型和数据声明273
25.4.1 NFS常数273
25.4.2 NFS的typedef声明274
25.4.3 NFS数据结构274
25.5 NFS过程277
25.6 NFS操作的语义277
25.6.1 NFSPROC3_NULL(过程0)277
25.6.2 NFSPROC3_GETATTR(过程1)278
25.6.3 NFSPROC3_SETATTR(过程2)278
25.6.4 NFSPROC3_LOOKUP(过程3)278
25.6.5 NFSPROC3_ACCESS(过程4)278
25.6.6 NFSPROC3_READLINK(过程5)278
25.6.7 NFSPROC3_READ(过程6)278
25.6.8 NFSPROC3_WRITE(过程7)278
25.6.9 NFSPROC3_CREATE(过程8)278
25.6.10 NFSPROC3_MKDIR(过程9)278
25.6.11 NFSPROC3_SYMLINK(过程10)279
25.6.12 NFSPROC3_MKNOD(过程11)279
25.6.13 NFSPROC3_REMOVE(过程12)279
25.6.14 NFSPROC3_RMDIR(过程13)279
25.6.15 NFSPROC3_RENAME(过程14)279
25.6.16 NFSPROC3_LINK(过程15)279
25.6.17 NFSPROC3_READDIR(过程16)279
25.6.18 NFSPROC3_READDIRPLUS(过程17)280
25.6.19 NFSPROC3_FSSTAT(过程18)280
25.6.20 NFSPROC3_FSINO(过程19)280
25.6.21 NFSPROC3_PATHCONF(过程20)280
25.6.22 NFSPROC3_COMMIT(过程21)280
25.7安装协议280
25.7.1安装协议的常数定义280
25.7.2安装协议的类型定义281
25.7.3安装数据结构281
25.8安装协议中的过程282
25.9安装操作的语义282
25.9.1 MOUNTPROC3_NULL(过程0)282
25.9.2 MOUNTPROC3_MNT(过程1)282
25.9.3 MOUNTPROC3_DUMP(过程2)283
25.9.4 MOUNTPROC3_UMNT(过程3)283
25.9.5 MOUNTPROC3_UMNTALL(过程4)283
25.9.6 MOUNTPROC3_EXPORT(过程5)283
25.10 NFS和安装鉴别283
25.11文件加锁284
25.12 NFS第3版与第4版之间的变化284
25.13小结285
深入研究285
习题285
第26章 TELNET客户(程序结构)287
26.1引言287
26.2概述287
26.2.1用户终端287
26.2.2命令和控制信息287
26.2.3终端、窗口和文件288
26.2.4对并发性的需要288
26.2.5 TELNET客户的过程模型288
26.3 TELNET客户算法289
26.4 Linux中的终端I/O289
26.4.1控制设备驱动器291
26.5建立终端模式291
26.6用于保存状态的全局变量292
26.7在退出之前恢复终端模式293
26.8客户挂起与恢复294
26.9有限状态机的规约295
26.10在TELNET数据流中嵌入命令296
26.11选项协商296
26.12请求/提供的对称性297
26.13 TELNET字符定义297
26.14针对来自服务器数据的有限状态机298
26.15在各种状态之间转移299
26.16有限状态机的实现300
26.17压缩的有限状态机表示300
26.18在运行时维持压缩表示302
26.19压缩表示的实现302
26.20构造有限状态机转移矩阵304
26.21套接字输出有限状态机305
26.22套接字输出有限状态机的相关定义306
26.23选项子协商有限状态机307
26.24选项子协商有限状态机的相关定义308
26.25有限状态机初始化309
26.26 TELNET客户的参数310
26.27 TELNET客户的核心311
26.28主有限状态机的实现314
26.29小结315
深入研究315
习题316
第27章 TELNET客户(实现细节)317
27.1引言317
27.2有限状态机动作过程317
27.3记录选项请求的类型317
27.4完成空操作318
27.5对回显选项的WILL/WONT做出响应318
27.6对未被支持的选项的WILL/WONT做出响应320
27.7对no go-ahead选项的WILL/WONT做出响应320
27.8生成用于二进制传输的DO/DONT321
27.9对未被支持的选项的DO/DONT做出响应322
27.10对传输二进制选项的DO/DONT做出响应323
27.11对终端类型选项的DO/DONT做出响应324
27.12选项子协商326
27.13发送终端类型信息326
27.14终止子协商328
27.15向服务器发送字符328
27.16显示在用户终端上出现的传入数据329
27.17使用termeap控制用户终端332
27.18将数据块写到服务器333
27.19与客户进程交互334
27.20对非法命令做出响应335
27.21脚本描述文件335
27.22脚本描述的实现336
27.23初始化脚本描述336
27.24收集脚本文件名的字符337
27.25打开脚本文件338
27.26终止脚本描述339
27.27打印状态信息340
27.28小结341
深入研究341
习题342
第28章 流式音频和视频传输(RTP概念和设计)343
28.1引言343
28.2流式传输服务343
28.3实时交付343
28.4抖动的协议补偿343
28.5重传、丢失和恢复344
28.6实时传输协议344
28.7流的转换和混合345
28.8迟延回放和抖动缓存346
28.9 RTP控制协议(RTCP)346
28.10多种流同步347
28.11 RTP传输和多对多传输348
28.12会话、流、协议端口和分用349
28.13编码的基本方法350
28.14 RTP软件的概念性组织350
28.15进程/线程结构351
28.16 API的语义352
28.17抖动缓存的设计和重新缓存353
28.18事件处理354
28.19回放异常及时间戳的复杂性354
28.20实时库例子的大小354
28.21 MP3播放器的例子355
28.22小结355
深入研究356
习题356
第29章 流式音频和视频传输(RTP实现示例)357
29.1引言357
29.2集成实现357
29.3程序结构357
29.4 RTP定义358
29.5时间值的处理361
29.6 RTP序列空间的处理362
29.7 RTP分组队列的处理363
29.8 RTP输入处理365
29.9为RTCP保存统计信息367
29.10 RTP初始化368
29.11 RTCP的定义372
29.12接收RTCP发送方的报告373
29.13产生RTCP接收方的报告374
29.14创建RTCP的首部376
29.15 RTCP时延的计算376
29.16 RTCP Bye(再见)报文的产生377
29.17集成实现的大小378
29.18小结378
深入研究378
习题379
第30章 Linux服务器中的实用技巧和技术380
30.1引言380
30.2后台操作380
30.3编写在后台运行的服务器381
30.4打开描述符和继承382
30.5对服务器编程以关闭所继承的描述符382
30.6来自控制TTY的信号382
30.7对服务器编程以改变它的控制TTY382
30.8转移到一个安全的和已知的目录383
30.9对服务器编程以改变目录383
30.10 Linux umask383
30.11对服务器编程以设置其umask384
30.12进程组384
30.13对服务器编程以设置其进程组384
30.14标准I/O描述符384
30.15对服务器编程以打开标准描述符385
30.16服务器互斥385
30.17对服务器编程以避免多个副本385
30.18记录服务器的进程ID386
30.19对服务器编程以记录其进程ID386
30.20等待一个子进程退出386
30.21对服务器编程以等待每个子进程退出387
30.22外来信号387
30.23对服务器编程以忽略外来信号387
30.24使用系统日志设施387
30.24.1产生日志报文387
30.24.2间接方式和标准差错的优点388
30.24.3 I/O重定向的限制388
30.24.4客户-服务器的解决方案388
30.24.5 syslog机制389
30.24.6 syslog的报文类389
30.24.7 syslog的设施389
30.24.8 syslog的优先级389
30.24.9使用syslog390
30.24.10 syslog配置文件举例390
30.25小结391
深入研究392
习题392
第31章 客户-服务器系统中的死锁和资源缺乏393
31.1引言393
31.2死锁的定义393
31.3死锁检测的难度393
31.4避免死锁394
31.5客户和服务器间的死锁394
31.6在单个交互中避免死锁395
31.7一组客户和一个服务器之间的资源缺乏395
31.8忙连接和资源缺乏395
31.9避免阻塞的操作396
31.10进程、连接和其他限制396
31.11客户和服务器的循环397
31.12用文档确认依赖性397
31.13小结398
习题398
附录1 系统调用与套接字使用的库例程400
附录2 Linux文件和套接字描述符的操作422
参考文献425