第1章 绪论

本书讨论Linux内核网络栈的实现及其原理,深入而详尽地分析网络子系统及其架构。为减轻读者压力,这里将不讨论在阅读内核网络栈源代码过程中可能遇到的但与网络没有直接关系的主题,如加锁与同步、SMP、原子操作等。有关这些主题的资料浩如烟海,然而,专门探讨内核网络的最新资料却少之又少。本书将重点讲解数据包在Linux内核网络栈中的传输过程,阐述其与网络各层及各子系统之间的交互,探讨各种网络协议的实现方法。

本书也不会不厌其烦地逐行解读代码,而将专注于各网络协议实现技术的精髓及其遵循的指导方针和原则。近年来的情况表明,Linux是一款成功、可靠、稳定而深受欢迎的操作系统,且受欢迎程度正稳步提升。Linux版本众多,有用于大型机、数据中心、核心路由器和Web服务器的版本,有用于无线路由器、机顶盒、医疗仪器、导航设备(如GPS设备)等嵌入式设备的版本,还有用于消费电子产品的版本。很多半导体厂商开发的板级支持包(Board Support Package,BSP)都基于Linux。Linux操作系统肇始于芬兰人Linus Torvalds于1991年开发的一个基于UNIX操作系统的项目。事实证明,它已成为一款严谨而可靠的操作系统,可与老牌专用操作系统相媲美。

Linux最初只是一款基于Intel x86的操作系统,现已移植到包括ARM、PowerPC、MIPS、SPARC等在内的各种处理器。Android操作系统是当前常见的平板电脑和智能手机操作系统,未来有望在智能电视领域大行其道,而这款操作系统正是基于Linux内核的。除Android操作系统外,Google还开发了一些内核网络功能。这些功能已纳入主流内核中。

Linux是个开源项目,因此相比于其他专用操作系统具有如下优势:遵照通用公共许可证(General Public License,GPL)条款,用户可免费获得其源代码。相对而言,其他开源操作系统(如各种类型的BSD)的普及程度则要低得多。这里有必要说说OpenSolaris项目。该项目基于通用开发与发布许可(Common Development and Distribution License,CDDL)协议,由Sun公司发起,但其受欢迎程度不可与Linux同日而语。在Linux开发大军中,有些人以公司的名义贡献代码,有些人自发地贡献代码。所有内核开发过程都可通过内核邮件列表获悉。Linux内核邮件列表(Linux Kernel Mailing List,LKML)为其核心邮件列表,很多子系统也都有专用的邮件列表。要贡献代码,可将补丁发送至相应的内核邮件列表及维护人员。这些补丁将通过邮件列表得到相关成员的讨论。

Linux内核网络栈是Linux内核中一个极其重要的子系统。在基于Linux的系统中,不使用任何网络功能的很少,无论是台式机、服务器、移动设备还是其他嵌入式设备都如此。即便在机器没有任何硬件网络设备这种极其罕见的情况下,在用户使用X-Windows时也将使用到网络功能(虽然用户没有意识到这一点),因为X-Windows本身就是基于客户端-服务器网络的。与Linux网络栈相关的项目很多,从核心路由器到小型嵌入式设备。其中,有些项目致力于添加厂商特定的功能。例如,有些硬件厂商在一些网络设备中实现了通用分段延后处理功能(Generic Segmentation Offload,GSO)。GSO是内核网络栈的一项网络功能,由内核网络栈在传输路径中将大型数据包划分成小型数据包。很多硬件厂商都在其网络设备硬件中实现了校验和功能。校验和是一种验证机制。它计算数据包的散列值并将其附加到数据包中,以核实数据包在传输过程中未受损。很多项目都对Linux做了安全改进。其中的一些改进要求对网络子系统进行修改。在第3章讨论项目Openwall GNU/*/Linux时,你将看到这一点。在嵌入式设备领域,很多无线路由器都基于Linux。例如,Linksys WRT54GL路由器运行的就是Linux。这种设备(以及其他设备)还可运行基于Linux的开源操作系统OpenWrt。这款操作系统拥有庞大而活跃的开发人员社区,其网址为https://openwrt.org/。要更深入地了解Linux内核网络栈,必须明白它是如何实现各种协议的,同时还要熟悉主要的数据结构以及数据包在其中的主要传输路径。

目录

  • 技术审阅
  • 前言
  • 致谢
  • 第1章 绪论
  • 1.1 Linux网络栈
  • 1.2 网络设备
  • 1.3 Linux内核网络开发模型
  • 1.4 总结
  • 第2章 Netlink套接字
  • 第3章 Internet控制消息协议(ICMP)
  • 第4章 IPv4
  • 第5章 IPv4路由选择子系统
  • 第6章 高级路由选择
  • 第7章 Linux邻接子系统
  • 第8章 IPv6
  • 第9章 Netfilter
  • 第10章 IPsec
  • 第11章 第4层协议
  • 第12章 无线子系统
  • 第13章 InfiniBand
  • 第14章 高级主题
  • 封底文字
  • 附录A Linux API
  • 附录B 网络管理
  • 附录C 术语表
  • 作者简介