前言 1
第一部分 基础背景第一章 简介 13
基本术语 13
常见编码模式 14
用户空间工具 28
浏览源代码 29
当功能以补丁形式提供时 30
第二章 关键数据结构 32
套接字缓冲区:sk_buff结构 32
net_device结构 53
本章涉及的文件 67
第三章 用户空间与内核的接口 68
概论 68
procfs与sysctl 70
ioctl 77
Netlink 80
配置改变串行化 81
第二部分 系统初始化第四章 通知链 85
使用通知链的原因 85
概论 87
定义链 88
链注册 88
链上的通知事件 89
网络子系统的通知链 91
通过/proc文件系统的调整 92
本章涉及的函数和变量 92
本章涉及的文件和目录 93
第五章 网络设备初始化 94
系统初始化概论 94
设备注册和初始化 96
NIC初始化的基本目标 96
设备与内核之间的交互 97
初始化选项 102
模块选项 103
设备处理层初始化:net_dev_init 104
用户空间辅助程序 106
虚拟设备 110
通过/proc文件系统调整 112
本章涉及的函数和变量 113
本章涉及的文件和目录 114
第六章 PCI层和网络接口卡 115
本章涉及的数据结构 115
PCI NIC设备驱动程序的注册 117
电源管理和网络唤醒 118
PCI NIC驱动程序注册范例 119
大蓝图 121
通过/proc文件系统调整 123
本章涉及的函数和变量 123
本章涉及的文件和目录 123
第七章 组件初始化的内核基础架构 124
引导期间的内核选项 124
模块初始化代码 130
优化宏卷标 133
引导期间初始化函数 136
内存最优化 138
通过/proc文件系统调整 142
本章涉及的函数和变量 142
本章涉及的文件和目录 143
第八章 设备注册和初始化 144
设备注册之时 145
设备除名之时 145
分配net_device结构 146
NIC注册和除名的架构 147
设备初始化 149
net_device结构的组织 153
设备状态 155
设备的注册和除名 157
设备注册 162
设备除名 164
开启和关闭网络设备 167
更新设备队列规则状态 169
从用户空间配置设备相关信息 174
虚拟设备 177
上锁 179
通过/proc文件系统调整 179
本章涉及的函数和变量 179
本章涉及的文件和目录 181
第三部分 传输和接收第九章 中断和网络驱动程序 185
决策和流量方向 186
接收到帧时通知驱动程序 186
中断处理函数 191
softnet_data结构 213
第十章 帧的接收 217
与其他功能交互 218
设备的开启和关闭 218
队列 219
通知内核帧已接收:NAPI和netif_rx 219
设备驱动程序与内核间的旧接口:netif_rx的第一部分 225
拥塞管理 231
处理NET_RX_SOFTIRQ:net_rx_action 234
第十一章 帧的传输 245
传输的开启和关闭 247
第十二章 中断事件一般性参考数据 267
统计数据 267
通过/proc和sysfs文件系统调整 268
本部分涉及的函数和变量 269
本部分涉及的文件和目录 271
第十三章 协议处理函数 272
网络协议栈概论 272
执行正确的协议处理函数 280
协议处理函数的组织 284
协议处理函数的注册 285
Ethernet与IEEE 802.3帧 287
通过/proc文件系统进行调整 299
本章涉及的函数和变量 299
本章涉及的文件和目录 300
第四部分 桥接第十四章 桥接:概念 303
中继器、网桥以及路由器 303
网桥与交换机 305
主机 306
用网桥合并LAN 306
桥接不同技术的LAN 307
地址学习 308
多台网桥 310
第十五章 桥接:生成树协议 316
基本术语 316
阶层交换式L2拓扑范例 318
生成树协议的基本元素 321
网桥ID和端口ID 326
网桥协议数据单元(BPDU) 328
定义活跃拓扑 332
定时器 340
拓扑变化 344
BPDU封装 350
传输配置BPDU 350
处理入口帧 352
收敛时间 354
新版生成树协议概况 355
第十六章桥接:Linux实现 360
网桥设备抽象 360
重要的数据结构 364
桥接程序的初始化 365
建立网桥设备和网桥端口 366
建立一个新网桥设备 367
网桥设备设置函数 368
删除网桥 369
给网桥添加端口 369
启动和关闭网桥设备 371
启动和关闭网桥端口 373
改变网桥端口状态 374
大蓝图 375
转发数据库 377
处理入口流量 380
网桥设备上的传输 383
生成树协议(STP) 385
netdevice通知链 394
第十七章 桥接:其他主题 395
用户空间配置工具 395
通过/proc文件系统调整网桥 400
通过/sys文件系统调整网桥 400
统计数据 402
本部分涉及的数据结构 402
本部分涉及的函数和变量 407
本部分涉及的文件和目录 409
第五部分 因特网协议第4版(IPv 4
第十八章 因特网协议第4版(IPv4):概念 413
IP协议:大蓝图 413
IP报头 415
IP选项 418
封包的分段/重组 424
校验和 435
第十九章 因特网协议第4版(IPv4):Linux的原理和功能 442
主要IPv4数据结构 442
封包的一般性处理 446
IP选项 456
第二十章 因特网协议第4版(IPv4):转发和本地传递 469
转发 469
本地传递 475
第二十一章 因特网协议第4版(IPv4):传输 476
进行传输的重要函数 477
衔接邻居子系统 512
第二十二章 因特网协议第4版(IPv4):处理分段 515
IP分段 516
IP重组 525
第二十三章 因特网协议第4版(IPv4):其他主题 539
长效IP端点信息 539
选择IP报头的ID字段 543
IP统计资料 544
IP配置 548
IP-over-IP 553
IPv4:问题出在哪儿? 553
通过/proc文件系统做调整 555
本部分涉及的数据结构 558
本部分涉及的函数和变量 568
本部分涉及的文件和目录 571
第二十四章 L4协议和Raw IP的处理 572
可用的L4协议 572
L4协议的注册 574
L3到L4的传递:ip_local_deliver_finish 577
IPv4 vs IPv6 585
通过/proc文件系统做调整 585
本章涉及的函数和变量 585
本章涉及的文件和目录 586
第二十五章 因特网控制消息协议(ICMPv4) 587
ICMP报头 588
ICMP有效载荷 589
ICMP类型 590
ICMP协议的应用程序 597
大蓝图 598
协议的初始化 602
本章涉及的数据结构 602
传输ICMP消息 605
接收ICMP消息 613
ICMP统计资料 619
把错误通知传给传输层 622
通过/proc文件系统调整 623
本章涉及的函数和变量 624
本章涉及的文件和目录 625
第六部分 邻居子系统第二十六章 邻居子系统:概念 629
邻居是什么? 629
需要邻居协议的原因 632
Linux实现 637
邻居协议代理 640
何时发送和处理Solicitation请求 643
邻居状态和网络不可到达性探测(NUD) 645
第二十七章 邻居子系统:基础结构 654
主要的数据结构 654
L3协议和邻居协议间的通用接口 658
邻居基础结构的一般任务 668
邻居结构的引用计数 673
创建一个邻居项 673
删除邻居 676
担任代理 682
L2帧头缓存 686
协议初始化和清理 690
与其他子系统的交互 691
邻居协议和L3传输函数的交互 695
排队 696
入口队列 698
第二十八章 邻居子系统:地址解析协议(ARP) 702
ARP封包格式 703
ARP事务范例 705
无端ARP 705
多个网络接口的应答 709
调整ARP选项 711
初始化ARP协议 718
初始化neighbour结构 720
传输和接收ARP封包 725
处理入口ARP封包 730
ARP代理 738
实例 743
外部事件 746
ARPD 747
逆向地址解析协议(RARP) 750
ND(IPv6)对ARP(IPv4)的改进 750
第二十九章 邻居子系统:其他问题 752
邻居的系统管理 752
使用/proc文件系统调整邻居性能 755
本部分涉及的数据结构 761
本部分涉及的文件和目录 778
第七部分 路由第三十章 路由:概念 781
路由器、路由与路由表 782
路由的基本元素 786
路由表 797
查找 801
封包接收与封包传输 803
第三十一章 路由:高级路由 806
策略路由背后的概念 806
多路径路由背后的概念 812
与其他内核子系统的交互 818
路由协议守护进程 822
Verbose监控 824
ICMP_REDIRECT消息 825
反向路径过滤 831
第三十二章 路由:Linux的实现 833
内核选项 833
主要的数据结构 836
路由scope与地址scope 841
主IP地址与辅助IP地址 843
常用的辅助程序与宏 844
全局锁 846
路由子系统初始化 847
外部事件 848
与其他子系统的交互 861
第三十三章 路由:路由缓存 864
路由缓存初始化 864
Hash表的组织 865
主要的缓存操作 866
多路径缓存 876
DST与调用协议间的接口 882
刷新路由缓存 888
垃圾回收 889
出口ICMP REDIRECT限速 900
第三十四章 路由:路由表 901
路由Hash表的组织 901
路由表初始化 907
路由的添加与删除 908
策略路由及其对路由表定义的影响 913
第三十五章 路由:查找 915
查找函数的高层概述 915
辅助函数 916
路由表查找:fn_hash_lookup 917
fib_lookup函数 922
为接收和发送设置函数 923
输入和输出路由函数的一般结构 926
输入路由 928
输出路由 936
多路径对下一跳选择的影响 945
策略路由 948
源路由 951
策略路由与基于路由表的分类器 952
第三十六章 路由:相关主题 956
用户空间配置工具 956
统计数据 962
通过/proc文件系统调整 963
开启和关闭转发 971
本书此部分中的数据结构功能 972
本部分涉及的函数和变量 992
本部分涉及的文件和目录 995