《UNIX系统V/386第4版 网络程序员指南 Architecture network programmer's guide》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:吴健等译
  • 出 版 社:北京:电子工业出版社
  • 出版年份:1992
  • ISBN:7505315714
  • 页数:469 页
图书介绍:

第一章 引论 1

1.1 引言 1

1.1.1 文档的组织 1

1.1.2 网络选择与名字到地址映射 1

目录 1

2.2 背景 3

图2—1:OSI参考模型 3

图和表 3

2.1 引言 3

第二章 传输界面编程 3

2.3 本章文档的组织 4

图2—2:传输界面 5

2.4 传输界面概况 5

2.4.1.1 连接方式服务 6

2.4.1 服务方式 6

表2—1:传输界面的本地管理例程 7

图2—3:用者和供者间的通道 7

表2—2:用于建立传输连接的例程 8

图2—4:传输连接 8

表2—4:释放连接例程 9

2.4.1.2 非连接方式服务 9

表2—3:连接方式数据传输例程 9

图4—5:发送Internet域数据报 (1 10

表2—5:非连接方式数据传输例程 10

2.4.2 状态转换 10

2.5 连接方式服务介绍 10

2.5.1 本地管理 10

2.5.1.1 委托方 11

图4—6:TLI数据报代码 (1 12

2.5.1.2 服务方 13

2.5.2 建立连接 16

2.5.2.1 委托方 16

2.5.2.2 事件处理 17

2.5.2.3 服务方 18

图2—5:监听和应答传输端点 21

2.5.3 数据传送 21

2.5.3.2 服务方 22

2.5.3.1 委托方 22

2.5.4 释放连接 24

2.5.4.2 委托方 25

2.5.4.1 服务方 25

2.6 非连接方式服务介绍 26

2.6.1 本地管理 26

2.6.2 数据传送 28

2.6.3 数据报出错 29

2.7 读/写界面 31

2.7.2 read 32

2.7.1 write 32

2.7.3 close 33

2.8 高级课题 33

2.8.1 异步执行方式 33

2.8.2 高级编程示例 34

表2—6:描述传输界面状态转换的状态 40

2.9.2 发出的事件 40

2.9.1 传输界面状态 40

2.9 状态转换 40

表2—7:发出的事件 41

2.9.3 到来的事件 41

表2—8:到来的事件 42

2.9.5 状态表 42

2.9.4 传输用者动作 42

表2—10:非连接方式状态表 43

表2—9:公共的本地管理状态表 43

表2—11:连接方式状态表 44

2.10 协议无关性准则 44

2.11 若干示例 45

2.11.1 连接方式委托方 45

2.11.2 连接方式服务方 47

2.11.3 非连接方式事务服务方 50

2.11.4 读/写委托方 52

2.11.5 事件驱动服务方 54

2.12 词汇 59

3.2.1 Socket的类型 63

3.2 基础 63

3.1 背景 63

第三章 Socket界面 63

3.2.2 Socket的创建 64

3.2.3 联编本地名字 65

3.2.4 连接的建立 66

3.2.5 数据传送 68

3.2.6 关闭Socket 68

图3—1:激发一个Internet域的流连接 69

图3—2:接受一个Internet域的流连接 70

3.2.7 非连接Socket 71

图3—3:读取Internet域数据报 72

图3—4:发送Internet域数据报 73

3.2.8 输入/输出多路复用 74

图3—5:用select()检查挂起的连接 76

3.3 提供的例程 77

3.3.2 网络名字 78

3.3.1 宿主机名字 78

3.3.3 协议名字 79

3.3.4 服务名字 79

3.3.5 其它 80

表3—1:运行库例程 80

图3—6:远程注册委托方代码 81

3.4 委托方/服务方模型 82

3.4.1 服务方 82

图3—7:远程注册服务方代码 83

3.4.2 委托方 85

3.4.3 非连接服务方 86

图3—8:ruptime程序的输出 87

图3—9:rwho服务方 88

3.5 高级课题 89

3.5.1 不同波段数据 89

图3—10:接收不同波段数据时刷清终端I/O 91

3.5.2 非阻塞Socket 92

3.5.3 中断驱动的Socket I/O 92

图3—11:I/O请求异步通知的使用 93

3.5.4 信号和进程组 93

图3—12:SIGCHLD信号的使用 94

3.5.6 地址联编 95

3.5.5 选择具体的协议 95

3.5.7 广播并且确定网络配置 97

3.5.8 Socket任选项 101

3.5.9 inetd 101

4.1.1.1 建立Socket连接:委托方代码 103

4.1.1 连接方式 103

第四章 Socket迁移和Socket到TLI的转换 103

4.1 Socket迁移和Socket到TLI的转换 103

图4—1:面向流的应用程序的委托方 104

图4—2:TLI委托方代码 105

4.1.1.2 建立TLI连接:委托方代码 105

4.1.1.3 建立Socket连接:服务方代码 106

图4—3:Socket服务方代码 107

4.1.1.4 建立TLI连接:服务方代码 107

图4—4:TLI服务方代码 108

4.1.2 非连接方式 110

4.1.2.1 基于Socket的数据报 110

4.1.2.2 TLI数据报 111

4.1.3 同步和异步方式 113

4.1.5 Socket到TLI的转换 114

4.1.4 出错处理 114

表4—1:TLI/Socket等价项表 115

4.1.6 将Socket应用移至System V R4.0 V1.0 116

表4—2:Socket实现的不同之处 117

第五章 远程过程呼叫引论 121

5.1 引言 121

5.1.1 技术信息的组织 121

5.1.2 定义 121

5.2 RPC概述 122

图5—1:用远程过程呼叫的网络通信 123

5.2.1 RPC的版本和号 124

5.2.2 网络选择 124

5.2.3.1 地址登记 126

5.2.3 rpcbind设施 126

5.2.2.1 名字到地址的转换 126

5.2.3.2 rpcinfo命令 127

5.2.4 RPC的较低层次 128

图5—2:委托方侧RPC较低层次 128

5.2.5 外部数据表示 129

图5—3:服务方侧RPC较低层次 129

第六章 rpcgen编程指南 131

6.1 引言 131

6.1.1 rpcgen概述 131

6.1.2 技术信息的组织 131

6.2 rpcgen拓导 132

6.2.1 把本地过程转换成远程过程 132

6.2.2 用rpcgen生成XDR例程 138

6.2.3 使用预处理伪指令 143

6.3 通常的RPC编程技巧 144

6.3.1 网络类型(传输选择) 145

6.3.2 超时改变 145

6.3.3 委托方认证 145

6.3.4 rpcgen命令行定义语句 146

6.3.6 端口监控程序支持 147

6.3.5 服务方对广播呼叫的回答 147

6.3.7 派遣表 148

6.3.8 用rpcgen调试 150

6.4 RPC语言参考 150

6.4.1 定义 150

6.4.2 枚举 150

6.4.3 常量 151

6.4.4 类型定义 151

6.4.5 声明 151

6.4.7 联合 153

6.4.6 结构 153

6.4.8 程序 154

6.4.9 特殊情况 155

第七章 远程过程呼叫编程指南 157

7.1 引言 157

7.1.1 RPC软件包概述 157

7.1.2 技术信息的组织 159

7.2 RPC的简化界面 159

7.2.1 基于RPC库的网络服务 160

7.2.2 远程过程呼叫和登记 161

7.2.2.1 rpc-call()例程 161

7.2.2.2 rpc-reg()例程 162

7.2.2.3 传递任意的数据类型 163

7.3 RPC的较低层 167

7.3.1 顶层 167

7.3.1.1 顶层:委托方侧 167

7.3.1.2 顶层:服务方侧 169

7.3.2.1 中间层:委托方侧 171

7.3.2 中间层 171

7.3.2.2 中间层:服务方侧 172

7.3.3 专家层 173

7.3.3.1 专家层:委托方侧 174

7.3.3.2 专家层:服务方侧 176

7.3.4 底层 178

7.3.4.1 底层:委托方侧 179

7.3.4.2 底层:服务方侧 179

7.4 低层数据结构 180

7.5 使用原始RPC进行低层程序测试 181

7.6 RPC高级编程技巧 183

7.6.1 服务方侧的select() 184

7.6.2 广播RPC 185

7.6.3 批处理 186

7.6.3.1 批处理性能 189

7.6.4 认证 189

7.6.4.1 AUTH-NONE:委托方侧 189

7.6.4.2 AUTH-NONE:服务方侧 190

7.6.4.3 ANTH-SYS 认证 191

7.6.4.4 ANTH—DES认证 193

7.6.5 使用端口监控程序 196

7.6.5.2 使用监听程序 197

7.6.5.1 使用inetd 197

7.7.1 版本 198

7.7 复杂的例子 198

7.7.2 面向连接的传输 199

7.7.3 回叫过程 203

7.7.4 用XDR分配内存 207

第八章 外部数据表示标准:协议规格 209

8.1 XDR引言 209

8.1.1 基本块的大小 209

8.1.2 技术信息的组织 210

8.2 XDR数据类型声明 210

8.2.1 整数 210

8.2.1.1 描述 210

8.2.1.2 声明 210

8.2.1.3 编码 210

8.2.3.1 描述 211

8.2.2 无符号整数 211

8.2.2.1 描述 211

8.2.2.2 声明 211

8.2.2.3 编码 211

8.2.3 枚举 211

8.2.3.2 声明 211

8.2.3.3 编码 211

8.2.4 布尔量 211

8.2.4.1 描述 211

8.2.6.1 描述 212

8.2.6 浮点数 212

8.2.5.3 编码 212

8.2.5.2 明 212

8.2.5.1 描述 212

8.2.5 双整数和无符号双整数 212

8.2.4.3 编码 212

8.2.4.2 声明 212

8.2.6.2 明 213

8.2.6.3 编码 213

8.2.7 双精度浮点数 213

8.2.7.1 描述 213

8.2.7.2 声明 213

8.2.8.2 声明 214

8.2.8.3 编码 214

8.2.8.1 描述 214

8.2.8 定长不透明数据 214

8.2.7.3 编码 214

8.2.10.1 描述 215

8.2.9.3 编码 215

8.2.9.2 声明 215

8.2.9.1 描述 215

8.2.9 变长不透明数据 215

8.2.10 串 215

8.2.10.2 声明 216

8.2.10.3 编码 216

8.2.11 定长数组 216

8.2.11.1 描述 216

8.2.11.2 声明 216

8.2.11.3 编码 216

8.2.12.3 编码 217

8.2.12 变长数组 217

8.2.12.1 描述 217

8.2.12.2 声明 217

8.2.13 结构 217

8.2.13.1 描述 217

8.2.13.2 声明 217

8.2.13.3 编码 218

8.2.14 鉴别联合 218

8.2.14.1 描述 218

8.2.14.2 声明 218

8.2.14.3 编码 218

8.3.1 常量 219

8.2.15.1 描述 219

8.3.2 类型定义 219

8.2.15.2 声明 219

8.3 其它XDR声明 219

8.2.15.3 编码 219

8.2.15 空白 219

8.3.3 可选的数据 220

8.4 XDR语言规格 221

8.4.1 标记的转换 221

8.4.2 词法注释 222

8.4.3 语法信息 222

8.4.3.1 语法注释 224

8.5 XDR数据描述示例 224

8.6 参考文献 225

第九章 远程过程呼叫:协议规格 227

9.1 引言 227

9.1.1 术语 227

9.1.2 协议的一般属性 227

9.1.2.1 RPC模型 227

9.1.2.2 传输和语义 228

9.1.2.3 联编和会合的独立性 228

9.1.2.4 认证 228

9.1.3 技术信息的组织 229

9.2 RPC协议需求 229

9.2.1 程序和过程 229

9.2.2 认证 230

9.2.3 程序号的赋值 230

9.2.4 RPC协议的其它用途 231

9.2.4.1 批处理 231

9.2.4.2 广播RPC 231

9.3 RPC报文协议 232

9.4 认证协议 235

9.4.1 AUTH-NONE认证 235

9.4.2 AUTH-SYS认证 235

9.4.2.1 AUTH-SHORT验证字 236

9.4.3 AUTH-DES认证 236

9.4.3.1 命名 236

9.4.3.2 AUTH-DES认证验证字 237

9.4.3.3 别名和时钟同步 237

9.4.3.4 DES认证协议(用XDR语言) 238

9.4.3.5 Diffie—Hellman密码 239

9.5 记录标志标准 240

9.6.1 用RPC语言描述的一个服务示例 241

9.6 RPC语言 241

9.6.3 语法注释 242

9.6.2 RPC语言规格 242

9.7.1 rpcbind协议规格(用RPC语言) 243

9.7 rpcbind协议 243

9.7.2.6 RPCBPROC-CALLIT过程 245

9.7.2.4 RPCBPROC-GETADDR过程 245

9.7.2.3 RPCBPROC-UNSET过程 245

9.7.2.2 RPCBPROC-SET过程 245

9.7.2.1 RPCBPROC—NULL过程 245

9.7.2 rpcbind操作 245

9.7.2.5 RPCBPROC-DUMP过程 245

9.8 参考文献 246

9.7.2.9 RPCBPROC-TADDR2UADDR过程 246

9.7.2.8 RPCBPROC-UADDR2TADDR过程 246

9.7.2.7 RPCBPROC-GETTIME过程 246

第十章 远程过程呼叫管理 247

1O.1 引言 247

10.2 RPC管理文件 247

10.2.1 名字到地址映射 247

10.3 安全RPC概述 250

10.2.3 /etc/publickey文件 250

10.2.2 系统RC文件/etc/rc2.d/s75rpc 250

10.2.4 /etc/master.d/kernel文件 250

10.3.1 RPC域 251

1O.4 安全RPC管理 252

10.4.1 建立安全RPC域 252

10.4.2 主/etc/publickey文件 253

10.4.2.1 用newkey命令添加RPC用户 253

10.4.3 故障排除注释 254

10.4.2.2 网络口令和chkey命令 254

第十一章 黄页(YP)服务 255

11.1 引言 255

11.1.1 什么是YP 255

11.1.2 YP元素 255

11.1.3 YP环境 256

11.1.3.1 YP域 256

11.1.3.2 YP机器类型 256

11.1.3.3 YP映像 258

11.2.1 建立域 259

11.2 实现YP 259

1 1.2.2.1 publickey映像 260

11.2.2 准备映像 260

11.2.2.2 其它映像 262

11.2.3.1 默认的Makefile 263

11.2.3 构造映像 263

11.2.3.2 更改Makefile 264

11.2.4 设置主服务器 265

11.2.5 在主服务器上启动精灵进程 266

11.2.6 设置从服务器 267

11.2.8 装备YP客户机 269

11.2.7 启动从服务器精灵进程 269

11.3.1 更改已有的映像 270

11.3 管理YP映像 270

11.3.1.1 更改标准映像 270

11.3.1.2 创建与更改非标准映像 271

11.3.2.1 使用带ypxfr的crontab 273

11.3.2 传播YP映像 273

11.3.2.2 使用带ypxfr的shell脚本 273

11.3.2.3 直接调用ypxfr 274

11.3.2.4 记录ypxfr的活动 274

11.3.3 在Makefile中加入新的YP映像 275

11.4 在原始YP服务器集合中加入新的YP服务器 275

1.4.1 修改映像的主服务器 276

11.5 与YP有关的命令小结 278

11.6.1 调试YP客户机 279

11.6.1.1 在客户机上挂起命令 279

11.6 修复YP问题 279

11.6.1.2 不可用的YP 281

11.6.1.3 ypbind瘫痪 282

11.6.1.4 ypwhich显示不一致 283

11.6.2 调试YP服务器 283

11.6.2.1 服务器有YP映像的不同版本 283

11.6.2.2 ypserv瘫痪 284

11.7 关闭YP 285

12.1 网络选择 287

第十二章 网络选择与名字到地址映射 287

12.1.1网络选择怎样工作 287

12.1.2 netconfig文件 288

12.1.3 NETPATH环境变量 289

图12—1:netconfig结构 289

12.1.4 通过NETPATH访问netconfig的例程 290

图12—2:NETPATH环境变量的样板值 290

12.1.5 直接访问netconfig的例程 291

图12—3:使用setnetpath()、getnetpath()和endnetpath()的样板代码 291

图12—4:使用setnetconfig()、getnetconfig和endnetconfi()的样板代码 292

图12—5:使用getnetconfigent()和freenetconfigent()的样板代码 293

图12—6:代码例子:使用网络选择与名字到地址映射 293

12.1.6 代码实例 294

12.1.6.1 通过所有“可见的”netconfig项的循环 294

12.1.6.2 通过用户定义的netconfig项的循环 294

12.1.6.3 通过所有netconfig项的循环 295

12.1.6.4 规定单个传输供者 295

12.2 名字到地址映射 295

12.2.1 名字到地址映射库 296

12.2.2 使用名字到地址映射例程 298

12.2.2.1 netdir-getbyname 298

12.2.2.4 taddr2uaddr 299

12.2.2.2 netdir-getbyaddr 299

12.2.2.3 netdir-free 299

12.2.2.5 uaddr2taddr 299

12.2.2.6 netdir-eption 299

12.2.2.7 netdir-perror 300

12.2.2.8 netdi-Sperror 300

图12—7:代码例子:使用网络选择与名字到地址映射 301

附录A:手册页 303