linux 好书在线版 网络内幕 (收藏)

Understanding Linux Network Internals

By Christian Benvenuti

...............................................

Publisher: O'Reilly

Pub Date: December 2005

ISBN: 0-596-00255-6

Pages: 1062

Table of Contents  | Index


Copyright


Preface


The Audience for This Book


Background Information


Organization of the Material


Conventions Used in This Book


Using Code Examples


We'd Like to Hear from You


Safari Enabled


Acknowledgments


Part I:  General Background


Chapter 1.  Introduction


Section 1.1.  Basic Terminology


Section 1.2.  Common Coding Patterns


Section 1.3.  User-Space Tools


Section 1.4.  Browsing the Source Code


Section 1.5.  When a Feature Is Offered as a Patch


Chapter 2.  Critical Data Structures


Section 2.1.  The Socket Buffer: sk_buff Structure


Section 2.2.  net_device Structure


Section 2.3.  Files Mentioned in This Chapter


Chapter 3.  User-Space-to-Kernel Interface


Section 3.1.  Overview


Section 3.2.  procfs Versus sysctl


Section 3.3.  ioctl


Section 3.4.  Netlink


Section 3.5.  Serializing Configuration Changes


Part II:  System Initialization


Chapter 4.  Notification Chains


Section 4.1.  Reasons for Notification Chains


Section 4.2.  Overview


Section 4.3.  Defining a Chain


Section 4.4.  Registering with a Chain


Section 4.5.  Notifying Events on a Chain


Section 4.6.  Notification Chains for the Networking Subsystems


Section 4.7.  Tuning via /proc Filesystem


Section 4.8.  Functions and Variables Featured in This Chapter


Section 4.9.  Files and Directories Featured in This Chapter


Chapter 5.  Network Device Initialization


Section 5.1.  System Initialization Overview


Section 5.2.  Device Registration and Initialization


Section 5.3.  Basic Goals of NIC Initialization


Section 5.4.  Interaction Between Devices and Kernel


Section 5.5.  Initialization Options


Section 5.6.  Module Options


Section 5.7.  Initializing the Device Handling Layer: net_dev_init


Section 5.8.  User-Space Helpers


Section 5.9.  Virtual Devices


Section 5.10.  Tuning via /proc Filesystem


Section 5.11.  Functions and Variables Featured in This Chapter


Section 5.12.  Files and Directories Featured in This Chapter


Chapter 6.  The PCI Layer and Network Interface Cards


Section 6.1.  Data Structures Featured in This Chapter


Section 6.2.  Registering a PCI NIC Device Driver


Section 6.3.  Power Management and Wake-on-LAN


Section 6.4.  Example of PCI NIC Driver Registration


Section 6.5.  The Big Picture


Section 6.6.  Tuning via /proc Filesystem


Section 6.7.  Functions and Variables Featured in This Chapter


Section 6.8.  Files and Directories Featured in This Chapter


Chapter 7.  Kernel Infrastructure for Component Initialization


Section 7.1.  Boot-Time Kernel Options


Section 7.2.  Module Initialization Code


Section 7.3.  Optimized Macro-Based Tagging


Section 7.4.  Boot-Time Initialization Routines


Section 7.5.  Memory Optimizations


Section 7.6.  Tuning via /proc Filesystem


Section 7.7.  Functions and Variables Featured in This Chapter


Section 7.8.  Files and Directories Featured in This Chapter


Chapter 8.  Device Registration and Initialization


Section 8.1.  When a Device Is Registered


Section 8.2.  When a Device Is Unregistered


Section 8.3.  Allocating net_device Structures


Section 8.4.  Skeleton of NIC Registration and Unregistration


Section 8.5.  Device Initialization


Section 8.6.  Organization of net_device Structures


Section 8.7.  Device State


Section 8.8.  Registering and Unregistering Devices


Section 8.9.  Device Registration


Section 8.10.  Device Unregistration


Section 8.11.  Enabling and Disabling a Network Device


Section 8.12.  Updating the Device Queuing Discipline State


Section 8.13.  Configuring Device-Related Information from User Space


Section 8.14.  Virtual Devices


Section 8.15.  Locking


Section 8.16.  Tuning via /proc Filesystem


Section 8.17.  Functions and Variables Featured in This Chapter


Section 8.18.  Files and Directories Featured in This Chapter


Part III:  Transmission and Reception


Chapter 9.  Interrupts and Network Drivers


Section 9.1.  Decisions and Traffic Direction


Section 9.2.  Notifying Drivers When Frames Are Received


Section 9.3.  Interrupt Handlers


Section 9.4.  softnet_data Structure


Chapter 10.  Frame Reception


Section 10.1.  Interactions with Other Features


Section 10.2.  Enabling and Disabling a Device


Section 10.3.  Queues


Section 10.4.  Notifying the Kernel of Frame Reception: NAPI and netif_rx


Section 10.5.  Old Interface Between Device Drivers and Kernel: First Part of netif_rx


Section 10.6.  Congestion Management


Section 10.7.  Processing the NET_RX_SOFTIRQ: net_rx_action


Chapter 11.  Frame Transmission


Section 11.1.  Enabling and Disabling Transmissions


Chapter 12.  General and Reference Material About Interrupts


Section 12.1.  Statistics


Section 12.2.  Tuning via /proc and sysfs Filesystems


Section 12.3.  Functions and Variables Featured in This Part of the Book


Section 12.4.  Files and Directories Featured in This Part of the Book


Chapter 13.  Protocol Handlers


Section 13.1.  Overview of Network Stack


Section 13.2.  Executing the Right Protocol Handler


Section 13.3.  Protocol Handler Organization


Section 13.4.  Protocol Handler Registration


Section 13.5.  Ethernet Versus IEEE 802.3 Frames


Section 13.6.  Tuning via /proc Filesystem


Section 13.7.  Functions and Variables Featured in This Chapter


Section 13.8.  Files and Directories Featured in This Chapter


Part IV:  Bridging


Chapter 14.  Bridging: Concepts


Section 14.1.  Repeaters, Bridges, and Routers


Section 14.2.  Bridges Versus Switches


Section 14.3.  Hosts


Section 14.4.  Merging LANs with Bridges


Section 14.5.  Bridging Different LAN Technologies


Section 14.6.  Address Learning


Section 14.7.  Multiple Bridges


Chapter 15.  Bridging: The Spanning Tree Protocol


Section 15.1.  Basic Terminology


Section 15.2.  Example of Hierarchical Switched L2 Topology


Section 15.3.  Basic Elements of the Spanning Tree Protocol


Section 15.4.  Bridge and Port IDs


Section 15.5.  Bridge Protocol Data Units (BPDUs)


Section 15.6.  Defining the Active Topology


Section 15.7.  Timers


Section 15.8.  Topology Changes


Section 15.9.  BPDU Encapsulation


Section 15.10.  Transmitting Configuration BPDUs


Section 15.11.  Processing Ingress Frames


Section 15.12.  Convergence Time


Section 15.13.  Overview of Newer Spanning Tree Protocols


Chapter 16.  Bridging: Linux Implementation


Section 16.1.  Bridge Device Abstraction


Section 16.2.  Important Data Structures


Section 16.3.  Initialization of Bridging Code


Section 16.4.  Creating Bridge Devices and Bridge Ports


Section 16.5.  Creating a New Bridge Device


Section 16.6.  Bridge Device Setup Routine


Section 16.7.  Deleting a Bridge


Section 16.8.  Adding Ports to a Bridge


Section 16.9.  Enabling and Disabling a Bridge Device


Section 16.10.  Enabling and Disabling a Bridge Port


Section 16.11.  Changing State on a Bridge Port


Section 16.12.  The Big Picture


Section 16.13.  Forwarding Database


Section 16.14.  Handling Ingress Traffic


Section 16.15.  Transmitting on a Bridge Device


Section 16.16.  Spanning Tree Protocol (STP)


Section 16.17.  netdevice Notification Chain


Chapter 17.  Bridging: Miscellaneous Topics


Section 17.1.  User-Space Configuration Tools


Section 17.2.  Tuning via /proc Filesystem


Section 17.3.  Tuning via /sys Filesystem


Section 17.4.  Statistics


Section 17.5.  Data Structures Featured in This Part of the Book


Section 17.6.  Functions and Variables Featured in This Part of the Book


Section 17.7.  Files and Directories Featured in This Part of the Book


Part V:  Internet Protocol Version 4 (IPv4)


Chapter 18.  Internet Protocol Version 4 (IPv4): Concepts


Section 18.1.  IP Protocol: The Big Picture


Section 18.2.  IP Header


Section 18.3.  IP Options


Section 18.4.  Packet Fragmentation/Defragmentation


Section 18.5.  Checksums


Chapter 19.  Internet Protocol Version 4 (IPv4): Linux Foundations and Features


Section 19.1.  Main IPv4 Data Structures


Section 19.2.  General Packet Handling


Section 19.3.  IP Options


Chapter 20.  Internet Protocol Version 4 (IPv4): Forwarding and Local Delivery


Section 20.1.  Forwarding


Section 20.2.  Local Delivery


Chapter 21.  Internet Protocol Version 4 (IPv4): Transmission


Section 21.1.  Key Functions That Perform Transmission


Section 21.2.  Interface to the Neighboring Subsystem


Chapter 22.  Internet Protocol Version 4 (IPv4): Handling Fragmentation


Section 22.1.  IP Fragmentation


Section 22.2.  IP Defragmentation


Chapter 23.  Internet Protocol Version 4 (IPv4): Miscellaneous Topics


Section 23.1.  Long-Living IP Peer Information


Section 23.2.  Selecting the IP Header's ID Field


Section 23.3.  IP Statistics


Section 23.4.  IP Configuration


Section 23.5.  IP-over-IP


Section 23.6.  IPv4: What's Wrong with It?


Section 23.7.  Tuning via /proc Filesystem


Section 23.8.  Data Structures Featured in This Part of the Book


Section 23.9.  Functions and Variables Featured in This Part of the Book


Section 23.10.  Files and Directories Featured in This Part of the Book


Chapter 24.  Layer Four Protocol and Raw IP Handling


Section 24.1.  Available L4 Protocols


Section 24.2.  L4 Protocol Registration


Section 24.3.  L3 to L4 Delivery: ip_local_deliver_finish


Section 24.4.  IPv4 Versus IPv6


Section 24.5.  Tuning via /proc Filesystem


Section 24.6.  Functions and Variables Featured in This Chapter


Section 24.7.  Files and Directories Featured in This Chapter


Chapter 25.  Internet Control Message Protocol (ICMPv4)


Section 25.1.  ICMP Header


Section 25.2.  ICMP Payload


Section 25.3.  ICMP Types


Section 25.4.  Applications of the ICMP Protocol


Section 25.5.  The Big Picture


Section 25.6.  Protocol Initialization


Section 25.7.  Data Structures Featured in This Chapter


Section 25.8.  Transmitting ICMP Messages


Section 25.9.  ICMP Statistics


Section 25.10.  Passing Error Notifications to the Transport Layer


Section 25.11.  Tuning via /proc Filesystem


Section 25.12.  Functions and Variables Featured in This Chapter


Section 25.13.  Files and Directories Featured in This Chapter


Part VI:  Neighboring Subsystem


Chapter 26.  Neighboring Subsystem: Concepts


Section 26.1.  What Is a Neighbor?


Section 26.2.  Reasons That Neighboring Protocols Are Needed


Section 26.3.  Linux Implementation


Section 26.4.  Proxying the Neighboring Protocol


Section 26.5.  When Solicitation Requests Are Transmitted and Processed


Section 26.6.  Neighbor States and Network Unreachability Detection (NUD)


Chapter 27.  Neighboring Subsystem: Infrastructure


Section 27.1.  Main Data Structures


Section 27.2.  Common Interface Between L3 Protocols and Neighboring Protocols


Section 27.3.  General Tasks of the Neighboring Infrastructure


Section 27.4.  Reference Counts on neighbour Structures


Section 27.5.  Creating a neighbour Entry


Section 27.6.  Neighbor Deletion


Section 27.7.  Acting As a Proxy


Section 27.8.  L2 Header Caching


Section 27.9.  Protocol Initialization and Cleanup


Section 27.10.  Interaction with Other Subsystems


Section 27.11.  Interaction Between Neighboring Protocols and L3 Transmission Functions


Section 27.12.  Queuing


Chapter 28.  Neighboring Subsystem: Address Resolution Protocol (ARP)


Section 28.1.  ARP Packet Format


Section 28.2.  Example of an ARP Transaction


Section 28.3.  Gratuitous ARP


Section 28.4.  Responding from Multiple Interfaces


Section 28.5.  Tunable ARP Options


Section 28.6.  ARP Protocol Initialization


Section 28.7.  Initialization of a neighbour Structure


Section 28.8.  Transmitting and Receiving ARP Packets


Section 28.9.  Processing Ingress ARP Packets


Section 28.10.  Proxy ARP


Section 28.11.  Examples


Section 28.12.  External Events


Section 28.13.  ARPD


Section 28.14.  Reverse Address Resolution Protocol (RARP)


Section 28.15.  Improvements in ND (IPv6) over ARP (IPv4)


Chapter 29.  Neighboring Subsystem: Miscellaneous Topics


Section 29.1.  System Administration of Neighbors


Section 29.2.  Tuning via /proc Filesystem


Section 29.3.  Data Structures Featured in This Part of the Book


Section 29.4.  Files and Directories Featured in This Part of the Book


Part VII:  Routing


Chapter 30.  Routing: Concepts


Section 30.1.  Routers, Routes, and Routing Tables


Section 30.2.  Essential Elements of Routing


Section 30.3.  Routing Table


Section 30.4.  Lookups


Section 30.5.  Packet Reception Versus Packet Transmission


Chapter 31.  Routing: Advanced


Section 31.1.  Concepts Behind Policy Routing


Section 31.2.  Concepts Behind Multipath Routing


Section 31.3.  Interactions with Other Kernel Subsystems


Section 31.4.  Routing Protocol Daemons


Section 31.5.  Verbose Monitoring


Section 31.6.  ICMP_REDIRECT Messages


Section 31.7.  Reverse Path Filtering


Chapter 32.  Routing: Li nux Implementation


Section 32.1.  Kernel Options


Section 32.2.  Main Data Structures


Section 32.3.  Route and Address Scopes


Section 32.4.  Primary and Secondary IP Addresses


Section 32.5.  Generic Helper Routines and Macros


Section 32.6.  Global Locks


Section 32.7.  Routing Subsystem Initialization


Section 32.8.  External Events


Section 32.9.  Interactions with Other Subsystems


Chapter 33.  Routing: The Routing Cache


Section 33.1.  Routing Cache Initialization


Section 33.2.  Hash Table Organization


Section 33.3.  Major Cache Operations


Section 33.4.  Multipath Caching


Section 33.5.  Interface Between the DST and Calling Protocols


Section 33.6.  Flushing the Routing Cache


Section 33.7.  Garbage Collection


Section 33.8.  Egress ICMP REDIRECT Rate Limiting


Chapter 34.  Routing: Routing Tables


Section 34.1.  Organization of Routing Hash Tables


Section 34.2.  Routing Table Initialization


Section 34.3.  Adding and Removing Routes


Section 34.4.  Policy Routing and Its Effects on Routing Table Definitions


Chapter 35.  Routing: Lookups


Section 35.1.  High-Level View of Lookup Functions


Section 35.2.  Helper Routines


Section 35.3.  The Table Lookup: fn_hash_lookup


Section 35.4.  fib_lookup Function


Section 35.5.  Setting Functions for Reception and Transmission


Section 35.6.  General Structure of the Input and Output Routing Routines


Section 35.7.  Input Routing


Section 35.8.  Output Routing


Section 35.9.  Effects of Multipath on Next Hop Selection


Section 35.10.  Policy Routing


Section 35.11.  Source Routing


Section 35.12.  Policy Routing and Routing Table Based Classifier


Chapter 36.  Routing: Miscellaneous Topics


Section 36.1.  User-Space Configuration Tools


Section 36.2.  Statistics


Section 36.3.  Tuning via /proc Filesystem


Section 36.4.  Enabling and Disabling Forwarding


Section 36.5.  Data Structures Featured in This Part of the Book


Section 36.6.  Functions and Variables Featured in This Part of the Book


Section 36.7.  Files and Directories Featured in This Part of the Book


About the Authors


Colophon


Index

posted @ 2011-12-31 17:15  os66  阅读(195)  评论(0编辑  收藏  举报