第1章 引言和概述 1
1.1 TCP/IP协议 1
1.2 了解细节的必要性 1
1.3 协议间交互作用的复杂性 1
1.4 本书采用的方法 2
1.5 研究代码的重要性 2
1.6 Xinu操作系统 3
1.7 本书其余部分的组织 3
1.8 小结 4
第2章 操作系统中的TCP/IP软件结构 5
2.1 引言 5
2.2 进程的概念 5
2.3 进程的优先级 6
2.4 进程通信处理 6
2.5 进程间通信 8
2.6 设备驱动程序和输入、输出程序 10
2.7 网络的输入和中断 10
2.8 向高层协议传递分组 11
2.9 IP协议与传输协议之间的数据报传递 12
2.10 向应用程序的传递操作 13
2.11 输出时的信息流 13
2.12 从TCP经过IP到网络输出 14
2.13 UDP输出处理 15
2.14 小结 16
3.1 引言 20
3.2 网络接口抽象模型 20
第3章 网络接口层 20
3.3 接口的逻辑状态 23
3.4 本地主机接口 23
3.5 缓冲区管理 24
3.6 输入分组的分路 26
3.7 小结 28
第4章 地址的发现及绑定(ARP) 29
4.1 引言 29
4.2 ARP软件在理论上的结构 29
4.3 ARP设计方案举例 29
4.4 ARP高速缓存的数据结构 31
4.5 ARP输出处理 33
4.6 ARP输入处理 37
4.7 ARP高速缓存的管理 41
4.8 ARP初始化 45
4.9 ARP参数配置 46
4.10 小结 46
第5章 IP:软件的总体结构 48
5.1 引言 48
5.2 中心环节 48
5.3 IP软件设计思想 48
5.4 IP软件结构和数据报流程 49
5.5 IP首部中的字节顺序 61
5.6 向IP发送一个数据报 62
5.7 表格的维护 65
5.8 小结 66
6.2 路由维护和查找 68
6.3 选路表结构 68
6.1 引言 68
第6章 IP:选路表和选路算法 68
6.4 选路表数据结构 69
6.5 路由的生成源及保持时间 71
6.6 为数据报选择路由 71
6.7 选路表的定期维护 77
6.8 IP选项处理 84
6.9 小结 85
7.2 数据报的分片 87
7.1 引言 87
第7章 IP:分片与重组 87
7.3 分片的实现 88
7.4 数据报的重组 92
7.5 数据报片链表的维护管理 100
7.6 初始化 102
7.7 小结 102
第8章 IP:差错处理(ICMP) 104
8.1 引言 104
8.2 ICMP报文格式 104
8.3 ICMP报文的实现 104
8.4 输入ICMP报文的处理 106
8.5 ICMP改变路由报文的处理 109
8.6 设置子网掩码 110
8.7 为一个ICMP分组选择源地址 112
8.8 生成ICMP差错报文 113
8.9 避免出现错误的差错报文 115
8.10 为ICMP报文分配缓冲区 116
8.11 ICMP报文中的数据部分 118
8.12 ICMP改变路由报文的生成 120
8.13 小结 121
第9章 IP:组播处理(IGMP) 123
9.1 引言 123
9.2 维护组播主机群的成员信息 123
9.3 主机群表 123
9.4 查找一个主机群 125
9.5 向主机群表中增加一个表项 126
9.6 为一个组播地址设置网络接口 128
9.7 IP组播地址和硬件组播地址之间的转换 129
9.8 从主机群表中删除一个组播地址 131
9.9 加入一个主机群 132
9.10 维持与一个组播路由器的联系 133
9.11 IGMP成员关系报告的实现 135
9.12 计算随机时延 136
9.13 发送IGMP报告的进程 137
9.14 处理输入的IGMP报文 138
9.15 脱离主机群 139
9.16 IGMP数据结构初始化 141
9.17 小结 142
10.2 UDP端口和去复用处理 143
第10章 UDP:用户数据报 143
10.1 引言 143
10.3 UDP 146
10.4 UDP输出的处理 155
10.5 小结 158
第11章 TCP:数据结构和输入处理 160
11.1 引言 160
11.2 TCP软件概览 160
11.3 传输控制块 160
11.4 TCP报文段格式 165
11.5 序列空间中的比较 166
11.6 TCP有限状态机 167
11.7 状态变迁举例 167
11.8 有限状态机的说明 169
11.9 TCB的分配及初始化 170
11.10 有限状态机的实现 172
11.11 处理一个输入报文段 173
11.12 小结 181
12.2 CLOSED状态处理 183
12.3 文明关闭 183
第12章 TCP:有限状态机的实现 183
12.1 引言 183
12.4 关闭后的延迟计时 184
12.5 TIME-WAIT状态处理 185
12.6 CLOSING状态处理 186
12.7 FIN-WAIT-2状态处理 187
12.8 FIN-WAIT-1状态处理 188
12.9 CLOSE-WAIT状态处理 190
12.10 LAST-ACK状态处理 191
12.11 ESTABLISHED状态处理 192
12.12 处理报文段中的紧急数据 193
12.13 处理报文段中的其他数据 195
12.14 经常注意已接收的八位组 197
12.15 中止一个TCP连接 200
12.16 建立TCP连接 200
12.17 初始化TCB 201
12.18 SYN-SENT状态处理 202
12.19 SYN-RECEIVED状态处理 203
12.20 LISTEN状态处理 205
12.21 为一个新TCB初始化窗口变量 207
12.22 小结 209
第13章 TCP:输出处理 210
13.1 引言 210
13.2 TCP输出控制的复杂性 210
13.3 TCP输出的四个状态 210
13.4 作为一个进程的TCP输出 211
13.6 对输出状态和TCB号的编码 212
13.7 TCP输出进程的实现 212
13.5 TCP输出消息 212
13.8 互斥操作 213
13.9 IDLE状态的实现 214
13.10 PERSIST状态的实现 214
13.11TRANSMIT状态的实现 215
13.12 RETRANSMIT状态的实现 217
13.13 发送一个报文段 217
13.14 计算TCP数据长度 220
13.15 序号计算 221
13.16 其他TCP过程 222
13.17 小结 228
第14章 定时器管理 230
14.1 引言 230
14.2 定时事件的通用数据结构 230
14.3 TCP事件使用的数据结构 231
14.4 定时器、事件和消息 232
14.5 TCP定时器进程 232
14.6 删除TCP定时器事件 234
14.7 删除一个TCB的所有事件 235
14.8 确定出现一个事件的尚需时间 236
14.9 插入TCP定时器事件 237
14.10 启动无时延的TCP输出 239
10.11 小结 240
15.2 自适应重发中的难题 241
15.3 自适应重发的调整 241
15.1 引言 241
第15章 TCP:流量控制和自适应重发 241
15.4 重发定时器和退避 242
15.5 基于窗口的流量控制 244
15.6 最大报文段长度的计算 247
15.7 网络拥塞预防与控制 251
15.8 慢启动和拥塞预防 252
15.9 平均往返时间估值及超时 254
15.10 技术和注意事项 260
15.11 小结 260
16.3 紧急数据 263
16.2 带外信令 263
16.1 引言 263
第16章 TCP:紧急数据处理和急迫功能 263
16.4 标准的解释 264
16.5 为Berkeley紧急指针解释法而设的配置 266
16.6 通知应用程序 266
16.7 从TCP中读取数据 267
16.8 发送紧急数据 269
16.9 TCP的急迫功能 270
16.10 在失序交付时对急迫数据的解释 270
16.11 输入时急迫功能的实现 271
16.12 小结 272
第17章 插口级的接口 274
17.1 引言 274
17.2 通过设备形成的接口 274
17.3 作为设备的TCP连接 276
17.4 TCP客户程序举例 276
17.5 TCP服务器程序举例 277
17.6 TCP主设备的实现 279
17.7 TCP从设备的实现 286
17.8 从设备的初始化 299
17.9 小结 300
第18章 RIP:主动路由传播和被动获取 302
18.1 引言 302
18.2 主动和被动模式的参与者 302
18.3 基本的RIP算法和费用度量 303
18.4 不稳定性及解决方案 303
18.5 报文类型 306
18.6 协议特性 306
18.7 RIP的具体实现 307
18.8 基本RIP进程 310
18.9 对输入请求的响应 315
18.10 生成更新报文 317
18.11 初始化一个更新报文的拷贝 318
18.12 生成定期的RIP输出 323
18.13 RIP的局限性 324
18.14 小结 324
第19章 OSPF:使用SPF算法的路由传播 325
19.1 引言 325
19.2 OSPF配置和选项 325
19.3 OSPF的图解理论模型 326
19.4 OSPF的说明 328
19.5 邻接关系和链路状态信息的传播 334
19.6 用Hello发现相邻网关 335
19.7 Hello分组的发送 336
19.8 指定路由器 341
19.9 选出一个指定路由器 341
19.10 变动之后重建邻接关系 345
19.11 处理到达的Hello分组 348
19.12 在相邻网关表中增加一个网关 349
19.13 相邻网关状态的变迁 351
19.14 OSPF定时器事件和重发 352
19.15 判断是否允许邻接关系 354
19.16 OSPF输入的处理 355
19.17 链路状态处理中的说明和过程 358
19.18 数据库描述分组的生成 360
19.19 创建一个模板 362
19.20 传送数据库描述分组 363
19.21 处理到达的数据库描述分组 365
19.22 处理链路状态请求分组 370
19.23 建立链路状态概要信息 372
19.24 OSPF实用过程 374
19.25 小结 377
第20章 SNMP:MIB变量、表示形式以及变量映射 378
20.1 引言 378
20.2 服务器的组织和名字的映射 378
20.3 MIB变量 379
20.4 MIB变量名 380
20.6 除去前缀 381
20.5 名字之间的字典顺序 381
20.7 在MIB变量上执行的操作 382
20.8 表格名 382
20.9 名字体系概念上的线索 383
20.10 MIB变量的数据结构 384
20.11 用于快速查找的数据结构 385
20.12 散列表的实现 386
20.13 MIB绑定的描述 387
20.14 绑定中使用的内部变量 392
20.15 散列表的查找 393
20.16 SNMP的结构和常量 395
20.17 ASN.1表示形式的处理 399
20.18 小结 409
第21章 SNMP:客户机与服务器 410
21.1 引言 410
21.2 服务器中数据的表示形式 410
21.3 服务器的实现 410
21.4 对SNMP报文的分析 412
21.5 绑定链表中ASN.1名字的转换 416
21.6 解析一个请求 417
21.7 对get-next操作的解释 419
21.8 操作的间接执行 420
21.9 表格的间接寻址 422
21.10 回答报文的反向生成 423
21.11从内部格式转换为ASN.1表示形式 426
21.12 服务器使用的实用函数 428
21.13 一个SNMP客户机的实现 428
21.14 变量初始化 430
21.15 小结 432
第22章 SNMP:表格访问函数 434
22.1 引言 434
22.2 表格访问 434
22.3 表格的对象标识符 434
22.4 地址入口表函数 435
22.5 地址转换表函数 441
22.6 网络接口表的函数 450
22.7选路表函数 457
22.8 TCP连接表函数 466
22.9 小结 473
第23章 实现的回顾 474
23.1 引言 474
23.2 程序代码统计分析 474
23.3 各个协议的程序代码行数 474
23.4 每个协议所需的函数和过程 476
23.5 小结 477
附录1 过程调用交叉参考表 479
附录2 程序代码中使用到的Xinu函数和常量 499
参考文献 515