《Linux网络体系结构 Linux内核中网络协议的设计与实现》PDF下载

  • 购买积分:15 如何计算积分?
  • 作  者:(美)威尔(Wehrle,K.)等著;汪青青,卢祖英译
  • 出 版 社:北京:清华大学出版社
  • 出版年份:2006
  • ISBN:7302130191
  • 页数:489 页
图书介绍:本书介绍了在Linux内核中实现网络功能时所需要的基础知识,同时也介绍了通信系统的设计。

第一篇 Linux内核 2

第1章 推动因素 2

1.1 Linux操作系统 3

1.2 什么是Linux 4

1.3 使用Linux的理由 4

第2章 内核结构 7

2.1 整体式体系结构和微内核 8

2.2 Linux内核中的活动 9

2.2.1 进程和系统调用 10

2.2.2 硬件中断 11

2.2.3 软件中断 12

2.2.4 任务蕾 12

2.2.5 下半区 13

2.3 加锁——原子运算 14

2.3.1 位运算 15

2.3.2 环形锁 16

2.3.3 读写环形锁 17

2.3.4 信号量 18

2.4 内核模块 18

2.4.1 内核模块的管理 19

2.4.3 在加载模块时传递参数 21

2.4.2 模块功能的注册和注销 21

2.4.4 内核符号表和模块 22

2.5 设备驱动程序 23

2.6 内核中的存储管理 26

2.6.1 精选的存储管理函数 26

2.6.2 缓存 27

2.7 Linux内核中的定时 28

2.7.1 标准定时器 29

2.7.2 使用APIC作为高解析频率定时器 30

2.8 proc文件系统 33

2.9 版本化 36

3.1 基于层的通信模型 38

第二篇 网络实现的体系结构 38

第3章 通信系统的体系结构 38

3.1.1 ISO/OSI参考模型 39

3.1.2 TCP/IP参考模型 40

3.2 服务和协议 41

第4章 管理内核中的网络报文 44

4.1 套接字缓存 44

4.1.1 套接字缓存上的操作 48

4.1.2 其他函数 53

4.2 套接字缓存队列 53

第5章 网络设备 57

5.1 net_device接口 58

5.2 管理网络设备 66

5.2.1 网络设备的注册与注销 67

5.2.2 网络设备的开启与关闭 69

5.2.3 创建和寻找网络设备 70

5.2.4 为状态改变而设计的通知链 72

5.2.5 在网络设备上进行传输 73

5.3 网络设备 73

5.3.1 初始化网络适配器 74

5.3.2 打开和关闭网络适配器 79

5.3.3 传输数据 81

5.3.4 包传输过程中的问题 87

5.3.5 运行时配置 88

5.3.6 适配器相关的ioctl()命令 89

5.3.7 网络设备的统计信息 90

5.3.8 适配器层次的多播支持 91

第三篇 第Ⅰ+Ⅱ层——介质访问和逻辑链路层 94

第6章 数据链路层简介 94

6.1 数据链路层的结构 94

6.2 数据链路层上的进程 96

6.2.1 数据包的接收 98

6.2.2 数据包的传输 100

6.3 第3层协议的管理 103

第7章 串行线路Internet协议(SLIP) 107

7.1 简介 107

7.2 Linux内核中的SLIP实现 109

7.2.1 TTY设备和线路规范 109

7.2.2 一般过程 111

7.2.3 函数和数据结构 112

7.2.4 驱动器的初始化及连接的建立 115

7.2.5 网络设备的激活及撤销 116

7.2.6 拆除连接及取消驱动器的初始化 116

7.2.7 IP数据包的传输 116

7.2.8 IP数据包的接收 117

第8章 点对点协议(PPP) 118

8.1 简介 118

8.1.1 子协议 118

8.1.2 Linux实现的组成部分 119

8.2 Linux中的PPP配置 120

8.2.1 内核选项 120

8.2.2 pppd—PPP守护程序 121

8.2.3 Dial on Demand 122

8.2.4 自动回叫 122

8.3 Linux内核中的PPP实现 122

8.3.1 通用PPP驱动程序的功能和数据结构 122

8.3.2 异步PPP驱动程序的函数和数据结构 125

8.3.3 初始化 127

8.3.4 发送IP包 127

8.3.5 检测帧边界 127

8.3.6 接收IP包 128

8.4 实现PPP守护程序 129

8.4.1 管理子协议 129

8.4.2 状态 130

第9章 以太网上的PPP技术 132

9.1 简介 132

9.2 RFC 2516中的PPPOE规范 132

9.3 用户空间中的实现 133

9.4 Liniux内核中的实现 134

9.4.1 内核的变化 134

9.4.2 ppp守护程序的任务 136

9.4.3 配置 137

第10章 异步传输模式——ATM 138

10.1 简介 138

10.2 在linux中实现ATM 138

10.2.1 永久性虚拟通道 139

10.2.2 有信号虚拟通道 142

10.2.3 ATM设备驱动程序 144

10.2.4 进一步的ATM支持 145

10.3 配置 146

第11章 Linux中的蓝牙 147

11.1 主机控制器接口(HCI) 148

11.1.1 指令封包 149

11.1.2 事件封包 149

11.1.3 数据封包 150

11.1.4 访问主机控制器接口 151

11.2 L2CAP 151

11.2.1 连接建立阶段 152

11.2.2 配置阶段 153

11.2.3 数据传输阶段 153

11.3 其他协议 154

第12章 透明桥 155

12.1 介绍 155

12.2 基本概念 155

12.2.1 透明桥的属性 156

12.2.2 转发函数 157

12.2.3 学习功能 158

12.2.4 生成树协议 158

12.3 在Linux下配置桥 163

12.3.1 配置内核和网络适配器 163

12.3.2 用brctl工具配置Linux桥 163

12.3.4 配置实例 164

12.3.3 检查桥功能 164

12.4 实现 166

12.4.1 桥实现的体系结构 166

12.4.2 生成和连接重要的数据结构 167

12.4.3 包在内核中的路径 168

12.4.4 学习新MAC地址 170

12.4.5 实现生成树协议 171

第四篇 网络层 182

第13章 推动因素 182

Internet协议族 182

14.1.1 在路由器之间路由IP包 185

14.1 IP的属性 185

第14章 IPv4 185

14.1.2 IP包头 186

14.1.3 IP数据包的生存期 188

14.1.4 Internet上的寻址 188

14.1.5 IP地址和IP地址分类 188

14.2 IP的实现 190

14.2.1 传入IP包的路径 192

14.2.2 传输层的包 195

14.2.3 包的分片 196

14.2.4 IP实体的数据 200

14.2.5 一些IP辅助函数 203

14.3 IP的选项 204

14.3.1 标准IP包选项 205

14.3.2 配置 208

14.3.3 Linux内核中的ip_options类 210

14.3.4 IP层中的IP选项 212

14.4 Internet控制消息协议(ICMP) 214

14.4.1 ICMP的功能原理 214

14.4.2 ICMP的配置 219

14.4.3 Linux内核中的ICMP 219

15.1 运用地址解析协议 223

第15章 地址解析协议(ARP) 223

15.1.1 ARP协议数据单元的结构 224

15.1.2 接收一个ARP报文并应答 225

15.2 ARP命令 226

15.3 实现Linux内核中的ARP实例 227

15.3.1 管理ARP缓存中可达的计算机 227

15.3.2 地址解析协议(ARP)的运作方式 232

第16章 IP路由 240

16.1 序言 240

16.1.1 网络和路由器 240

16.1.2 转发和路由 241

16.1.3 IP地址 242

16.1.4 转发步骤 244

16.1.5 路由缓存 245

16.1.6 基于规则的路由 246

16.2 配置 247

16.2.1 内核的配置 247

16.2.2 proc文件系统中的文件 249

16.2.3 系统层级的配置 250

16.3 实现 254

16.3.1 路由规则 254

16.3.2 路由表 258

16.3.3 路由缓存 264

16.3.4 转发进程 268

第17章 用于组通信的IP多播 272

17.1 组通信 272

17.1.1 单播 272

17.1.2 广播 273

17.1.3 多播 273

17.2 IP多播 274

17.2.1 用作多播组的地址 275

17.2.2 Linux中的IP多播配置 276

17.2.3 多播编程 277

17.3 Internet组管理协议(IGMP) 279

17.3.1 IGMP包的格式与传送 280

17.3.2 不同的版本 280

17.3.3 IGMP协议的运作 281

17.3.4 IGMP的实现 283

17.4 Linux内核中的多播数据路径 285

17.4.1 MAC层上的多播支持 285

17.4.2 IP中的多播数据路径 287

17.5 当今Internet上的多播 293

17.5.1 多播骨干网(MBone) 294

17.5.2 通过mrouted守护进程访问MBone 294

17.5.3 DVMRP路由算法 300

17.6 多播传输协议 302

第18章 用流量控制支持服务质量(QoS) 303

18.1 引言 303

18.2 Linux中的流量控制的基本结构 303

18.3 外发方向上的流量控制 304

18.4 内核结构和接口 306

18.4.1 句柄 306

18.4.2 排队规则 306

18.4.3 类 309

18.4.4 过滤器 311

18.6 实现一个排队规则 313

18.5 入口限制 313

18.7 配置 316

18.7.1 RT网络连接接口 316

18.7.2 用户接口 316

第19章 包筛选器与防火墙 317

19.1 介绍 317

19.1.1 防火墙的工作原理 317

19.1.2 协议相关特性:TCP、FTP以及其他协议 318

19.1.3 筛选器实现的质量标准 319

19.1.4 防火墙工作原理的局限性 319

19.2 2.2版本Linux的ipchains体系结构 320

19.2.1 ipchains规则语法 321

19.2.2 ipchains体系结构的缺陷 322

19.3 2.4版本Linux的Netfilter体系结构 323

19.3.1 Linux内核中的Netfilter钩子 323

19.3.2 注册和注销包筛选函数 325

19.3.3 iptables与ipchains的比较 327

19.3.4 iptables命令行工具 327

19.3.5 netfilter标准模块 328

20.2 实现 331

20.2.1 基本结构 331

第20章 连接跟踪 331

20.1 简介 331

20.2.2 连接记录 332

20.2.3 传输协议 334

20.2.4 Helper模块 334

20.2.5 全局变量 334

20.2.6 函数 335

第21章 网络地址转换(NAT) 340

21.1 简介 340

21.1.1 重要术语 340

21.1.2 透明地址分配 340

21.1.5 NAT与2.2版本Linux中的地址伪装有何不同 341

21.1.3 透明路由 341

21.1.4 正确处理ICMP包 341

21.1.6 NAT的变化形式 342

21.1.7 相关问题 343

21.2 在Linux中配置NAT 343

21.3 实现NAT模块 345

21.3.1 重要的数据结构 345

21.3.2 初始化NAT模块和卸载NAT模块 348

21.3.3 NAT模块如何处理经过的IP包 348

21.3.4 初始化地址绑定过程 349

21.3.5 实际的地址转换 350

21.4.1 传输协议 351

21.4 NAT模块的扩展接口 351

21.4.2 Helper模块 352

第22章 扩展Linux网络体系结构功能——KIDS 354

22.1 管理动态可扩展的各项功能 354

22.2 KIDS构造系统的结构 355

22.2.1 基本QoS组件 355

22.2.2 钩子 357

22.3 用KIDS实例扩展Liunx网络体系结构 358

22.3.1 组件及其实例 358

22.3.2 注册和管理组件 362

22.3.3 管理组件实例 363

22.3.5 组件的工作方式 364

22.3.4 实现钩子 364

22.3.6 配置各KIDS组件 366

第23章 Ipv6——Internet协议第6版 368

23.1 介绍 368

23.2 IPv6的各项特性 368

23.2.1 地址分配 368

23.2.2 IPv6包报头 370

23.2.3 包报头扩展 371

23.3 IPv6实现 374

23.3.1 传入包 374

23.3.3 本地投递包 375

23.3.2 转发包 375

23.3.4 传输层包 376

第五篇 第四层——传输层 378

第24章 传输控制协议(TCP) 378

24.1 概述 378

24.1.1 对TCP的要求 378

24.1.2 TCP数据包的格式 379

24.2 TCP协议实例的实现 380

24.2.1 输入TCP段的处理 380

24.2.2 TCP段的发送 387

24.2.3 TCP实例的数据结构 390

24.3 连接管理 395

24.3.1 TCP状态机 396

24.3.2 建立连接 397

24.3.3 连接的拆卸 399

24.4 数据交换的协议机制 404

24.4.1 流控制 404

24.4.2 拥塞的检测、回避和处理 415

24.4.3 拥塞回避 421

24.5 TCP中的计时器管理 423

24.5.1 数据结构 423

24.5.2 函数 424

24.5.3 配置 426

25.1 简介 428

第25章 用户数据报协议(UDP) 428

25.2 数据结构 429

25.2.1 传递有效负荷 429

25.2.2 UDP数据报 430

25.2.3 UDP至网络体系结构的集成 431

25.3 UDP数据报的收发 433

第26章 套接字的概念 436

26.1 简介 436

26.2 BSD套接字 437

26.3.1 PF_INET套接字 440

26.3 特定于协议的套接字 440

26.3.2 PF_PACKET套接字 441

26.3.3 PF_NETLINK套接字 442

第六篇 第五层——应用层 446

第27章 涉及套接字的网络编程 446

27.1 简介 446

27.1.1 套接字的地址 446

27.1.2 一些套接字操作 447

27.2 套接字API函数 448

27.2.1 用于连接管理的函数 448

27.2.2 用于数据传输的函数 453

27.2.3 字节排序方法 454

27.2.4 用于处理Internet地址的函数 455

27.3 示例 456

第七篇 附录 458

附录A LXR源代码浏览器 458

A.1 功能 458

A.2 安装 461

附录B Linux内核中的调试 463

B.1 记录Linux内核输出 463

B.1.1 使用printk()创建日志输出 463

B.1.2 syslogd守护进程 464

B.1.3 使用console_print()进行直接输出 466

B.2 在内核中创建字符串 467

B.3 /PROC目录中的相关信息 469

B.4 用调试器调试Linux内核 473

附录C 用于网络操作的工具和命令 476

C.1 使用ifconfig以管理网络设备 476

C.2 使用ping以测试可抵达性 478

C.3 使用netstat以查看网络状态 479

C.4 使用route以处理路由信息 481

C.5 使用tcpdump以进行网络分析 482

C.6 使用traceroute以跟踪包 485

C.7 其他工具 487