1. 课程导论:Linux Bridge 在虚拟化与容器网络中的核心地位
1.1 为什么需要 Linux Bridge?
在物理网络中,交换机(Switch)工作在 OSI 模型的第二层(数据链路层),负责根据 MAC 地址表转发以太网帧,并支持 VLAN 隔离和生成树协议(STP)防止环路。Linux Bridge 是内核中实现的纯软件二层交换机,它将物理网卡、虚拟网卡(veth/tap)等接口“桥接”到同一个广播域中,使连接在桥上的设备仿佛插在同一台物理交换机上。
核心定位: Linux Bridge 是虚拟化(KVM/QEMU)和容器(Docker/Kubernetes)网络虚拟化的基石。没有它,虚拟机无法获得独立的 MAC/IP 地址,容器也无法实现跨主机通信。
1.2 应用场景全景
| 场景 | 典型组件 | Bridge 角色 |
|---|---|---|
| KVM 虚拟化 | libvirt + tap 设备 | 将多个 VM 的 tap 接口桥接到物理网卡,实现 VM ↔ 主机 ↔ 外网通信 |
| Docker 默认网络 | docker0 网桥 | 容器通过 veth pair 接入 docker0,实现同主机容器互访 |
| Kubernetes Pod 网络 | CNI 插件(Flannel/Calico) | 部分方案依赖 Linux Bridge 作为 Pod 的接入二层设备 |
| NFV/边缘计算 | OVS + Linux Bridge 混合 | Linux Bridge 提供轻量级二层转发,配合 OVS 实现流表控制 |
| 网络实验/教学 | netns + veth + bridge | 在单机模拟复杂二层拓扑,验证 STP/VLAN 行为 |
1.3 Linux Bridge 与物理交换机的对比
| 特性 | 物理交换机 | Linux Bridge |
|---|---|---|
| 转发依据 | ASIC 硬件查 MAC 表 | 内核软件查 FDB(转发数据库) |
| 环路防护 | STP/RSTP/MSTP(硬件加速) | 内核 STP 实现(基于 IEEE 802.1D) |
| VLAN 支持 | 802.1Q 硬件标记/剥离 | 内核 VLAN 子接口 + bridge vlan_filtering |
| 转发性能 | 线速(ns 级延迟) | 受 CPU 频率和内核网络栈开销影响(μs 级) |
| 可编程性 | CLI / SNMP / NETCONF | iproute2 / sysfs / netlink / eBPF |
| 成本 | 硬件成本高 | 纯软件,零额外硬件成本 |
性能提示: 在纯二层转发场景(同一广播域内),Linux Bridge 的 PPS(包每秒)可达百万级别。若开启 VLAN 过滤、STP 或 eBPF 附加程序,会引入额外 CPU 开销,需根据业务场景权衡。
1.4 内核二层转发路径概览
理解 Linux Bridge 必须掌握其在内核网络栈中的位置。下图展示了一个数据包从物理网卡进入,经过 Bridge 处理,最终到达虚拟机或容器的完整路径:
1.5 课程目标与学习路径
本课程旨在帮助学员从源码和内核机制层面彻底掌握 Linux Bridge,具备独立排查二层网络问题、优化转发性能以及定制桥接行为的能力。
课程目标
- 原理层: 深入理解 Linux Bridge 的 FDB 学习/老化、MAC 转发/泛洪、STP 状态机、VLAN 过滤等核心机制。
- 实践层: 熟练使用 iproute2、bridge、brctl、tcpdump、bpftrace 等工具进行桥接网络排障与性能分析。
- 源码层: 读懂 net/bridge/ 目录下的关键代码(br_input.c、br_forward.c、br_stp.c、br_fdb.c),理解内核桥接子系统的设计思想。
- 进阶层: 掌握 eBPF 在 Bridge 上的附加点(TC/XDP),以及如何通过 netlink 事件监控桥接拓扑变化。
学习路径(30 章规划)
| 阶段 | 章节范围 | 核心内容 |
|---|---|---|
| 基础篇 | 第 1–5 章 | Bridge 概念、创建/管理、FDB 表、VLAN 基础、STP 入门 |
| 进阶篇 | 第 6–15 章 | STP 状态机详解、VLAN 过滤实现、多桥互连、netlink 监控、性能基准测试 |
| 源码篇 | 第 16–25 章 | br_input/br_forward/br_stp/br_fdb 源码逐行分析、内核网络栈交互、锁与并发 |
| 实战篇 | 第 26–30 章 | eBPF 附加 Bridge、容器网络排障案例、大规模集群桥接优化、自定义桥接模块开发 |
前置要求: 建议学员具备 C 语言基础、Linux 基本网络命令使用经验(ip/ifconfig/tcpdump),以及 OSI 二层/三层基本概念。每章均提供可复现的实验环境(基于 Vagrant + Ubuntu 22.04 内核 5.15+)。