1.2 应用与基础设施 1
1.3 网络系统工程 1
目录出版者的话专家指导委员会译者序序言前言关于本书的评论作者简介第1章 概述 1
1.1 网络系统和因特网 1
1.6 网络速度 2
1.5 实现高速度 2
1.4 包处理 2
1.8 本书的读者范围和组织 3
1.7 硬件、软件和混合体 3
补充读物 4
1.9 小结 4
2.4 数字电路 5
2.3 面向连接模式和非连接模式 5
第2章 基本术语和实例系统 5
2.1 引言 5
2.2 网络和包 5
2.6 因特网与异构性 6
2.5 局域网和广域网的分类 6
2.8 广播域 7
2.7 网络系统实例 7
2.10 因特网中的其他系统 8
2.9 因特网中使用的两个关键系统 8
2.12 小结 9
2.11 监视和控制系统 9
补充读物 10
3.2 协议和分层 11
3.1 引言 11
第3章 协议和包格式 11
3.3.2 以太网帧格式 12
3.3.1 以太网 12
3.3 第1层和第2层(物理层和网络接口层) 12
3.4.1 因特网协议 13
3.4 第3层(互联网层) 13
3.3.3 以太网地址 13
3.3.4 以太网类型字段 13
3.4.2 IP数据报格式 14
3.5.2 UDP数据报格式 15
3.5.1 UDP和TCP 15
3.4.3 IP地址 15
3.5 第4层(传输层) 15
3.5.3 TCP段格式 16
3.8 地址解析协议 17
3.7 封装和传输 17
3.6 协议端口号和多路分解 17
补充读物 18
3.9 小结 18
4.3 网络接口卡 20
4.2 常规计算机系统 20
第一部分 传统协议处理系统第4章 常规计算机硬件体系结构 20
4.1 引言 20
4.4 总线的定义 21
4.6 存-取模式 22
4.5 总线地址空间 22
4.8 为实现高速而优化网卡 23
4.7 网络接口卡的功能 23
4.9.2 多播识别和过滤 24
4.9.1 单播和广播识别与过滤 24
4.9 板载地址识别 24
4.10 板载包缓冲 25
4.12 操作和数据链接 26
4.11 直接存储器存取 26
4.14 混杂模式 27
4.13 数据流图 27
补充读物 28
4.15 小结 28
5.3 包缓冲区分配 29
5.2 状态信息和资源耗尽 29
第5章 基本包处理:算法和数据结构 29
5.1 引言 29
5.5 协议分层与复制 30
5.4 包缓冲区长度和复制 30
5.6 异构与网络字节顺序 31
5.7 网桥算法 32
5.8 表查找与散列 33
5.9.1 标志字段的解释 34
5.9 IP数据报分片与重组 34
5.9.4 对分片进行分片 35
5.9.3 IP分片算法 35
5.9.2 分片偏移字段的解释 35
5.9.5 IP重组 36
5.9.7 分片的位置 37
5.9.6 组合分片 37
5.10 IP数据报转发 38
5.9.8 IP重组算法 38
5.11 IP转发算法 39
5.12 高速IP转发 40
5.13 TCP连接识别算法 41
5.14 TCP衔接算法 42
5.15 小结 43
练习 44
补充读物 44
6.3 地址查找和包转发 45
6.2 包处理 45
第6章 包处理功能 45
6.1 引言 45
6.4 检错和纠错 46
6.7.1 静态分类和动态分类 47
6.7 包分类 47
6.5 分片、分段和重组 47
6.6 帧和协议多路分解 47
6.7.3 优化的包处理 48
6.7.2 多路分解和分类 48
6.8.2 优先级机制 49
6.8.1 基本排队 49
6.7.4 分类语言 49
6.8 排队和包丢弃 49
6.8.3 包丢弃 50
6.10 安全:认证和保密 51
6.9 调度和分时 51
6.12 流量整形 52
6.11 流量测量和控制 52
6.14 小结 54
6.13 计时器管理 54
练习 55
补充读物 55
7.3 软件中的快速包处理 56
7.2 应用程序中包处理的实现 56
第7章 常规处理器上的协议软件 56
7.1 引言 56
7.6 软件中断和优先级 57
7.5 操作系统实现 57
7.4 嵌入式系统 57
7.8 线程同步 59
7.7 多优先级和内核线程 59
7.9.1 每层一个线程 60
7.9 分层协议软件 60
7.9.3 每个协议多个线程 61
7.9.2 每个协议一个线程 61
7.9.5 每个包一个线程 62
7.9.4 独立的计时器管理线程 62
7.11 小结 63
7.10 异步编程和同步编程 63
练习 64
补充读物 64
8.3 传统的软件路由器 65
8.2 网络系统体系结构 65
第8章 协议处理的硬件体系结构 65
8.1 引言 65
8.4 聚合数据速率 66
8.5 聚合包速率 67
8.6 包速率和软件路由器的可行性 68
8.7 克服单个CPU的瓶颈 69
8.9 对称粗粒度并行 70
8.8 细粒度并行 70
8.11 专用协处理器 71
8.10 非对称粗粒度并行 71
8.13 具有板载处理的网卡 72
8.12 ASIC协处理器实现 72
8.15 信元和面向连接的编址 73
8.14 带板载栈的智能网卡 73
8.16 数据流水线 74
练习 75
补充读物 75
8.17 小结 75
9.2 多路分解的固有局限性 77
9.1 引言 77
第9章 分类和转发 77
9.4 分类的软件实现 78
9.3 包分类 78
9.5 优化基于软件的分类 79
9.7 分类的硬件实现 80
9.6 专用硬件上的软件分类器 80
9.8 优化多规则集的分类 81
9.9 可变长度首部的分类 82
9.11 动态分类与静态分类的比较 83
9.10 混合的硬件/软件分类器 83
9.12 细粒度流的建立 84
9.14 无连接网络的分类与转发 85
9.13 面向连接的网络中的流转发 85
9.15 第二代网络系统 86
9.17 分类和转发芯片 87
9.16 第二代系统中的嵌入式处理器 87
练习 88
补充读物 88
9.18 小结 88
10.3 交换矩阵的概念 90
10.2 内部快速通路的带宽 90
第10章 交换矩阵 90
10.1 引言 90
10.4 同步与异步矩阵 91
10.6 专用的内部通路与端口争用 92
10.5 交换矩阵体系结构的分类 92
10.7 纵横制体系结构 93
10.8 基本排队 94
10.10 共享总线体系结构 96
10.9 时分解决方案:共享数据通路 96
10.12 共享存储器体系结构 98
10.11 其他的共享介质体系结构 98
10.14 Banyan体系结构 99
10.13 多级矩阵 99
10.15 扩展Banyan结构 100
10.17 小结 102
10.16 商用技术 102
练习 103
补充读物 103
11.3 第三代网络系统 106
11.2 第二代体系结构中的CPU 106
第二部分 网络处理器技术第11章 网络处理器:动机与目的 106
11.1 引言 106
11.5 RISC与CISC 107
11.4 使用嵌入式处理器的动机 107
11.6 定制硅片的需求 108
11.7 网络处理器的定义 109
11.9 指令集 110
11.8 基本思想:通过可编程性实现灵活性 110
11.11 网络处理器的成本与收益 111
11.10 用并行性与流水线的可扩展性 111
11.12 网络处理器与其经济上的成功 112
练习 113
补充读物 113
11.13 网络处理器的形势与未来 113
11.14 小结 113
12.3 包处理功能 115
12.2 网络处理器的功能 115
第12章 网络处理器设计的复杂性 115
12.1 引言 115
12.4.1 入口处理 116
12.4 入口与出口处理 116
12.4.2 出口处理 117
12.5 并行与分布式体系结构 118
12.7 每种体系结构角色的结果 119
12.6 网络处理器的体系结构角色 119
12.9 网络处理器设计与软件仿真 121
12.8 宏观的数据流水线与异构性 121
练习 122
补充读物 122
12.10 小结 122
13.3 主要体系结构特性 123
13.2 体系结构的多样性 123
第13章 网络处理器的体系结构 123
13.1 引言 123
13.3.2 存储器层次结构 124
13.3.1 处理器层次结构 124
13.3.3 内部传输机制 126
13.3.5 专用硬件 127
13.3.4 外部接口与通信机制 127
13.3.7 并发执行支持 128
13.3.6 轮询与通知机制 128
13.3.9 硬件与软件的调度机制 129
13.3.8 编程的硬件支持 129
13.4 体系结构、包流与时钟频率 130
13.3.10 隐式或显式的并行性 130
13.6 处理器层次结构的功能分配 132
13.5 软件体系结构 132
13.7 小结 133
练习 134
补充读物 134
14.3 用提高处理器速度进行扩展 136
14.2 处理的层次和扩展 136
第14章 如何扩展网络处理器 136
14.1 引言 136
14.5 用增加处理器类型进行扩展 137
14.4 用增加处理器数目进行扩展 137
14.6 存储器层次的扩展 138
14.7 用增加存储容量进行扩展 139
14.9 用增加存储器类型进行扩展 140
14.8 用增加存储带宽进行扩展 140
14.10 用加入高速缓存进行扩展 141
14.11 用按内容寻址的存储器进行扩展 142
14.12 用CAM做包分类 143
14.13 扩展中的其他限制 145
14.16 小结 146
14.15 瓶颈和扩展 146
14.14 软件的可扩展性 146
练习 147
补充读物 147
15.4 多芯片流水线(Agere) 148
15.3 产品的选择 148
第15章 商用网络处理器的实例 148
15.1 引言 148
15.2 商用产品大量涌现 148
15.5 加强型RISC处理器(Alchemy) 152
15.6 嵌入式处理器加协处理器(AMCC) 153
15.8 可配置指令集处理器(Cognigine) 154
15.7 用同构处理器组成流水线(Cisco) 154
15.9 用异构处理器组成流水线(EZchip) 156
15.10 大规模的和多样性的处理器(IBM) 157
15.11 自适应的RISC加协处理器(Motorola) 159
15.12 小结 161
练习 162
补充读物 162
16.3 命令模式和说明模式 163
16.2 优化分类 163
第16章 用于分类的语言 163
16.1 引言 163
16.6 有助于编程的语言特性 164
16.5 自动翻译 164
16.4 分类用的编程语言 164
16.7 语言和硬件的关系 165
16.10 Intel的网络分类语言(NCL) 166
16.9 商用的分类语言 166
16.8 效率和执行速度 166
16.11 NCL代码举例 167
16.12 NCL的内部函数 169
16.14 条件规则的执行 170
16.13 谓词 170
16.16 NCL的集合功能 171
16.15 增量的协议定义 171
16.18 Agere的函数型程序设计语言(FPL) 172
16.17 NCL的其他特性 172
16.19 两遍处理 173
16.21 用作条件的模式 174
16.20 指定第一遍和第二遍 174
16.22 符号常量 175
16.23 FPL第二遍处理的示例代码 176
16.24 顺序的模式匹配形式 177
16.27 对路由引擎传递信息 178
16.26 返回值 178
16.25 树形函数和BITS缺省值 178
16.29.1 FPL常量的语法 179
16.29 FPL的其他特性 179
16.28 对内部函数和外部函数的访问 179
补充读物 180
16.30 小结 180
16.29.2 FPL的变量 180
16.29.3 FPL对动态分类的支持 180
练习 181
17.4 性能:包速率、数据速率和突发 182
17.3 可编程能力与处理速度 182
第17章 设计中的权衡及其结果 182
17.1 引言 182
17.2 低开发成本与性能 182
17.7 网络处理器的速度与带宽 183
17.6 每接口速率和聚合数据速率 183
17.5 速度与功能 183
17.11 并行性:规模与包排序 184
17.10 显式并行性与成本和可编程能力 184
17.8 协处理器的设计:旁视型与流通型 184
17.9 流水线处理:均匀与同步 184
17.15 编程语言:三方面的权衡 185
17.14 I/O性能与引脚数 185
17.12 并行性:速度与有状态的分类 185
17.13 存储器:速度与可编程能力 185
17.19 存储器类型:专用与通用 186
17.18 通用性与特殊体系结构的角色 186
17.16 多线程:吞吐量与可编程能力 186
17.17 流量管理与低成本的盲转发 186
练习 187
17.22 小结 187
17.20 向后兼容与结构优势 187
17.21 并行性与流水线 187
18.4 IXP:因特网交换处理器 190
18.3 IXA:因特网交换体系结构 190
第三部分 网络处理器实例第18章 Intel网络处理器概述 190
18.1 引言 190
18.2 Intel术语集 190
18.6 外部连接 191
18.5 IXP1200的基本特性 191
18.6.1 串行线路接口 192
18.8 IXP1200处理器层次结构 193
18.7 内部组件 193
18.6.2 PCI总线 193
18.6.3 IX总线 193
18.6.4 SDRAM总线 193
18.6.5 SRAM总线 193
18.9 IXP1200存储器层次结构 195
18.8.5 物理接口处理器 195
18.8.1 通用处理器 195
18.8.2 嵌入式RISC处理器(StrongARM) 195
18.8.3 I/O处理器(微引擎) 195
18.8.4 协处理器和其他功能部件 195
18.11 底层复杂性举例 197
18.10 字和长字寻址 197
18.13 小结 198
18.12 其他硬件部件 198
练习 199
补充读物 199
19.2 使用嵌入式处理器的目的 200
19.1 引言 200
第19章 Intel嵌入式RISC处理器(StrongARM核心) 200
19.3 StrongARM体系结构 201
19.5 StrongARM存储器体系结构 202
19.4 RLSC指令集和寄存器 202
19.6 StrongARM存储器映像 203
19.9 内部外围部件 204
19.8 共享存储器和地址交换 204
19.7 虚地址空间和存储器管理 204
19.11 用户态和核心态操作 205
19.10 其他I/O 205
19.9.1 通过通用异步收发器的串行连接 205
19.9.2 递减计时器 205
19.9.3 通用I/O引脚 205
19.9.4 实时时钟 205
练习 206
补充读物 206
19.12 协处理器15 206
19.13 小结 206
20.3 微引擎体系结构 208
20.2 微引擎的作用 208
第20章 包处理器硬件(微引擎和FBI) 208
20.1 引言 208
20.5 微引擎指令集 209
20.4 微序列的概念 209
20.6 分离的内存地址空间 210
20.7 执行流水线 211
20.8 指令暂停的概念 212
20.10 存储器访问延迟 213
20.9 条件分支与流水线异常中止 213
20.11 硬件线程与上下文切换 214
20.12 微引擎指令存储 215
20.14.2 寄存器组 216
20.14.1 上下文相对寄存器与绝对寄存器 216
20.13 微引擎硬件寄存器 216
20.14 通用寄存器 216
20.15 传送寄存器 217
20.17 内部处理器通信 218
20.16 本地控制与状态寄存器 218
20.18 FBI单元 219
20.20 FBI体系结构与推入/拉出引擎 220
20.19 传送FIFO与接收FIFO 220
20.22 散列单元 221
20.21 暂存存储器 221
练习 223
补充读物 223
20.23 配置、控制和状态寄存器 223
20.24 小结 223
21.3.1 Intel的硬件测试台 225
21.3 Intel参考系统 225
第21章 参考系统与软件开发工具包 225
21.1 引言 225
21.2 参考系统 225
21.3.2 Intel的软件开发工具包 226
21.5 运行在StrongARM上的操作系统 227
21.4 主机操作系统选择 227
21.7 PCI以太网仿真 228
21.6 外部文件的访问与存储 228
21.10 系统重启 229
21.9 运行软件 229
21.8 参考硬件的启动 229
补充读物 230
21.12 小结 230
21.11 可选的交叉开发软件 230
练习 231
22.3 ACE定义和术语 232
22.2 ACE抽象 232
第22章 编程模式(ACE) 232
22.1 引言 232
22.6 ACE互连实例 233
22.5 输出目标和推迟绑定 233
22.4 ACE的四个概念部分 233
22.7 ACE划分为核心和微块 234
22.9 复制的微块组 235
22.8 微块组 235
22.11 调度循环 236
22.10 微块结构 236
22.14 异常 238
22.13 包队列 238
22.12 调度循环调用的约定 238
22.15 交叉调用 239
练习 240
补充读物 240
22.16 ACE模式之外的应用程序 240
22.17 小结 240
23.3 主要运行组件 242
23.2 StrongARM的任务 242
第23章 ACE运行结构和StrongARM设施 242
23.1 引言 242
23.5.1 解析器 243
23.5 对象管理系统 243
23.4 ACE的核心部件 243
23.9 微引擎的自动分配 244
23.8 动作服务库 244
23.5.2 名字服务器 244
23.6 资源管理器 244
23.7 操作系统专用库 244
23.11 ACE主程序和事件循环 245
23.10 ACE程序结构 245
23.12 ACE事件循环和阻塞 246
23.13 异步编程模式和回调 247
23.15 存储分配 249
23.14 异步执行和互斥 249
23.17 ACE数据的分配及初始化 250
23.16 ACE的加载和启动(ixstart) 250
23.18 交叉调用 251
23.20 通信访问进程 252
23.19 使用IDL的交叉调用声明 252
23.21 定时器管理 253
23.22 NCL的分类、动作及缺省动作 254
练习 255
补充读物 255
23.23 小结 255
第24章 微引擎编程Ⅰ 257
24.1 引言 257
24.2 Intel的微引擎汇编器 257
24.3 微引擎汇编语言的语法 257
24.4 操作数语法举例 258
24.5 寄存器符号名及其分配 260
24.6 寄存器的类型和语法 261
24.7 本地寄存器的作用域、嵌套和屏蔽 262
24.8 寄存器的分配及冲突 263
24.9 宏预处理器 263
24.10 宏定义 264
24.11 代码段的重复生成 265
24.12 结构化编程指令 265
24.13 可导致上下文切换的指令 267
24.14 间接调用 268
24.15 外部传输 269
24.16 库宏和传送寄存器的分配 269
补充读物 270
练习 270
24.17 小结 270
25.2 专用存储器操作 272
25.1 引言 272
25.3 缓冲池操作 272
第25章 微引擎编程Ⅱ 272
25.4 通过位测试实现处理器协作 273
25.5 存储器原子递增 273
25.6 通过存储器锁操作实现处理器协作 274
25.7 控制和状态寄存器 275
25.8 Intel调度循环宏 276
25.9 包队列及其选择 277
25.10 包首部中字段的访问 278
25.11 调度循环宏需要进行的初始化 278
25.12 包I/O和MAC包的概念 280
25.13 无中断的包输入 281
25.14 入口包传输 281
25.15 包出口 282
25.16 其他I/O细节 283
补充读物 284
练习 284
25.17 小结 284
26.2 线路中的块实例 285
26.1 引言 285
26.3 wwbump设计 285
第26章 ACE实例 285
26.4 头文件 286
26.5 包分类和处理的微代码 288
26.6 调度循环的微代码 291
26.7 核心组件代码(异常处理程序) 293
26.8 ACE结构 295
26.9 wwbump ACE初始化和结束处理的代码 295
26.10 交叉调用实例 297
26.10.2 IDL说明 298
26.10.3 IDL编译器生成的文件 298
26.10.1 输出函数的定义 298
26.11 一个交叉调用函数的代码 300
26.12 系统配置 302
补充读物 306
26.14 小结 306
练习 306
26.13 wwbump设计中一个潜在的瓶颈 306
27.2 使用双芯片获得更高数据速率 308
27.1 引言 308
27.3 一般特征 308
第27章 Intel的第二代处理器 308
27.5 外部连接和总线 309
27.6 流控总线 309
27.4 存储器层次结构 309
27.7 介质或交换矩阵接口 310
27.8 内部体系结构 310
27.9 物理网络接口和多路复用 311
27.11 支持软件流水线 312
27.12 IXP2800 312
27.10 微引擎增强 312
补充读物 313
练习 313
27.13 小结 313
附录 术语和缩略语词汇表 314
参考文献 341
索引 344