Understanding Linux Network Internals (Paperback)
by Christian Benvenuti
Preface
Part I. General Background
1. Introduction
Basic Terminology
Common Coding Patterns
User-Space Tools
Browsing the Source Code
When a Feature Is Offered as a Patch
2. Critical Data Structures
The Socket Buffer: sk_buff Structure
net_device Structure
Files Mentioned in This Chapter
3. User-Space-to-Kernel Interface
Overview
procfs Versus sysctl
ioctl
Netlink
Serializing Configuration Changes
Part II. System Initialization
4. Notification Chains
Reasons for Notification Chains
Overview
Defining a Chain
Registering with a Chain
Notifying Events on a Chain
Notification Chains for the Networking Subsystems
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
5. Network Device Initialization
System Initialization Overview
Device Registration and Initialization
Basic Goals of NIC Initialization
Interaction Between Devices and Kernel
Initialization Options
Module Options
Initializing the Device Handling Layer: net_dev_init
User-Space Helpers
Virtual Devices
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
6. The PCI Layer and Network Interface Cards
Data Structures Featured in This Chapter
Registering a PCI NIC Device Driver
Power Management and Wake-on-LAN
Example of PCI NIC Driver Registration
The Big Picture
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
7. Kernel Infrastructure for Component Initialization
Boot-Time Kernel Options
Module Initialization Code
Optimized Macro-Based Tagging
Boot-Time Initialization Routines
Memory Optimizations
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
8. Device Registration and Initialization
When a Device Is Registered
When a Device Is Unregistered
Allocating net_device Structures
Skeleton of NIC Registration and Unregistration
Device Initialization
Organization of net_device Structures
Device State
Registering and Unregistering Devices
Device Registration
Device Unregistration
Enabling and Disabling a Network Device
Updating the Device Queuing Discipline State
Configuring Device-Related Information from User Space
Virtual Devices
Locking
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
Part III. Transmission and Reception
9. Interrupts and Network Drivers
Decisions and Traffic Direction
Notifying Drivers When Frames Are Received
Interrupt Handlers
softnet_data Structure
10. Frame Reception
Interactions with Other Features
Enabling and Disabling a Device
Queues
Notifying the Kernel of Frame Reception: NAPI and netif_rx
Old Interface Between Device Drivers and Kernel: First Part of netif_rx
Congestion Management
Processing the NET_RX_SOFTIRQ: net_rx_action
11. Frame Transmission
Enabling and Disabling Transmissions
12. General and Reference Material About Interrupts
Statistics
Tuning via /proc and sysfs Filesystems
Functions and Variables Featured in This Part of the Book
Files and Directories Featured in This Part of the Book
13. Protocol Handlers
Overview of Network Stack
Executing the Right Protocol Handler
Protocol Handler Organization
Protocol Handler Registration
Ethernet Versus IEEE 802.3 Frames
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
Part IV. Bridging
14. Bridging: Concepts
Repeaters, Bridges, and Routers
Bridges Versus Switches
Hosts
Merging LANs with Bridges
Bridging Different LAN Technologies
Address Learning
Multiple Bridges
15. Bridging: The Spanning Tree Protocol
Basic Terminology
Example of Hierarchical Switched L2 Topology
Basic Elements of the Spanning Tree Protocol
Bridge and Port IDs
Bridge Protocol Data Units (BPDUs)
Defining the Active Topology
Timers
Topology Changes
BPDU Encapsulation
Transmitting Configuration BPDUs
Processing Ingress Frames
Convergence Time
Overview of Newer Spanning Tree Protocols
16. Bridging: Linux Implementation
Bridge Device Abstraction
Important Data Structures
Initialization of Bridging Code
Creating Bridge Devices and Bridge Ports
Creating a New Bridge Device
Bridge Device Setup Routine
Deleting a Bridge
Adding Ports to a Bridge
Enabling and Disabling a Bridge Device
Enabling and Disabling a Bridge Port
Changing State on a Bridge Port
The Big Picture
Forwarding Database
Handling Ingress Traffic
Transmitting on a Bridge Device
Spanning Tree Protocol (STP)
netdevice Notification Chain
17. Bridging: Miscellaneous Topics
User-Space Configuration Tools
Tuning via /proc Filesystem
Tuning via /sys Filesystem
Statistics
Data Structures Featured in This Part of the Book
Functions and Variables Featured in This Part of the Book
Files and Directories Featured in This Part of the Book
Part V. Internet Protocol Version 4 (IPv4)
18. Internet Protocol Version 4 (IPv4): Concepts
IP Protocol: The Big Picture
IP Header
IP Options
Packet Fragmentation/Defragmentation
Checksums
19. Internet Protocol Version 4 (IPv4): Linux Foundations and Features
Main IPv4 Data Structures
General Packet Handling
IP Options
20. Internet Protocol Version 4 (IPv4): Forwarding and Local Delivery
Forwarding
Local Delivery
21. Internet Protocol Version 4 (IPv4): Transmission
Key Functions That Perform Transmission
Interface to the Neighboring Subsystem
22. Internet Protocol Version 4 (IPv4): Handling Fragmentation
IP Fragmentation
IP Defragmentation
23. Internet Protocol Version 4 (IPv4): Miscellaneous Topics
Long-Living IP Peer Information
Selecting the IP Header's ID Field
IP Statistics
IP Configuration
IP-over-IP
IPv4: What's Wrong with It?
Tuning via /proc Filesystem
Data Structures Featured in This Part of the Book
Functions and Variables Featured in This Part of the Book
Files and Directories Featured in This Part of the Book
24. Layer Four Protocol and Raw IP Handling
Available L4 Protocols
L4 Protocol Registration
L3 to L4 Delivery: ip_local_deliver_finish
IPv4 Versus IPv6
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
25. Internet Control Message Protocol (ICMPv4)
ICMP Header
ICMP Payload
ICMP Types
Applications of the ICMP Protocol
The Big Picture
Protocol Initialization
Data Structures Featured in This Chapter
Transmitting ICMP Messages
Receiving ICMP Messages
ICMP Statistics
Passing Error Notifications to the Transport Layer
Tuning via /proc Filesystem
Functions and Variables Featured in This Chapter
Files and Directories Featured in This Chapter
Part VI. Neighboring Subsystem
26. Neighboring Subsystem: Concepts
What Is a Neighbor?
Reasons That Neighboring Protocols Are Needed
Linux Implementation
Proxying the Neighboring Protocol
When Solicitation Requests Are Transmitted and Processed
Neighbor States and Network Unreachability Detection (NUD)
27. Neighboring Subsystem: Infrastructure
Main Data Structures
Common Interface Between L3 Protocols and Neighboring Protocols
General Tasks of the Neighboring Infrastructure
Reference Counts on neighbour Structures
Creating a neighbour Entry
Neighbor Deletion
Acting As a Proxy
L2 Header Caching
Protocol Initialization and Cleanup
Interaction with Other Subsystems
Interaction Between Neighboring Protocols and L3 Transmission Functions
Queuing
28. Neighboring Subsystem: Address Resolution Protocol (ARP)
ARP Packet Format
Example of an ARP Transaction
Gratuitous ARP
Responding from Multiple Interfaces
Tunable ARP Options
ARP Protocol Initialization
Initialization of a neighbour Structure
Transmitting and Receiving ARP Packets
Processing Ingress ARP Packets
Proxy ARP
Examples
External Events
ARPD
Reverse Address Resolution Protocol (RARP)
Improvements in ND (IPv6) over ARP (IPv4)
29. Neighboring Subsystem: Miscellaneous Topics
System Administration of Neighbors
Tuning via /proc Filesystem
Data Structures Featured in This Part of the Book
Files and Directories Featured in This Part of the Book
Part VII. Routing
30. Routing: Concepts
Routers, Routes, and Routing Tables
Essential Elements of Routing
Routing Table
Lookups
Packet Reception Versus Packet Transmission
31. Routing: Advanced
Concepts Behind Policy Routing
Concepts Behind Multipath Routing
Interactions with Other Kernel Subsystems
Routing Protocol Daemons
Verbose Monitoring
ICMP_REDIRECT Messages
Reverse Path Filtering
32. Routing: Linux Implementation
Kernel Options
Main Data Structures
Route and Address Scopes
Primary and Secondary IP Addresses
Generic Helper Routines and Macros
Global Locks
Routing Subsystem Initialization
External Events
Interactions with Other Subsystems
33. Routing: The Routing Cache
Routing Cache Initialization
Hash Table Organization
Major Cache Operations
Multipath Caching
Interface Between the DST and Calling Protocols
Flushing the Routing Cache
Garbage Collection
Egress ICMP REDIRECT Rate Limiting
34. Routing: Routing Tables
Organization of Routing Hash Tables
Routing Table Initialization
Adding and Removing Routes
Policy Routing and Its Effects on Routing Table Definitions
35. Routing: Lookups
High-Level View of Lookup Functions
Helper Routines
The Table Lookup: fn_hash_lookup
fib_lookup Function
Setting Functions for Reception and Transmission
General Structure of the Input and Output Routing Routines
Input Routing
Output Routing
Effects of Multipath on Next Hop Selection
Policy Routing
Source Routing
Policy Routing and Routing Table Based Classifier
36. Routing: Miscellaneous Topics
User-Space Configuration Tools
Statistics
Tuning via /proc Filesystem
Enabling and Disabling Forwarding
Data Structures Featured in This Part of the Book
Functions and Variables Featured in This Part of the Book
Files and Directories Featured in This Part of the Book
Index
xiadao_81 于 2010-01-31 15:43:35发表:
目录
版权说明
序言
本书适用读者
背景信息
资源组织
本书约定
用到的代码例子
意见反馈
启用Safari?
知识点
第一部分: 通用背景
第一章。 介绍
1.1 基本术语
1.2 通用代码形式
1.3 用户空间工具
1.4 浏览源代码
1.5 什么时候应用补丁
第二章。 关键的数据结构
2.1 套接字缓冲: sk_buff结构
2.2 net_device结构
2.3 本章提到的文件
第三章。 用户空间到内核的接口
3.1 概述
3.2 procfs和sysctl
3.3 ioctl
3.4 Netlink
3.5 抓住配置变化
第二部分: 系统初始化
第四章。 通知链表
4.1 使用通知链表的理由
4.2 概述
4.3 定义一个链表
4.4 在链表中定义通知事件
4.5 在链表中通知事件
4.6 为网络子系统的通知链表
4.7 借助/proc文件系统的通道
4.8 本章涉及的函数和变量
4.9 本章涉及的文件和文件夹
第五章。 系统初始化概述
5.1 系统初始化概述
5.2 设备注释和初始化
5.3 网卡(NIC)初始化的目的
5.4 设备和内核的互动
5.5 初始化配置
5.6 模块配置
5.7 初始化设备处理层:net_dev_init
5.8 用户空间助手
5.9 虚拟设备
5.10 借助/proc文件系统的通道
5.11 本章涉及的函数和变量
5.12 本章涉及的文件和文件夹
第六章。 PCI层和网卡
6.1 本章所用到的数据结构
6.2 注册一个PCI的网卡设备驱动
6.3 电源管理和局域网唤醒
6.4 PCI网卡注册实例
6.5 大图
6.6 通过/proc文件系统的通道
6.7 本章所提到的函数和变量
6.8 本章所提到的文件和文件夹
第七章。 组件初始化的内核基础
7.1 启动时的内核设置
7.2 模块初始化代码
7.3 优化的宏标记
7.4 启动时的初始化路径
7.5 内存优化
7.6 通过/proc文件系统的通道
7.7 本章用到的函数和变量
7.8 本章用到的文件和文件夹
第八章。 设备注册和初始化
8.1 当一个设备被注册
8.2 当一个设备被注销
8.3 分配net_device结构
8.4 网卡注册和注销的基本框架
8.5 设备初始化
8.6 net_device结构的组织
8.7 设备状态
8.8 注册和注销设备
8.9 设备注册
8.10 设备注销
8.11 启用和禁用网络设备
8.12 更新设备队列状态
8.13 在用户空间配置设备相关的信息
8.14 虚拟设备
8.15 锁定
8.16 通过/pro文件系统的通道
8.17 本章用到的函数和变量
8.18 本章用到的文件和文件夹
第三部分: 发送和接收
第九章。 中断和网络设备
9.1 决定和传送方向
9.2 接收时通知驱动
9.3 中断处理
9.4 sotfnet数据结构
第十章。 接收框架
10.1 和其它特点的相互作用
10.2 启用和禁用设备
10.3 队列
10.4 通知内核接收的框架:NAPI和netif_rx
10.5 在设备驱动和内核之间的老的接口: netif_rx的第一部分
10.6 阻塞管理
10.7 处理NET_RX_SOFTIRQ的方式:net_rx_action
第11章。 发送框架
11.1 启用和禁用传输
第12章。 关于中断的一般的和指导性的资源
12.1 统计数字
12.2 通过/proc和sysfs文件系统的管道
12.3 本书中这部分用到的函数和变量
12.4 本书中这部分用到的文件和文件夹
第13章。 协议处理
13.1 网络栈的概述
13.2 执行正确的栈处理句柄
13.3 协议句柄阻止
13.4 协议句柄注册
13.5 以太网对应IEEE802.3帧结构
13.6 通过/proc文件的系统的管道
13.7 本章提到的函数和变量
13.8 本章提到的文件和目录
第四部分: 桥接
第14章。 桥接:概念
14.1 中继器,桥接器,路由器
14.2 桥接器和交换机
14.3 主机
14.4 通过桥接合并局域网(LAN)
14.5 桥接不同的局域网技术
14.6 地址学习
14.7 多个桥接
第15章 桥接:分割的树协议
15.1 基本术语
15.2 二层交换层拓扑的例子
15.3 分割的树协议的基本元素
15.4 桥接和端口号
15.5 桥接协议数据单元(BPDUs)
15.6 定义活动拓扑图
15.7 计时器
15.8 拓扑变化
15.9 BPDU封装
15.10 传输配置BPDU
15.11 处理进入帧
15.12 会聚时间
15.13 更新的分割树协议的概述
第16章 桥接:Linux应用
16.1 桥接设备抽象
16.2 重要的数据结构
16.3 桥接代码的初始化
16.4 生成桥接设备和桥接端口
16.5 生成一个心得桥接设备
16.6 桥接设备设置途径
16.7 删除一个桥接
16.8 在桥接上增加一个端口
16.9 启用和禁用桥接设备
16.10 启用和禁用桥接端口
16.11 在一个桥接端口改变状态
16.12 大的图例
16.13 转发数据库
16.14 处理进入的交流数据
16.15 在桥接设备上的传送
16.16 分割的树协议(STP)
16.17 网络设备通知链
第17章 桥接:各种主题
17.1 用户空间配置工具
17.2 通过/proc文件系统调整
17.3 通过/sys文件系统调整
17.4 统计数据
17.5 在本书这部分用到的数据结构
17.6 在本书的这部分用到的函数和变量
17.7 在本书这部分用到的文件和文件夹
第五部分: 第四版网络协议(IPv4)
第18章. 第四版网络协议:概念
18.1 Ip协议:大的框架
18.2 IP头
18.3 IP选项
18.4 包分解/反分解
18.5 检验和
第19章. 网络协议第四版: Linux基础和特性
19.1 主要的IPv4的数据结构
19.2 通用的包处理
19.3 IP配置
第20章. 网络协议第四版: 转发和本地发送
20.1 转发
20.2 本地发送
第21章. 网络协议第四版: 传送
21.1 执行传送的关键函数
21.2 到邻近子系统的接口
第22章. 网络协议第四版: 处理分解
22.1 IP 包分解
22.2 IP 包反分解
第23章. 网络协议第四版: 各种主题
23.1 长生命期的IP终端信息
23.2 选择IP头的ID 域
23.3 IP统计信息
23.4 IP配置
23.5 IP 到 IP
23.6 Ipv4:有什么缺点?
23.7 通过/proc文件系统调整
23.8 在本书这部分用到的数据结构
23.9 在本书的这部分用到的函数和变量
23.10 在本书的这部分用到的文件和文件夹
第24章. 四层协议和写后读(raw)IP 处理
24.1 可用的四层协议
24.2 四层协议注册
24.3 三层到四层的传送: ip_local_deliver_finish
24.4 第四版网络协议对比第六版网络协议
24.5 通过/proc文件系统调整
24.6 在本书的这部分用到的函数和变量
24.7 在本书的这部分用到的文件和文件夹
第25章. 因特网控制消息协议(ICMP 第四版)
25.1 ICMP头结构
25.2 ICMP 有效负载
25.3 ICMP 类型
25.4 ICMP 协议的应用
25.5 大的框架
25.6 协议初始化
25.7 在本书这部分用到的数据结构
25.8 传输ICMP消息
25.9 ICMP统计信息
25.10 传递错误通知给传输层
25.11 通过/proc文件系统调整
25.12 在本书的这部分用到的函数和变量
25.13 在本书的这部分用到的文件和文件夹
第六部分: 网上邻居子系统
第26章. 网上邻居子系统: 概念
26.1 什么是网上邻居?
26.2 需要网上邻居协议的理由
26.3 Linux应用
26.4 代理网上邻居协议
26.5 何时请求被传送和处理
26.6 网上邻居状态和网络不可到达监测(NUD)
第27章 网上邻居子系统:基础
27.1 主要的数据结构
27.2 在三层协议和网上邻居协议之间的通用接口
27.3 网上邻居基础的通常任务
27.4 依靠网上邻居结构的参考
27.5 生成一个网上邻居的入口
27.6 网上邻居删除
27.7 如同一个代理一样操作
27.8 2层头缓存
27.9 协议初始化和清除
27.10 和其它子系统的交互
27.11 在网上邻居协议和三层传输函数之间的交互
27.12 队列
第28章 网上邻居子系统:地址解析协议(ARP)
28.1 ARP包格式
28.2 ARP传输的例子
28.3 无根据的ARP
28.4 响应多个接口
28.5 可调的ARP设置
28.6 ARP协议初始化
28.7 网上邻居结构的初始化
28.8. 发送和接收ARP包
28.9 处理进入的ARP包
28.10. 代理的ARP
28.11 例子
28.12 外部事件
28.13 ARPD
28.14 反解ARP协议(RARP)
28.15 在网络协议版本6中使用的ND比在网络协议版本4中使用的ARP提高的地方
第29章 网上邻居子系统:其它的主题
29.1 网上邻居的系统管理
29.2 通过/proc文件系统调整
29.3. 在本书这部分用到的数据结构
29.4 在本书的这部分用到的文件和文件夹
第七部分: 路由
第30章 路由:概念
30.1 路由器,路由和路由表
30.2 路由的必要元素
30.3 路由表
30.4 查询
30.5 包接收对比包发送
第31章 路由:进一步讨论
31.1 路由策略背后的概念
31.2 多路由背后的概念
31.3 和其它内核子系统的交互
31.4 路由协议的守护进程
31.5 冗长的监测
31.6 ICMP_REDIRECT消息
31.7 反转路径过滤
第32章 路由:Linux应用
32.1 内核设置
32.2 主要的数据结构
32.3 路由和地址范围
32.4 首选和备选IP地址
32.5 通用的常规和宏
32.6 全局锁
32.7 路由子系统的初始化
32.8 外部事件
32.9 和其它子系统的交互
第33章 路由:路由缓存
33.1 路由缓存初始化
33.2 Hash表组织
33.3 主要的缓存操作
33.4 多路径缓存
33.5 在DST和呼叫协议的接口
33.6 清除路由表
33.7 垃圾回收
33.8 外出的ICMP_REDIRET速率限制
第34章 路由:路由表
34.1 路由Hash表的组织
34.2 路由表初始化
34.3 增加和删除路由
34.4 路由策略和它在路由表定义的影响
第35章 路由:检索
35.1 检索功能的高级查询
35.2 协助路由
35.3 表查询:fn_hash_lookup
35.4 fib_lookup函数
35.5 接收和发送的设置函数
35.6 输入和输出路由规定的通用结构
35.7 输入路由
35.8 输出路由
35.9 在下一跳选择中多路径的影响
35.10 路由策略
35.11 路由源
35.12 路由策略和基于分级的路由表
第36章 路由:各种其它的主题
36.1 用户空间配置工具
36.2 统计数据
36.3 通过/proc文件系统调整
36.4 启用和禁用转发
36.5 在本书这部分用到的数据结构
36.6. 在本书的这部分用到的函数和变量
36.7 在本书的这部分用到的文件和文件夹
关于作者
后记
索引
shenqiulo 于 2007-09-26 08:22:23发表:
请问大家这个是干吗用的?
eagle-j 于 2007-01-27 23:35:29发表:
我有,过两天上传给你,我不在家。
To hfh08
btw:This area has downloading to be allowed under the search, but requests with you not one
偶英语不好,什么意思??
doonadal 于 2007-01-23 18:43:53发表:
顶,我要下一个
imlearning 于 2006-09-07 10:53:33发表:
hfh08 于 2006-09-06 15:32:23发表:
This area has downloading to be allowed under the search, but requests with you not one