大多数 Linux 发行版都随附启动盘,这些启动盘适用于所有常见的 PC 硬件类型。 通常,提供的内核是高度模块化的,并且包含几乎所有可能的驱动程序。 这对于启动盘来说是个好主意,但可能不是您长期使用的理想选择。 让您永远不会使用的驱动程序占用磁盘空间是没有意义的。 因此,您通常会自行构建内核,并且只包含您实际需要或想要的驱动程序; 这样可以节省一些磁盘空间并减少编译新内核所需的时间。
在任何情况下,在运行 Linux 系统时,您都应该熟悉构建内核。 将其视为一种成人仪式,是对自由软件强大力量的肯定——您拥有源代码。 这不是“我必须编译内核”的情况,而是“我可以编译内核”的情况。 Matt Welsh 的著作Running Linux(O'Reilly)中解释了编译 Linux 内核的基础知识。 因此,在本节中,我们将仅讨论影响网络的配置选项。
这里需要重复强调的一个重要点是内核版本编号方案的工作方式。 Linux 内核的版本号格式如下2.2.14。 第一个数字表示主版本号。 当内核设计发生重大而显着的变化时,此数字会发生变化。 例如,当内核获得对 Intel 机器以外的机器的支持时,内核从主版本 1 更改为 2。 第二个数字是次要版本号。 在许多方面,这个数字是最重要的数字。 Linux 开发社区采用了一个标准,其中偶数次要版本号表示生产或稳定内核,而奇数次要版本号表示开发或不稳定内核。 稳定内核是您应该在对您重要的机器上使用的内核,因为它们已经过更彻底的测试。 开发内核是如果您有兴趣尝试 Linux 的最新功能时应该使用的内核,但它们可能存在尚未发现和修复的问题。 第三个数字只是针对次要版本的每个版本递增。[1]
当运行 make menuconfig 时,您会看到一个基于文本的菜单,其中提供了配置问题列表,例如您是否想要内核数学仿真。 其中一个查询会询问您是否想要 TCP/IP 网络支持。 您必须使用以下内容回答此问题y以获得能够进行联网的内核。
在完成常规选项部分后,配置将继续询问您是否要包含对各种功能的支持,例如 SCSI 驱动程序或声卡。 提示将指示可用的选项。 您可以按?以获得对该选项实际提供的功能的描述。 您始终可以选择是 (y) 以静态方式将组件包含在内核中,或否 (n) 以完全排除该组件。 您还将看到模块 (m) 选项,用于那些可以编译为运行时可加载模块的组件。 模块需要在使用前加载,并且对于您不经常使用的组件的驱动程序很有用。
随后的问题列表涉及网络支持。 由于正在进行的开发,确切的配置选项集不断变化。 大约 2.0 和 2.1 的大多数内核版本提供的典型选项列表如下所示
* * Network device support * Network device support (CONFIG_NETDEVICES) [Y/n/?] |
您必须使用以下内容回答此问题y如果您想使用任何类型的网络设备,无论是以太网、SLIP、PPP 还是其他任何设备。 当您使用以下内容回答问题时y,将自动启用对以太网类型设备的支持。 如果您想启用对其他类型的网络驱动程序的支持,则必须回答其他问题
PLIP (parallel port) support (CONFIG_PLIP) [N/y/m/?] y PPP (point-to-point) support (CONFIG_PPP) [N/y/m/?] y * * CCP compressors for PPP are only built as modules. * SLIP (serial line) support (CONFIG_SLIP) [N/y/m/?] m CSLIP compressed headers (CONFIG_SLIP_COMPRESSED) [N/y/?] (NEW) y Keepalive and linefill (CONFIG_SLIP_SMART) [N/y/?] (NEW) y Six bit SLIP encapsulation (CONFIG_SLIP_MODE_SLIP6) [N/y/?] (NEW) y |
这些问题涉及 Linux 支持的各种链路层协议。 PPP 和 SLIP 都允许您通过串行线路传输 IP 数据报。 PPP 实际上是一套用于通过串行线路发送网络流量的协议。 构成 PPP 的某些协议管理您向拨入服务器进行身份验证的方式,而其他协议管理某些协议通过链路传输的方式——PPP 不仅限于传输 TCP/IP 数据报; 它还可以传输其他协议,例如 IPX。
如果您回答y或m来支持 SLIP,系统将提示您回答下面出现的三个问题。 压缩标头选项提供对 CSLIP 的支持,这是一种将 TCP/IP 标头压缩到最少三个字节的技术。 请注意,此内核选项不会自动启用 CSLIP; 它仅为其提供必要的内核功能。Keepalive 和 linefill选项使 SLIP 支持定期在 SLIP 线路上生成活动,以避免因不活动计时器而将其丢弃。六位 SLIP 封装选项允许您在无法干净地传输整个 8 位数据集的线路和电路上运行 SLIP。 这类似于用于通过电子邮件发送二进制文件的 uuencoding 或 binhex 技术。
PLIP 提供了一种通过并行端口连接发送 IP 数据报的方法。 它主要用于与运行 DOS 的 PC 通信。 在典型的 PC 硬件上,PLIP 可能比 PPP 或 SLIP 更快,但它需要更多的 CPU 开销才能执行,因此虽然传输速率可能很好,但机器上的其他任务可能会很慢。
以下问题涉及来自不同供应商的网卡。 随着更多驱动程序的开发,您可能会看到添加到此部分的问题。 如果您想构建一个可以在多台不同机器上使用的内核,或者如果您的机器安装了多种类型的网卡,则可以启用多个驱动程序
. . Ethernet (10 or 100Mbit) (CONFIG_NET_ETHERNET) [Y/n/?] 3COM cards (CONFIG_NET_VENDOR_3COM) [Y/n/?] 3c501 support (CONFIG_EL1) [N/y/m/?] 3c503 support (CONFIG_EL2) [N/y/m/?] 3c509/3c579 support (CONFIG_EL3) [Y/m/n/?] 3c590/3c900 series (592/595/597/900/905) "Vortex/Boomerang" support/ (CONFIG_VORTEX) [N/y/m/?] AMD LANCE and PCnet (AT1500 and NE2100) support (CONFIG_LANCE) [N/y/?] AMD PCInet32 (VLB and PCI) support (CONFIG_LANCE32) [N/y/?] (NEW) Western Digital/SMC cards (CONFIG_NET_VENDOR_SMC) [N/y/?] WD80*3 support (CONFIG_WD80x3) [N/y/m/?] (NEW) SMC Ultra support (CONFIG_ULTRA) [N/y/m/?] (NEW) SMC Ultra32 support (CONFIG_ULTRA32) [N/y/m/?] (NEW) SMC 9194 support (CONFIG_SMC9194) [N/y/m/?] (NEW) Other ISA cards (CONFIG_NET_ISA) [N/y/?] Cabletron E21xx support (CONFIG_E2100) [N/y/m/?] (NEW) DEPCA, DE10x, DE200, DE201, DE202, DE422 support (CONFIG_DEPCA) [N/y/m/?]/ (NEW) EtherWORKS 3 (DE203, DE204, DE205) support (CONFIG_EWRK3) [N/y/m/?] (NEW) EtherExpress 16 support (CONFIG_EEXPRESS) [N/y/m/?] (NEW) HP PCLAN+ (27247B and 27252A) support (CONFIG_HPLAN_PLUS) [N/y/m/?] (NEW) HP PCLAN (27245 and other 27xxx series) support (CONFIG_HPLAN) [N/y/m/?]/ (NEW) HP 10/100VG PCLAN (ISA, EISA, PCI) support (CONFIG_HP100) [N/y/m/?] (NEW) NE2000/NE1000 support (CONFIG_NE2000) [N/y/m/?] (NEW) SK_G16 support (CONFIG_SK_G16) [N/y/?] (NEW) EISA, VLB, PCI and on card controllers (CONFIG_NET_EISA) [N/y/?] Apricot Xen-II on card ethernet (CONFIG_APRICOT) [N/y/m/?] (NEW) Intel EtherExpress/Pro 100B support (CONFIG_EEXPRESS_PRO100B) [N/y/m/?]/ (NEW) DE425, DE434, DE435, DE450, DE500 support (CONFIG_DE4X5) [N/y/m/?] (NEW) DECchip Tulip (dc21x4x) PCI support (CONFIG_DEC_ELCP) [N/y/m/?] (NEW) Digi Intl. RightSwitch SE-X support (CONFIG_DGRS) [N/y/m/?] (NEW) Pocket and portable adaptors (CONFIG_NET_POCKET) [N/y/?] AT-LAN-TEC/RealTek pocket adaptor support (CONFIG_ATP) [N/y/?] (NEW) D-Link DE600 pocket adaptor support (CONFIG_DE600) [N/y/m/?] (NEW) D-Link DE620 pocket adaptor support (CONFIG_DE620) [N/y/m/?] (NEW) Token Ring driver support (CONFIG_TR) [N/y/?] IBM Tropic chipset based adaptor support (CONFIG_IBMTR) [N/y/m/?] (NEW) FDDI driver support (CONFIG_FDDI) [N/y/?] Digital DEFEA and DEFPA adapter support (CONFIG_DEFXX) [N/y/?] (NEW) ARCnet support (CONFIG_ARCNET) [N/y/m/?] Enable arc0e (ARCnet "Ether-Encap" packet format) (CONFIG_ARCNET_ETH)/ [N/y/?] (NEW) Enable arc0s (ARCnet RFC1051 packet format) (CONFIG_ARCNET_1051)/ [N/y/?] (NEW) . . |
最后,在文件系统部分,配置脚本会询问您是否需要支持 NFS,即网络文件系统。 NFS 允许您将文件系统导出到多台主机,这使得文件看起来好像位于连接到主机的普通硬盘上
NFS file system support (CONFIG_NFS_FS) [y] |
Linux 2.0.0 标志着 Linux 网络发生了重大变化。 许多功能已成为内核的标准部分,例如对 IPX 的支持。 还添加了许多选项并使其可配置。 这些选项中的许多选项仅在非常特殊的情况下使用,我们不会详细介绍它们。 Networking HOWTO 可能解决了此处未涵盖的内容。 我们将在本节中列出一些有用的选项,并解释您何时需要使用每个选项
要使用 TCP/IP 网络,您必须使用以下内容回答此问题y。n,但是,您仍然能够编译具有 IPX 支持的内核
Networking options ---> [*] TCP/IP networking |
如果您的系统充当两个网络之间或 LAN 和 SLIP 链路等之间的网关,则必须启用此选项。 默认情况下启用此选项没有坏处,但您可能希望禁用它以将主机配置为所谓的防火墙。 防火墙是连接到两个或多个网络的主机,但不路由它们之间的流量。 它们通常用于为用户提供 Internet 访问,同时最大限度地降低内部网络的风险。 允许用户登录防火墙并使用 Internet 服务,但公司的机器受到外部攻击的保护,因为传入连接无法穿过防火墙(防火墙在第 9 章 中详细介绍)
[*] IP: forwarding/gatewaying |
这些选项共同允许您在一个接口上配置多个 IP 地址。 如果您想进行“虚拟主机”,这有时很有用,通过虚拟主机,可以将一台机器配置为看起来和表现得好像它实际上是许多独立的机器,每台机器都有自己的网络特性。 我们稍后将详细讨论 IP 别名
[*] Network aliasing <*> IP: aliasing support |
此选项使您可以收集有关离开和到达您机器的 IP 流量的数据量(我们在第 10 章 中详细介绍了这一点)
[*] IP: accounting |
此选项解决了与某些版本的 PC/TCP(一种用于基于 DOS 的 PC 的商业 TCP/IP 实现)的不兼容性问题。 如果您启用此选项,您仍然可以与普通的 Unix 机器通信,但通过慢速链接可能会影响性能
--- (it is safe to leave these untouched) [*] IP: PC/TCP compatibility mode |
此功能启用反向地址解析协议 (RARP)。 无盘客户端和 X 终端使用 RARP 在启动时请求其 IP 地址。 如果您计划为这类客户端提供服务,则应启用 RARP。 标准网络实用程序中包含的一个名为 rarp 的小程序用于向内核 RARP 表添加条目
<*> IP: Reverse ARP |
通过 TCP 发送数据时,内核必须将数据流分解为数据块以传递给 IP。 块的大小称为最大传输单元,或 MTU。 对于可以通过以太网等本地网络访问的主机,通常使用与以太网数据包的最大长度一样大的 MTU,即 1,500 字节。 当通过广域网(如 Internet)路由 IP 时,最好使用较小尺寸的数据报,以确保它们不需要通过称为IP 分片的过程在路由中进一步分解。[2] 内核能够自动确定 IP 路由的最小 MTU,并自动配置 TCP 连接以使用它。 默认情况下,此行为处于启用状态。 如果您回答y来选择此选项,此功能将被禁用。
如果您确实想对发送到特定主机的数据使用较小的包大小(例如,因为数据通过 SLIP 链路),您可以使用 route 命令的 mss 选项来执行此操作,本章末尾对此进行了简要讨论
[ ] IP: Disable Path MTU Discovery (normally enabled) |
IP 协议支持一项名为源路由的功能。 源路由允许您通过将路由编码到数据报本身中来指定数据报应遵循的路由。 在 RIP 和 OSPF 等路由协议普及之前,这可能曾经很有用。 但如今,它被认为是一种安全威胁,因为它可以通过绕过路由器的路由表,为聪明的攻击者提供一种规避某些类型的防火墙保护的方法。 您通常会希望过滤掉源路由数据报,因此通常会启用此选项
[*] IP: Drop source routed frames |
此选项启用对 IPX 的支持,IPX 是 Novell Networking 使用的传输协议。 Linux 将非常乐意充当 IPX 路由器,并且此支持在您拥有 Novell 文件服务器的环境中非常有用。 NCP 文件系统还要求在您的内核中启用 IPX 支持; 如果您希望连接并挂载您的 Novell 文件系统,您必须启用此选项(我们将在第 15 章中讨论 IPX 和 NCP 文件系统)
<*> The IPX protocol |
这三个选项选择支持 Linux 支持的三种业余无线电协议:AX.25、NetRom 和 Rose(我们没有在本书中描述它们,但 AX25 HOWTO 中详细介绍了它们)
<*> Amateur Radio AX.25 Level 2 <*> Amateur Radio NET/ROM <*> Amateur Radio X.25 PLP (Rose) |
Linux 支持另一种驱动程序类型:虚拟驱动程序。 以下问题出现在设备驱动程序部分的开头
<*> Dummy net driver support |
虚拟驱动程序实际上并没有做太多事情,但它在独立或 PPP/SLIP 主机上非常有用。 它基本上是一个伪装的回环接口。 在提供 PPP/SLIP 但没有其他网络接口的主机上,您希望拥有一个始终带有您的 IP 地址的接口。 这在第 5 章中的5.7.7 节" 中进行了更详细的讨论。 请注意,如今您可以通过使用 IP 别名功能并将您的 IP 地址配置为回环接口上的别名来实现相同的结果。
[1] | 人们应该使用开发内核并在发现错误时报告错误; 如果您有一台可以用作测试机器的机器,那么这样做非常有用。 关于如何报告错误的说明在/usr/src/linux/REPORTING-BUGSLinux 内核源代码中。 |
[2] | 请记住,IP 协议可以通过多种不同类型的网络传输,并非所有网络类型都支持像以太网那样大的数据包大小。 |